【发布时间】:2021-03-09 15:56:12
【问题描述】:
我正在尝试使用 openMP 并行化脚本,但是当我测量它的执行时间(使用 omp_get_thread_num)时,结果很奇怪,
- 如果我将线程数设置为 2,它的测量值为 4935 us
- 将其设置为 1 大约需要 1083 我们
- 并删除每个 openmp 指令将其变为仅 9 us
这是我正在谈论的脚本的一部分(这个循环嵌套在另一个循环中)
for(j=(i-1); j>=0;j--){
a=0;
#pragma omp parallel
{
#pragma omp single
{
if(arreglo[j]>y){
arreglo[j+2]=arreglo[j];
}
else if(arreglo[j]>x){
if(!flag[1]){
arreglo[j+2]=y;
flag[1]=1;
}
arreglo[j+1]=arreglo[j];
}
}
#pragma omp single
{
if(arreglo[j]<=x){
arreglo[j+1]=x;
flag[0]=1;
a=1;
}
}
#pragma omp barrier
}
if (a==1){break;}
}
造成这种差异的原因可能是什么?某种瓶颈,还是只是同步的额外成本?
【问题讨论】:
标签: c multithreading performance parallel-processing openmp