Import OpenMP:foo()和bar()之间的区别是什么
Q1是foo()和bar()等价物吗?它们不是等价物Import OpenMP:foo()和bar()之间的区别是什么,import,openmp,Import,Openmp,Q1是foo()和bar()等价物吗?它们不是等价物 foo()将按顺序执行两个fprintf(部分)bar()可以并行执行它们 有关详尽的参考资料,请参阅 本质上,在foo()的情况下,单个工作线程处理第一部分,然后完成并与主线程重新同步(顺便说一句,屏障隐含在单个构造的末尾)。然后新的工作线程处理第二部分,完成,并与主线程重新同步 对于bar(),一个单独的工作线程处理每个部分(第一部分first part,是一个隐式部分)。工作线程并行完成工作 #pragma-omp并行 omp并行指令显
foo()
将按顺序执行两个fprintf
(部分)bar()
可以并行执行它们
有关详尽的参考资料,请参阅
本质上,在foo()
的情况下,单个工作线程处理第一部分
,然后完成并与主线程重新同步(顺便说一句,屏障
隐含在单个
构造的末尾)。然后新的工作线程处理第二部分
,完成,并与主线程重新同步
对于bar()
,一个单独的工作线程处理每个部分(第一部分first part
,是一个隐式部分)。工作线程并行完成工作
#pragma-omp并行
omp并行指令显式
指示编译器并行化
所选的代码块。当
遇到并行区域时
形成了线程的逻辑团队。
团队中的每个线程执行所有
平行区域内的语句
除了工作共享结构。
工作共享结构中的工作是
分布在线程中的
团队
循环迭代必须是独立的
在循环可以并行化之前。
最后存在一个隐含的障碍
一个并行语句块的
嵌套的平行区域始终为空
连载
#布拉格omp单曲
omp single指令标识
必须由
单个可用线程
最后存在一个隐含的障碍
并行语句块的构造
除非指定了nowait条款
#pragma omp段,#pragma omp段
omp区段指令分发
在绑定到定义的
平行区域
omp段指令是可选的
对于第一个程序代码段
在omp节指令中。
以下段前面必须有
omp段指令。全omp
节指令必须出现在
程序的词汇结构
与关联的源代码段
omp部分指令
当程序执行到达omp时
指令部分,程序段
由以下omp部分定义
指令是为并行而分布的
在可用线程之间执行。A.
屏障是在
大项目区域的结束
与omp部分关联
指令,除非nowait条款
指定的
下面是我对OpenMP的一点记忆,在这方面的帮助下
指令“为任意顺序代码块指定并行执行。每个部分由团队中的一个线程执行一次。”SECTION
指定一个代码块“其中只允许一个线程执行代码;未选择执行此部分的线程将忽略代码。”SINGLE
指令强制所有线程在该点相遇,从而生成一个块,直到所有线程都赶上为止BARRIER
void foo(void) {
#pragma omp parallel
{
#pragma omp single
{fprintf(stderr, "first part\n"); }
#pragma omp barrier
#pragma omp single
{ fprintf(stderr, "second part\n"); }
}
}
void bar (void) {
#pragma omp parallel
{
#pragma omp sections
{
fprintf(stderr, "first part\n");
#pragma omp section
fprintf(stderr, "second part\n");
}
}
}