2014-11-06 18 views
7

Vì vậy, tôi đã cố gắng sử dụng OpenMP với một trong các phiên bản mới nhất của clang, clang version 3.4.2 (tags/RELEASE_34/dot2-final). Tiếp theo các thủ tục để biên dịch và thêm các đường dẫn của omp.h, sau đó Lập hello.c tôi sử dụng:Sử dụng OpenMP với llvm-clang

clang -fopenmp hello.c 

và sau đó chạy nó, nó vẫn không thể sử dụng nhiều hơn 1 đề:

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

PS: Tôi đã cố gắng xuất thủ công export OMP_NUM_THREADS=8 nhưng điều đó cũng không giải quyết được gì. Bất kỳ ý tưởng?

UPDATE: Đây là 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

Vui lòng hiển thị cho chúng tôi mã cho 'hello.c'. – Mysticial

+0

ở đây nó là @Mysticial – Amir

+0

Tại sao không thử #pragma omp song song num_threads (#noofthreads) –

Trả lời

4

Mặc dù thực tế rằng nó khá muộn về thời gian đóng dấu của câu hỏi ban đầu của tôi, nhưng tôi muốn đề cập đến câu trả lời ở đây vì vậy ít nhất nó tiết kiệm thời gian của người dân đối mặt với vấn đề tương tự.

Bản thân LLVM hiện không hỗ trợ Openmp ngay ngoài hộp. Bạn có thể làm cho nó biên dịch và chạy mã được gắn thẻ omp với Intel Runtime Support. Tuy nhiên, nếu bạn muốn có clang hỗ trợ OpenMP sạch, có một nhánh của dự án tại OpenMP-Clang mà bạn có thể sao chép và xây dựng. Sự hỗ trợ hiện nay là OpenMP 3.1 đặc điểm kỹ thuật và họ sẽ đạt được để hỗ trợ OpenMP 4,0 đặc điểm kỹ thuật sớm:

$ 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 

Đừng quên để xây dựng Intel® OpenMP* Runtime Library sau này khi bạn cần omp.h/path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so

0

Hãy thử thiết lập số lượng đề sử dụng) chức năng (omp_set_num_thread. Nếu nó không hoạt động, hãy thử thiết lập lại 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()); 
     }  
} 

Cũng thử gọi mp_get_max_threads() trong cả hai khu vực song song và nối tiếp, và xem những gì bạn nhận được

+0

điều thú vị là khi tôi thực hiện điều này:' clang -g -emit-llvm -S -c -fopenmp hello.c -o hello.ll' tôi nhận được cảnh báo này: 'clang: warning: đối số không được sử dụng trong quá trình biên dịch: '-fopenmp'', bạn có biết tại sao không ?? – Amir

+0

Nếu bạn không sử dụng -fopenmp, trình biên dịch sẽ ném lỗi về tham chiếu không xác định đến các chức năng của openMP. Nếu không phải là thư viện có thể được bao gồm theo mặc định –

+0

không, tôi đã thực hiện các thủ tục tại đây: 'http: // openmp.llvm.org/'và cài đặt thư viện và xuất đường dẫn. trước đó tôi đã có lỗi nhưng bây giờ không còn nữa. – Amir

0

Tôi đã chỉ nhìn thấy một thread quá, với clang phiên bản 3.8.0 (trunk 252425). sau đó tôi đọc một số tin tức gần đây tại https://clang-omp.github.io:

ngày 27 tháng 11 năm 2015 - Tiếp tục phát triển hỗ trợ OpenMP trong kêu vang/biên dịch llvm chuyển đến www.llvm.org. Trang web này được duy trì cho mục đích lưu trữ . Cảm ơn tất cả những người đã đóng góp tất cả những năm này!

... và vì vậy tôi đã biên soạn LLVM/Clang từ thân cây; biên soạn thư viện thời gian chạy OpenMP bằng cách sử dụng các hướng dẫn tuyệt vời here; và bây giờ nó hoạt động.

Các vấn đề liên quan