我最近阅读了有关 OpenMP 的内容,并试图在我的程序中并行化一些现有的 for 循环以加快速度。但是,由于某种原因,我似乎将垃圾数据写入文件。我的意思是我没有将点 1、2、3、4 等写入我的文件,我有点 1、4、7、8 等。我怀疑这是因为我没有跟踪线程,它只会导致竞争条件?
我一直在阅读尽可能多的关于 OpenMP 的内容,因为它似乎是进行多线程编程的一个很好的抽象。我很感激任何指示,以了解我可能做错了什么。
这是我到目前为止一直在尝试做的事情(只有相关的代码):
#include <omp.h>
pixelIncrement = Image.rowinc/2;
#pragma omp parallel for
for (int i = 0; i < Image.nrows; i++ )
{
int k =0;
row = Image.data + i * pixelIncrement;
#pragma omp parallel for
for (int j = 0; j < Image.ncols; j++)
{
k++;
disparityThresholdValue = row[j];
// Don't want to save certain points
if ( disparityThresholdValue < threshHold)
{
// Get the data points
x = (int)Image.x[k];
y = (int)Image.y[k];
z = (int)Image.z[k];
grayValue= (int)Image.gray[k];
cloudObject->points[k].x = x;
cloudObject->points[k].y = y;
cloudObject->points[k].z = z;
cloudObject->points[k].grayValue = grayValue;
fprintf( cloudPointsFile, "%f %f %f %d\n", x, y, z, grayValue);
}
}
}
fclose( pointFile );
我确实在我的编译器设置中启用了 OpenMP(C/C++ -> 语言 -> Open MP Support (/openmp)。
关于可能是什么问题的任何建议?我在 Windows XP 32 位上使用四核处理器。