c - 3D 体积阵列的 OpenMP 嵌套循环竞争条件
问题描述
我有一个混合程序,它必须对 3D 阵列进行一些处理,描绘一个体积。每个核心选择自己的卷 (MPI) 部分,然后使用 OpenMP 进行多线程处理。但是,当我使用 pragma 行时,似乎存在竞争条件,并且并未处理卷的所有部分。所以假设我有一个由 0 组成的体积矩阵,函数是每个单元格加 5,我会发现有一半的单元格是空的,并且没有被处理。下面是大部分代码。如果我不包含 pragma 行,它会完美运行,这让我感到困惑。有任何想法吗?
for(z=start;z<=end;z++){
offset=sizeof(int)*(z*r*c);
fseek(fpIn,offset,SEEK_SET);
fread(tempbuffer,sizeof(int),r*c,fpIn);
#pragma omp parallel for collapse(2) private(x,y,z) schedule(static)
for(y=0;y<c;y++){
for(x=0;x<r;x++){
if(z>=z0 && z<z1 && y>=y0 && y<y1 && x>=x0 && x<x1){
volbuffer[y*c+x] = proc(tempbuffer[y*c+x]);
}
else{
volbuffer[y*c+x] = tempbuffer[y*c+x]
}
}
}
fseek(fpOut,offset,SEEK_SET);
fwrite(volbuffer,sizeof(int),r*c,fpOut);
}
解决方案
推荐阅读
- multithreading - ThreadPoolExecutor 在服务器启动几个小时后自动关闭
- javascript - 付款后显示贝宝交易详情
- ios - iPhoneSimulator11.4.sdk/usr/include/sys/cdefs.h:763:2:错误:不支持的架构
- python - django2 中 TEMPLATE_CONTEXT_PROCESSORS 的等价物是什么
- r - 数据框未正确重塑
- android-constraintlayout - 约束布局中的不同边距
- c++ - fill struct members where struct type is templated
- angular - Primeng p-calendar 在第二次单击时落后于模态对话框
- objective-c - 如何在 macOS 10.14 上检测暗模式?
- curl - cURL 错误 35:连接到 api.razorpay.com:443 的未知 SSL 协议错误