2014-11-06 9 views
7

के साथ ओपनएमपी का उपयोग करके मैंने क्लेंग, clang version 3.4.2 (tags/RELEASE_34/dot2-final) के नवीनतम संस्करण में से एक के साथ ओपनएमपी का उपयोग करने की कोशिश की।llvm-clang

clang -fopenmp hello.c 

और फिर इसे चल रहा है, अभी भी यह 1 से अधिक धागे का उपयोग नहीं कर सकते हैं::

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

प्रक्रिया संकलन और omp.h के रास्ते जोड़ने के लिए, तो मेरे hello.c संकलन का उपयोग करने का पालन किया पीएस: मैंने export OMP_NUM_THREADS=8 मैन्युअल रूप से निर्यात करने की कोशिश की लेकिन इससे कुछ भी हल नहीं हुआ। कोई विचार?

अद्यतन:

#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

कृपया हमें 'hello.c' के लिए कोड दिखाएं। – Mysticial

+0

यहां @Mysticial – Amir

+0

क्यों नहीं है #pragma omp समानांतर num_threads (#noofthreads) –

उत्तर

4

मिल तथ्य यह है कि इसके थोड़े देर मेरी मूल प्रश्न के समय स्टाम्प के बारे में होने के बावजूद देखते हैं, लेकिन मैं चाहूँगा यहां जवाब का जिक्र करने के लिए कम से कम यह समान समस्या का सामना करने वाले लोगों के समय को बचाता है।

एलएलवीएम वर्तमान में वर्तमान में Openmp का समर्थन नहीं करता है। आप Intel Runtime Support के साथ omp टैग किए गए कोड को संकलित और चला सकते हैं। हालांकि, अगर आप ओपनएमपी का समर्थन करने वाले clang को साफ करना चाहते हैं, तो OpenMP-Clang पर प्रोजेक्ट का एक ट्रंक है जिसे आप क्लोन और बिल्ड कर सकते हैं। वर्तमान समर्थन OpenMP 3.1 विनिर्देश है और वे OpenMP 4.0 विनिर्देश जल्द ही समर्थन करने के लिए तक पहुंच जाएगा:

$ 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 

इस के बाद Intel® OpenMP* Runtime Library निर्माण करने के लिए के रूप में आप omp.h और /path/to/llvm/projects/openmp/runtime/lin_32e/lib/libomp.so

0

omp_set_num_thread() फ़ंक्शन का उपयोग कर थ्रेड की संख्या सेट करके देखें: यह hello.c है। यदि यह काम नहीं करता है, तो फिर से क्लैंग सेट अप करने का प्रयास करें।

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

इसके अलावा mp_get_max_threads() दोनों समानांतर और धारावाहिक क्षेत्र में कॉल करने का प्रयास है, और क्या आप

+0

दिलचस्प बात यह है कि जब मैं इसे निष्पादित करता हूं:' clang -g -emit-llvm -S -c -fopenmp hello.c -o hello.ll' मुझे यह चेतावनी मिल रही है: 'clang: चेतावनी: संकलन के दौरान तर्क अप्रयुक्त: '-fopenmp', क्या आप जानते हैं क्यों ?? – Amir

+0

यदि आप -fopenmp का उपयोग नहीं करते हैं, तो कंपाइलर ओपनएमपी के कार्यों के अपरिभाषित संदर्भ के बारे में त्रुटि फेंकता है। यदि लाइब्रेरी को डिफ़ॉल्ट रूप से –

+0

द्वारा शामिल नहीं किया जा सकता है, तो मैंने यहां प्रक्रियाएं की हैं: 'http: // openmp।llvm.org/'और पुस्तकालय स्थापित करें और पथ निर्यात किया। इससे पहले मुझे त्रुटि थी लेकिन अब और नहीं। – Amir

0

मैं केवल एक देख रहा था की जरूरत है मत भूलना थ्रेड भी, क्लैंग संस्करण 3.8.0 (ट्रंक 252425) के साथ। मैं तो https://clang-omp.github.io पर हाल ही में कुछ समाचार पढ़ें:

नवंबर 27, 2015 - बजना में OpenMP समर्थन के आगे विकास/LLVM संकलक www.llvm.org में ले जाया गया। यह साइट केवल अभिलेखीय उद्देश्यों के लिए बनाए रखा गया है। इन वर्षों के लिए सभी योगदान करने वाले सभी लोगों के लिए धन्यवाद!

... और इसलिए मैंने ट्रंक से एलएलवीएम/क्लैंग संकलित किया; उत्कृष्ट निर्देश here का उपयोग कर ओपनएमपी रनटाइम लाइब्रेरी संकलित; और अब यह काम करता है।