2012-05-07 16 views
8

मैं समानांतर मोड में LIBSVM चलाने की कोशिश कर रहा हूं, हालांकि मेरा प्रश्न सामान्य रूप से ओपनएमपी में है। LIBSVM FAQ के अनुसार, मैंने ओपनएमपी का उपयोग करने के लिए #pragma कॉल के साथ कोड को संशोधित किया है। मैं भी तो यह हो जाता है एक -fopenmp तर्क जोड़कर Makefile (के लिए संयुक्त राष्ट्र * x) संशोधित:कैसे बताएं कि ओपनएमपी काम कर रहा है या नहीं?

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp 

कोड अच्छी तरह से संकलित करता है। मैं जाँच (यह मेरे पीसी नहीं है के बाद से) OpenMP द्वारा स्थापित किया गया है या नहीं:

/sbin/ldconfig -p | grep gomp 

और देखते हैं कि यह -probably- स्थापित किया गया है:

libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1 
libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1 

अब; जब मैं प्रोग्राम चलाता हूं, मुझे कोई गति सुधार नहीं दिखता है। साथ ही जब मैं "शीर्ष" के साथ जांच करता हूं, तो प्रक्रिया अधिकांश% 100 सीपीयू (8 कोर हैं) पर उपयोग कर रही है, सीपीयू बाधा नहीं है (केवल 100 और सीपीयू उपयोग के साथ एक और उपयोगकर्ता), मैं अपेक्षा से अधिक देखने की उम्मीद कर रहा था % 100 (या एक अलग संकेतक) कि प्रक्रिया एकाधिक कोर का उपयोग कर रहा है।

क्या यह जांचने का कोई तरीका है कि यह एकाधिक कोर काम कर रहा है?

+0

बस एक विचार है, लेकिन यह अधिकतम नहीं होना चाहिए। 100%/कोर की संख्या जब केवल एक धागा चल रहा है? – Tibor

+1

नहीं, जब मल्टीकोरर्स नियोजित होते हैं (कम से कम मेरे सर्वर की स्थापना में) हम 100% –

+1

@ टिबोर से बहुत अधिक मूल्य देखते हैं, आईरिक्स मोड में शीर्ष डिफ़ॉल्ट जो एक एकल CPU के पूर्ण लोड और एन * 100% के लिए 100% दिखाता है एन सीपीयू का पूरा भार। यदि आप आईरिक्स मोड को टॉगल करते हैं ('I' दबाएं) यह 100% दिखाता है जब सभी CPUs का उपयोग किया जाता है। –

उत्तर

7

आप फ़ंक्शन omp_get_num_threads() का उपयोग कर सकते हैं। यह आपको आपके कार्यक्रम द्वारा उपयोग किए जाने वाले धागे की संख्या वापस कर देगा।

+6

किसी को समानांतर क्षेत्र के अंदर 'omp_get_num_threads()' को कॉल करना होगा। अन्यथा यह हमेशा 1 देता है! –

1

omp_get_max_threads() के साथ आपको अपने कार्यक्रम में अधिकतम थ्रेड उपलब्ध हैं। यह omp_get_num_threads() के सभी संभावित वापसी मानों में से अधिकतम भी है। आप पर्यावरण प्रोग्राम OMP_NUM_THREADS के साथ अपने प्रोग्राम द्वारा उपयोग किए जाने वाले धागे की संख्या को स्पष्ट रूप से सेट कर सकते हैं, उदा।

$export OMP_NUM_THREADS=8; your_program 
संबंधित मुद्दे