如何启用和使用OpenMP?

时间:2014-12-09 17:43:48

标签: multithreading fortran multiprocessing openmp

我决定在经过谷歌和stackoverflow的冲浪和阅读之后问这个问题,并在我的四核机器上使用Ubuntu 12.04在Fortran上做一些实验,最后发现自己回到原点。所以这就是整个故事的方式。

获得关于并行计算的some basic knowledge后,我决定采用开放式mp。我可以找到一个tutorial for beginner但是无法超越第一课,因为即使使用first chapter中给出的命令,我的计算机也从未创建过多个线程。然后我在stackoverflow.com上搜索并找到a post,它提供了一个调用omp_set_dynamic(0)的解决方案。但是,在我的终端上输入此内容后,会出现以下错误:

bash: syntax error near unexpected token `0'

所以我不得不离开这个!

在此之后,我搬到this site并认为这就是它!但是在进行第一次练习之后,我发现无法继续进行,因为我甚至无法运行模型Fortran程序,因为它给出了以下错误。

/tmp/ccaqbCe0.o: In function `MAIN__':
first_open_mp.f95:(.text+0xa): undefined reference to `omp_get_thread_num_'
first_open_mp.f95:(.text+0x9c): undefined reference to `omp_get_num_threads_'
collect2: ld returned 1 exit status

现在我发现自己完全无助于这一切。有什么方法可以让我至少在逻辑上学习开放式mp并使用我机器中的所有内核?我非常渴望学习它,并且非常感谢任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:0)

OpenMP不是标准的Fortran。您必须学习编译器的手册如何启用此扩展以及是否可以。有些编译器甚至不支持OpenMP。

您仍未指定使用哪种编译器,因此我无法更具体。 Gfortran有-fopenmp选项。许多其他编译器都有-openmp选项。

BTW找到一些较少的史前教程。具体来说,使用Fortran 90和omp_lib模块调用过程。但是我建议你尽可能使用环境变量。我的60 000行代码并行求解器只需要在非常少的位置调用该模块,以获得线程数和当前线程数。