Ich frage mich, wie ich for Schleife unten auf sichere Weise parallelisieren kann. Ich fand eine mögliche Lösung wie this. Ich bin jedoch beschränkt auf OpenMP Version 2.0 und Boost Version 1.59.OpenMP v.2.0 oder Boost-Thread 1.59
Algorithmus Erläuterung:
Es iteriert alle meine Dreiecke auf, die innerhalb des Begrenzungsrahmens liegen, dann überprüft er Möglichkeit der Kreuzung (mit einem einzigartigen Dreieck) in _considerTriangle Funktion. Schließlich in der _considerTriangle, wenn ein Dreieck geschnitten wird, fügt es Dreieck zu einem Set-Container intersectedTri.
//Iterating through every triangle
std::set<Triangle> intersectedTri;
for(IntersectedTrianglesIterator it=tree.Begin_IteratorByBoundingBox(bbox_min,bbox_max);it!=tree.End_IteratorByBoundingBox(bbox_min,bbox_max);++it)
_ConsiderTriangle(it->GetTriangle());
Ich wundere mich, wie ich es sicher paralllise kann.
Sie müssen weitere Informationen zu Ihrem Code angeben. Es ist völlig unklar, was die zugrunde liegenden Datenstrukturen sind ('tree'), wie teuer bestimmte Operationen sind (' IntersectedTrianglesIterator :: operator ++ 'vs' _ConsiderTriangle', 'GetTriangel'), welcher Zustand während einer Iteration geändert wird, ob 'IntersectedTrianglesIterator' ist ein Direktzugriffs-Iterator, .... Bitte geben Sie ein [mcve]. – Zulan
BTW: OpenMP 2.0 ist mehr als ** 14 Jahre alt. Haben Sie ernsthaft keine neuere Version verfügbar? – Zulan
Ich benutze Visual Studio, und wie Sie jetzt auch VS2015 keine neuere Version des OpenMP unterstützen wird. –