I ont un bloc de programme comme:synchronisation construire à l'intérieur de pragma pour
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);
}
}
}
}
j'ai essayé paralléliser la boucle interne et externe et en mettant iCount dans une région critique. Quelle serait la meilleure approche pour paralléliser cela? Si j'emballe iCount avec omp single ou omp atomic alors le code donne une erreur et j'ai compris que ce serait invalide dans omp pour. Je suppose que j'ajoute beaucoup de trucs superflus pour paralelliser ça. Besoin d'un conseil ...
Merci,
Sayan
Ce que je vous suggère de faire est oublier iCount pendant un certain temps, paralléliser votre boucle extérieure et obtenir une certaine accélération. Une fois que vous avez fait que vous pouvez expérimenter des façons de mettre en œuvre votre compteur et examiner leurs effets sur speedup. En ce moment, je pense que vous essayez de prendre des pas de géant lorsque votre niveau d'expérience avec OpenMP vous suggère devriez prendre des petits pas. –