use openmp for your simplified parallelism
Contents
这里主要是废话,权且当作是对上一篇博文的补充。
多数情况下,MPI并不是最好的选择,这两天的测试让我深有体会。要实现MPI,要不就选择用Cluster,要不就选个好一点的多核PC。到目前为止,我其实还不清楚我的双核MacBookPro是为什么无法承担起这个任务的。
About OpenMP
Keep in mind that it’s an abbreviation for Open MultiProcessing, not Open MPI. OpenMP,仅仅只是一个应用程序接口,并不像MPI那样需要在各个处理器之间传递(SENDRCV)信息,这一点让我很是讨厌。因此,OpenMP使用起来就相对简单,算是一种轻量级的平行化方式。如果你想更简单点,OpenMP最擅长的事就是让你的DO循环
(Fortran)或者For循环
(C)并行化起来。当然,它能做到的远非如此。
Use OpenMP in your Mac
安装了GNU或者Intel编译器的用户,就已经自动集成了OpenMP接口。只是不同的编译器,编译选项不同。
Compiler | Option |
---|---|
GCC/GFORTRAN | -fopenmp |
IFORT/ICC | -openmp |
对于MAC用户而言,安装完ifort之后需要把ifort的动态库路径添加到系统动态库环境变量中;否则,编译过程会出现如下错误:
dyld: Library not loaded: libiomp5.dylib
修改 ~/.bash_profile,添加
export DYLD_LIBRARY_PATH=/opt/intel/lib/:$DYLD_LIBRARY_PATH
Manual for OpenMP
I would like to refer Blaise Barney’s tutorial.
a little example
! understand how many thread u are using
PROGRAM HELLO
IMPLICIT NONE
INTEGER TID, OMP_GET_THREAD_NUM, A, I
!$OMP PARALLEL PRIVATE(TID)
TID = OMP_GET_THREAD_NUM()
PRINT *, 'Hello World from thread = ', TID
do I = 1,1000000
A=A+((23.*23.)*23.)
end do
!$OMP END PARALLEL
END PROGRAM
Author F. Cheng
LastMod 2016-11-17