2014-11-06 3 views
7

Così ho provato a utilizzare OpenMP con una delle ultime versioni di clang, clang version 3.4.2 (tags/RELEASE_34/dot2-final). Seguito la procedura per compilare e aggiungere i percorsi di omp.h, poi compilazione mia hello.c utilizzando:Utilizzo di OpenMP con llvm-clang

clang -fopenmp hello.c 

e poi eseguirlo, ancora non è possibile utilizzare più di 1 discussioni:

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

PS: ho provato ad esportare manualmente export OMP_NUM_THREADS=8 ma questo non ha risolto nulla. Qualche idea?

AGGIORNAMENTO: Questa è la ciao.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

Mostraci il codice per "ciao.c". – Mysticial

+0

qui è @Mysticial – Amir

+0

Perché non provare #pragma omp parallelo num_threads (#noofthreads) –

risposta

4

Nonostante il fatto che la sua un pò in ritardo per quanto riguarda il time-stamp della mia domanda originale, ma vorrei per citare la risposta qui così almeno salva il tempo delle persone che affrontano un problema simile.

LLVM attualmente non supporta lo Openmp subito pronto per l'uso. Puoi farlo compilare ed eseguire il codice codificato omp con Intel Runtime Support. Tuttavia, se vuoi avere un clang pulito che supporta OpenMP, c'è un trunk del progetto a OpenMP-Clang che puoi clonare e compilare. Il supporto corrente è OpenMP specifiche 3.1 e raggiungono a supporto OpenMP specifica 4.0 presto:

$ 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 

Non dimenticare di costruire l'Intel® OpenMP* Runtime Library dopo questo di cui hai bisogno e omp.h/path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so

0

Prova modificando numero di fili utilizzando funzione omp_set_num_thread(). Se non funziona, prova a impostare di nuovo clang.

#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()); 
     }  
} 

anche provare a chiamare mp_get_max_threads() della regione sia parallela e seriale, e vedere quello che si ottiene

+0

cosa interessante è quando eseguo questo:' clang -g -emit-llvm -S -c -fopenmp ciao.c -o ciao.ll' sto ricevendo questo avviso: 'clang: warning: argomento non usato durante la compilazione: '-fopenmp'', sai perché? – Amir

+0

Se non si utilizza -fopenmp, il compilatore genera un errore relativo al riferimento non definito alle funzioni di openMP. In caso contrario, la libreria potrebbe essere inclusa per impostazione predefinita –

+0

no, ho eseguito le procedure qui: 'http: // openmp.llvm.org/'e installa la libreria ed esporta il percorso. prima ho avuto errore ma ora non più. – Amir

0

stavo vedendo solo una thread anche, con clang versione 3.8.0 (trunk 252425). Ho poi letto una notizia recente al https://clang-omp.github.io:

27 Novembre 2015 - Ulteriore sviluppo del supporto OpenMP in clang/LLVM compilatore trasferisce a www.llvm.org. Questo sito è gestito solo per scopi di archivio . Grazie a tutti coloro che hanno contribuito a tutti gli questi anni!

... e così ho compilato LLVM/Clang dal baule; compilato la libreria di runtime OpenMP usando le eccellenti istruzioni here; e ora funziona.