2017-11-04 4 views
-1

Ich habe versucht, ein C++ - Programm mit Openmp für die Parallelisierung zu schreiben. Leider bekomme ich einen Kompilierungsfehler, den ich nicht verstehe. Ich habe den g ++ - Befehl, die problematischen Codezeilen und die Fehlermeldung aufgelistet. Wenn ich wichtige Informationen verpasst habe, lass es mich wissen.OpenMP 'unbenutzte Variable' Kompilierung Fehler

g++ -o Pogramm -Wall -fopenmp Programm.cpp 

#pragma omp parallel 
int id,nths,tnbr; 
id=omp_get_thread_num(); 
nths=omp_get_num_thread(); 

Tree.cpp:52:7: warning: unused variable ‘id’ [-Wunused-variable]

error: ‘id’ was not declared in this scope id=omp_get_thread_num();

Kann mir jemand sagen, warum 'id' ist nicht die nicht angemeldet?

+3

Fertigen Sie sich ein [mcve]. Wenn das Problem und die Lösung nicht offensichtlich sind, fügen Sie der Frage MCVE hinzu. – user4581301

+1

Ihr Compiler kompiliert nicht, was Sie denken, dass es ist? –

+1

Meinen Sie, geschweifte Klammern nach omp parallel zu setzen? – tim18

Antwort

3

Gemäß Ihrem Code umfasst der Bereich der parallelen Region, in dem Sie die ID definieren, nur die folgende Zeile, d. H. Die Zeile, in der Sie die ID definieren. Wenn Sie die ID-Variable außerhalb verwenden, erhalten Sie daher einen undefinierten Variablenfehler. Außerdem erhalten Sie eine Warnung für eine nicht verwendete ID-Variable, da Sie sie nicht in der parallelen Region verwenden (wo Sie sie verwenden könnten).

meist wahrscheinlich vergessen hat, nur die geschweiften Klammern hinzuzufügen, um den Umfang zu vergrößern alltogether parallelisiert werden, dh

#pragma omp parallel 
{ 
    int id,nths,tnbr; 
    id=omp_get_thread_num(); 
    nths=omp_get_num_thread(); 
    ... 
} 

Ein minimales Arbeitsbeispiel ist:

#include<iostream> 
#include<omp.h> 
using namespace std; 
int main() { 
#pragma omp parallel 
    { 
     int id,nths,tnbr; 
     id=omp_get_thread_num(); 
     nths=omp_get_num_threads(); 
     cout << "id, nths: " << id << nths << endl; 
    } 
    return 0; 
} 

Diese erfolgreich kompiliert werden, z.B mit g ++ v. 4.8.5

g++ main.cpp -fopenmp -Wall 
+0

10 Vielen Dank. Ich habe vergessen, Klammern zu verwenden, aber ich bekomme den gleichen Kompilierungsfehler mit entsprechenden Klammern. – Lukas

+0

Ich habe ein minimales Arbeitsbeispiel hinzugefügt. Es sollte helfen. Vielleicht müssen Sie die Bereiche in Ihrem Code sorgfältig überprüfen. – Franz