我有这样一个程序块:同步构造内部编译为
for (iIndex1=0; iIndex1 < iSize; iIndex1++)
{
for (iIndex2=iIndex1+1; iIndex2 < iSize; iIndex2++)
{
iCount++;
fDist =(*this)[iIndex1].distance((*this)[iIndex2]);
m_oPDF.addPairDistance(fDist);
if ((bShowProgress) && (iCount % 1000000 == 0))
xyz_exception::ui()->progress(iCount, (size()-1)*((size()-1))/2);
}
}
}
}
我试图parallelising内外环和通过将在ICOUNT关键区域。平行于此的最佳方法是什么?如果我用omp single或omp原子打包iCount,那么代码会给出一个错误,我发现这在omp内部是无效的。我想我正在添加许多无关的东西来对此进行合并。需要一些建议...
感谢,
萨彦
我建议你做的是忘掉ICOUNT了一会儿,parallelise你的最外层循环,并得到一些加速。完成之后,您可以尝试实施柜台的方法并检查其对加速的影响。现在,我认为当您使用OpenMP的经验表明您应该采取小步骤时,您正在尝试采取巨大的措施。 – 2010-05-26 08:48:15