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