2014-11-06 13 views
7

So habe ich versucht, OpenMP mit einer der neuesten Version von Clang, clang version 3.4.2 (tags/RELEASE_34/dot2-final) zu verwenden. Gefolgt das Verfahren zu kompilieren und die Wege der omp.h hinzufügen, dann meine hello.c Kompilieren mit:Verwenden von OpenMP mit llvm-clang

clang -fopenmp hello.c 

und dann ausgeführt wird, kann es immer noch nicht mehr als 1 Threads verwenden:

Bash-4.1$ ./a.out 
Hello from thread 0, nthreads 1 

PS: Ich habe versucht, export OMP_NUM_THREADS=8 manuell zu exportieren, aber das hat auch nichts gelöst. Irgendwelche Ideen?

UPDATE: Dies ist die hello.c:

#include <omp.h> 
#include <stdio.h> 
int main() { 
#pragma omp parallel 
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());} 
+0

Bitte zeigen Sie uns den Code für 'Hallo.c'. – Mysticial

+0

hier ist es @Mysticial – Amir

+0

Warum nicht versuchen, #pragma omp parallel num_threads (#noofthreads) –

Antwort

4

Trotz der Tatsache erhalten, dass seine ein bisschen spät in Bezug auf die Zeitstempel von meiner ursprünglichen Frage, aber ich möchte um die Antwort hier zu erwähnen, damit zumindest die Zeit der Leute spart, die mit ähnlichem Problem konfrontiert wird.

LLVM selbst unterstützt Openmp derzeit nicht direkt von Anfang an. Sie können den Code omp mit Intel Runtime Support kompilieren und ausführen lassen. Wenn Sie jedoch einen sauberen clang unterstützen möchten, der OpenMP unterstützt, gibt es einen Stamm des Projekts unter OpenMP-Clang, den Sie klonen und erstellen können. Die aktuelle Unterstützung ist OpenMP 3.1 Spezifikation und sie erreichen OpenMP bald 4.0-Spezifikation zu unterstützen:

$ git clone https://github.com/clang-omp/llvm_trunk llvm 
$ git clone https://github.com/clang-omp/compiler-rt_trunk llvm/projects/compiler-rt 
$ git clone https://github.com/clang-omp/clang_trunk llvm/tools/clang 

Vergessen Sie nicht die Intel® OpenMP* Runtime Library danach zu bauen, wie Sie omp.h und /path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so brauchen

0

Versuchen Anzahl von Threads Einstellung omp_set_num_thread() -Funktion. Wenn es nicht funktioniert, versuchen Sie erneut, den Clang einzurichten.

#include <omp.h> 
#include <stdio.h> 
int main() { 
     omp_set_num_threads(4); 
     #pragma omp parallel 
     { 
     printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(),  omp_get_num_threads()); 
     }  
} 

finden Sie ruft mp_get_max_threads() in parallelen und seriellen Region und sehen, was Sie

+0

interessant ist, wenn ich dies ausfühle:' clang -g -emit-llvm -S -c -fopenmp hallo.c -o hallo.ll' ich bekomme diese Warnung: 'clang: warning: argument unbenutzt während der kompilation: '-fopenmp'', weißt du warum ?? – Amir

+0

Wenn Sie -fopenmp nicht verwenden, gibt der Compiler einen Fehler über undefinierten Verweis auf Funktionen von openMP aus. Wenn die Bibliothek nicht standardmäßig enthalten ist –

+0

nein Ich habe die Prozeduren hier ausgeführt: 'http: // openmp.llvm.org/'und installiere die Bibliothek und exportiere den Pfad. davor hatte ich Fehler aber jetzt nicht mehr. – Amir

0

Ich war nur ein Sehen fädeln Sie auch, mit Klangversion 3.8.0 (Stamm 252425). Ich las dann einige aktuelle Nachrichten in https://clang-omp.github.io:

27. November 2015 - Weiterentwicklung der OpenMP-Unterstützung in Klirren/llvm Compiler verschoben www.llvm.org. Diese Seite wird nur für Archivzwecke archiviert. Danke an alle, die alle dieser Jahre beigetragen haben!

... und so kompilierte ich LLVM/Clang aus Stamm; kompiliert die OpenMP-Laufzeitbibliothek mit den ausgezeichneten Anweisungen here; und jetzt funktioniert es.