我如何找到“并行”的实现?

时间:2011-02-03 18:54:26

标签: c parallel-processing openmp

我想知道omp parallel for和其他类似结构究竟发生了什么。我如何找到这些是如何实现的?知道这一点的人的简短摘要会很棒。感谢。

3 个答案:

答案 0 :(得分:3)

Open MP仅仅是一个规范,供应商如何选择实现它取决于他们。话虽这么说,GCC使用的库是开源的,因此是Intels Thread构建块,它有一个并行的,只是不作为一个pragma,但它的实现是你的事后

答案 1 :(得分:0)

http://www.compunity.org/futures/omp-api.html

  

考虑一个简单的OpenMP程序,带有一个主程序,调用函数foo,包含一个OpenMP并行构造,用四个线程执行。在第一次进入并行区域之前,程序只有一个线程,即主线程,并且该线程在用户模型和实现模型中都具有相同的callstack:

Master
foo
main
<start>
  

进入并行区域后,有四个线程,在用户模型中,它们的callstacks看起来像:

Master     Slave 1    Slave 2     Slave 3
foo-OMPa   foo-OMPa   foo-OMPa    foo-OMPa
foo        foo        foo         foo
main       main       main        main
<start>    <start>    <start>     <start>

答案 2 :(得分:0)

如您所知,OpenMP是在编译器内部实现的,因为它会转换代码并生成并行化代码。如果您想了解内部实现工作,请阅读解释英特尔编译器OpenMP实现细节的this article

当然,您可以在libgomp中浏览gcc的OpenMP实现,例如omp-low.c。