这里主要是废话,权且当作是对上一篇博文的补充。

多数情况下,MPI并不是最好的选择,这两天的测试让我深有体会。要实现MPI,要不就选择用Cluster,要不就选个好一点的多核PC。到目前为止,我其实还不清楚我的双核MacBookPro是为什么无法承担起这个任务的。

About OpenMP

Keep in mind that it’s an abbreviation for Open Multi­Processing, 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