我有這樣一個程序塊:同步構造內部編譯爲
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