2016-04-17 6 views
2

Ich habe ein Programm, das unabhängige Berechnungen auf einer Reihe von Bildern durchführt. Dies scheint wie eine gute Idee, OpenMP zu verwenden:Wie kann ich testen, ob C++ openmp verwendet?

//file: WoodhamData.cpp 
#include <omp.h> 

... 

void WoodhamData::GenerateLightingDirection() { 
    int imageWidth = (this->normalMap)->width(); 
    int imageHeight = (this->normalMap)->height(); 
    #pragma omp paralell for num_threads(2) 
    for (int r = 0; r < RadianceMaps.size(); r++) { 
     if (omp_get_thread_num() == 0){ 
      std::cout<<"threads="<<omp_get_num_threads()<<std::endl; 
     } 
     ... 
    } 
} 

Um OpenMP zu verwenden, ich -fopenmp meine Make-Datei hinzufügen, so gibt sie:

g++ -g -o test.exe src/test.cpp src/WoodhamData.cpp -pthread -L/usr/X11R6/lib -fopenmp --std=c++0x -lm -lX11 -Ilib/eigen/ -Ilib/CImg 

aber ich bin traurig zu sagen, mein Programmberichte threads=1 (von Terminal ./test.exe ... laufen)

Weiß jemand, was könnte falsch sein? Dies ist der langsamste Teil meines Programms, und es wäre großartig, es ein wenig zu beschleunigen.

+1

Kompilieren Sie mit "-Wall" und sehen Sie sich die Warnungen an. –

+0

@Bboson danke, das gab mir genau das, was ich brauchte! Zeigte mir genau das Problem, auf das kjpus hinwies. Verfluche meine schlechte Grammatik. – Kenkron

Antwort

2

Ihre OpenMP-Direktive ist falsch - sie ist "parallel" und nicht "paralell".

+0

Das hätte ich als Kommentar hinterlassen. Du hättest vorschlagen können, '-Wall' zu verwenden, damit das OP in der Zukunft andere Tippfehler findet. –

+0

Das ist meine schlechte, die Frage im Titel ist technisch anders als die, die ich in den Körper gesetzt habe. @Zbosons Antwort war diejenige, die ich wollte, aber das beantwortet die Frage im Körper richtig. Ich muss die Stackoverflow-Richtlinien konsultieren. – Kenkron

+1

@Kenkron, viele Male habe ich nicht die Ergebnisse bekommen, die ich wegen Tippfehlern in Pragma-Statements wollte. Ich habe viel Zeit damit verbracht, das printf-Debugging durchzuführen, das nie das Problem mit der Pragma-Anweisung gefunden hat. Seitdem habe ich gelernt, '-Wall' mehr zu benutzen. Dies ist wahrscheinlich eine Schwäche von OpenMP. Normaler C-Code würde einen Syntaxfehler ergeben, aber Sie erhalten nicht unbedingt Syntaxfehler mit Pragma-Anweisungen. Das ist eine interessante Frage. Ich frage mich, ob Sie eine Option aktivieren können, um unbekannte Pragma-Anweisungen als Fehler beim Kompilieren zu behandeln. '-Werror' ist manchmal zu hart, denke ich. –

Verwandte Themen