注意: 这是一系列“ 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命令行工具
$ xcode-select --install
应该弹出一个窗口,询问您获取Xcode还是进行安装。选择“安装”选项可避免下载超过4 GB的Xcode。只需几分钟即可完成。
2)安装自制软件
$ ruby?? -e“ $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) ”
让脚本运行,并在询问时回答“ y”。这不会花很长时间。
3)获取,安装和准备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;
}
编写一个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).*
编译并运行测试:
$ 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的副本,然后尝试包含的示例!
- BioFVM announcement on Blogspot: [click here]
- BioFVM on MathCancer.org: http://BioFVM.MathCancer.org
- BioFVM on SourceForge: http://BioFVM.sf.net
- BioFVM Method Paper in BioInformatics: http://dx.doi.org/10.1093/bioinformatics/btv730