当前位置: 代码迷 >> 综合 >> 在OSX(自制版本)上设置gcc / OpenMP
  详细解决方案

在OSX(自制版本)上设置gcc / OpenMP

热度:77   发布时间:2024-01-24 06:17:36.0

注意:  这是一系列“ how-to”博客文章中的第三篇  ,以帮助BioFVM和  PhysiCell的新用户和开发人员  。本指南适用于OSX用户。Windows用户应  改用本指南  。即将发布Linux指南。

这些说明应使您在使用gcc的OpenMP(例如 BioFVM  和  PhysiCell)编译64位C ++项目的最小环境下运行并运行 。这些说明已在OSX 10.11(El Capitan)上进行了测试,但它们应可在任何合理的OSX最新版本上使用。

最终,您将拥有编译器和关键Makefile功能。整个工具链都是免费和开源的。

当然,您可以使用其他编译器和更复杂的集成桌面环境,但是这些说明将为您提供支持64位二进制文??件和OpenMP并行化的良好基准系统。

 

注意1:  OSX / Xcode  似乎   开箱即用了 gcc(您可以在终端窗口中键入“ gcc”),但这实际上 只是映射回Apple的clang版本。las,这将不支持OpenMP进行并行化。

注意2:  昨天在这篇文章中,我们展示了如何使用流行的 MacPorts软件包管理器设置gcc。由于MacPorts从源代码构建gcc(及其所有依赖项!),因此需要非常,非常长的时间。在我的2012 Macbook Air上,此步骤花费了 16个小时。本教程使用Homebrew大大加快了过程!

注意3:这是对先前版本的更新。它包含了新的信息,即无需完全下载/安装Xcode即可安装Xcode命令行工具。非常感谢Homebrew项目的Walter de Back和Tim 的帮助!

您需要什么:


  • XCode命令行工具:  Homebrew和相关的程序包管理器需要这些命令行工具。现在,安装说明非常简单,并包含在下面。从2016年1月18日开始,它将安装2343版。
  • Homebrew:这是OSX的软件包管理器,它使您可以轻松下载并安装许多linux实用程序,而无需从源代码构建它们。您特别需要它来获取gcc。安装是一个简单的命令行脚本,如下所述。从2016年1月17日开始,它将下载0.9.5版。 
  • gcc5 (来自Homebrew)  这是gcc的最新64位版本,支持OpenMP。从2016年1月17日开始,它将下载版本5.2.0。

主要步骤:


1)安装XCode命令行工具

打开一个终端窗口(打开Launchpad,然后依次单击“其他”和“终端”)并运行
 
$ xcode-select --install

应该弹出一个窗口,询问您获取Xcode还是进行安装。选择“安装”选项可避免下载超过4 GB的Xcode。只需几分钟即可完成。 

2)安装自制软件

打开一个终端窗口(打开启动板,然后是“其他”,然后是“终端”),然后运行:
$ ruby?? -e“ $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) ”

让脚本运行,并在询问时回答“ y”。这不会花很长时间。 

3)获取,安装和准备gcc

打开一个终端窗口(请参见上文),并搜索5.x或更高版本的gcc:
$ brew search gcc5

您应该会看到软件包列表,包括gcc5。记下发现的内容。(以我为例,它找到了homebrew / versions / gcc5,

然后下载并安装了gcc5:> brew install homebrew / versions / gcc5 这将下载所需的任何依赖项,通常已经进行了预编译。整个过程只需要五到十个即可。分钟, 最后,您需要获得编译器的确切名称,在终端窗口中,键入  g ++,然后两次按tab键以查看列表:

Pauls-MBA:~ pmacklin$ g++
g++       g++-5       g++-mp-5 

查找名称不带“ mp”的g ++版本。就我而言,它是g ++-5。通过检查其版本,仔细检查您是否拥有正确的版本。它看起来应该像这样: 

Pauls-MBA:~ pmacklin$ g++-5 --version
g++-5 (Homebrew gcc5 5.2.0) 5.2.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

请注意,信息中将显示Homebrew。正确的编译器是g ++-5。 

5)测试编译器

编写一个基本的并行程序:

打开终端(见上文)。您应该位于用户配置文件的根目录中。创建一个新的子目录,输入它,并创建一个新文件:  


$ mkdir omp_test
$ cd omp_test
$ nano omp_test.cpp

然后,编写您的基本OpenMP测试: 

#include <iostream>
#include <cmath> 
#include <vector>
#include <omp.h>int main( int argc, char* argv[] ) 
{omp_set_num_threads( 8 ); double pi = acos( -1.0 ); std::cout << "Allocating memory ..." << std::endl; std::vector<double> my_vector( 128000000, 0.0 ); std::cout << "Done!" << std::endl << std::endl; std::cout << "Entering main loop ... " << std::endl; #pragma omp parallel forfor( int i=0; i < my_vector.size(); i++ ){my_vector[i] = exp( -sin( i*i + pi*log(i+1) ) ); } std::cout << "Done!" << std::endl; return 0; 
}
保存文件(作为omp_test.cpp)。(在nano中,使用[Control] -X,Y,然后确认文件名的选择。)
 
在上面的omp_set_num_threads()行中,将8替换为CPU上虚拟机的最大数量。(对于具有超线程的四核CPU,该数字为8。对于不具有超线程的六核CPU,该数字为6。)如有疑问,请暂时保留。 

编写一个makefile:

接下来,创建一个Makefile以开始编辑:
$ nano Makefile 

添加以下内容:

CC := g++-5
# replace this with your correct compiler as identified aboveARCH := core2 # Replace this with your CPU architecture.
# core2 is pretty safe for most modern machines. CFLAGS := -march=$(ARCH) -O3 -fopenmp -m64 -std=c++11COMPILE_COMMAND := $(CC) $(CFLAGS)OUTPUT := my_testall: omp_test.cpp$(COMPILE_COMMAND) -o $(OUTPUT) omp_test.cppclean:rm -f *.o $(OUTPUT).*
继续并将其保存(作为Makefile)。([Control] -X,Y,确认文件名。)

编译并运行测试:

返回您的(仍处于打开状态)命令提示符。编译并运行程序: 
 
$ make
$ ./my_test

输出应如下所示: 

Allocating memory ...
Done!Entering main loop ... 
Done!

注意1: 如果make命令给出诸如“ ****缺少分隔符”之类的错误,则需要在“ $(COMPILE_COMMAND)”和“ rm-带单个制表符的f“行。 

注意2: 如果编译器给出类似“致命错误:'omg.h'的错误”之类的错误,则您可能使用了Apple的clang版本,其中不包含OpenMP支持。您需要确保在makefile的CC行上指定编译器。 

现在,让我们验证代码是否正在使用OpenMP。

打开另一个终端窗口。代码运行时,运行top。看一下性能,特别是CPU使用率。在程序运行时,您应该看到CPU使用率非常接近“ 100%用户”。(这很好地表明您的代码正在按预期运行OpenMP并行化。)

下一步是什么?


下载BioFVM的副本,然后尝试包含的示例!

  1. BioFVM announcement on Blogspot: [click here] 
  2. BioFVM on MathCancer.org: http://BioFVM.MathCancer.org 
  3. BioFVM on SourceForge: http://BioFVM.sf.net 
  4. BioFVM Method Paper in BioInformatics: http://dx.doi.org/10.1093/bioinformatics/btv730