10 Stimmen

OpenMP und STL-Stil für

Ich versuche, mein Programm mit openMP zu parallelisieren. Das Programm verwendet stark STL-Wiederholungen. Es ist sagte dass openMP 3.0 dies bewältigen kann:

std::vector<int> N(2*N_max+1);

std::vector<int>::const_iterator n,m;
#pragma omp parallel for
for (n=N.begin(); n!=N.end(); ++n){
     //Task to be in parallel
};

Ich erhalte jedoch die folgende Fehlermeldung:

error: invalid controlling predicate

Ich verwende gcc 4.5.0, (openMP3 implementiert in 4.4.0) und meine Build-String ist:

g++  -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP

7voto

ejd Punkte 1677

Leider enthält die OpenMP V3.0 Spezifikation kein "!=" als Teil der legalen Syntax für eine kanonische for-Schleife. Wenn Sie jedoch Zugang zu einem aktuellen Intel-Compiler haben, ist dies als Erweiterung zulässig.

7voto

Standard-OpenMP verträgt sich im Allgemeinen nicht mit C++-Iteratoren. Der Standard verlangt, dass Iteratoren Iteratoren mit wahlfreiem Zugriff und konstanter Zeit für wahlfreien Zugriff sind. Außerdem erlaubt er nur < y <= o > y >= in Testausdrücken von for-Schleifen, aber nicht != .

Wenn Sie viel mit Iteratoren und STL arbeiten, sind Sie vielleicht besser dran mit Gewindebausteine .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X