2011-04-13 6 views
9

से धीमे हैं क्यों मैं एक ज़ीऑन प्रोसेसर के साथ मैक प्रो पर एक पूरी तरह से समानांतर मैट्रिक्स गुणा प्रोग्राम चला रहा हूं। मैं 8 धागे (कोर के रूप में कई धागे) बनाते हैं, और कोई साझा लेखन मुद्दे नहीं हैं (एक ही स्थान पर कोई लेखन नहीं)। किसी कारण से, pthread_create और pthread_join का उपयोग #pragma openmp का उपयोग करने में लगभग दोगुना धीमा है।क्यों पॉज़िक्स थ्रेड ओपनएमपी

वहाँ कुछ भी में कोई अन्य मतभेद ... एक ही संकलन विकल्प, दोनों ही मामलों में धागे की एक ही नंबर, एक ही कोड (pragma/pthread भागों स्पष्ट रूप को छोड़कर), आदि

और छोरों बहुत हो रहे हैं बड़ा - मैं छोटी लूप समानांतर नहीं कर रहा हूं।

(मैं वास्तव में कोड पोस्ट कर सकते हैं नहीं है क्योंकि यह स्कूल के काम है।)

ऐसा क्यों हो रहा हो सकता है? OpenMP POSIX धागे का उपयोग नहीं करता है? यह तेज़ कैसे हो सकता है?

+0

क्या वे दोनों संचयी CPU समय की समान मात्रा का उपयोग करते हैं? – Gabe

+1

क्या आपने सत्यापित किया है कि ओपनएमपी आपके मैनुअल संस्करण के समान धागे का उपयोग कर रहा है? – Gabe

+3

क्या होता है यदि आप केवल प्रत्येक पर 7 धागे का उपयोग करते हैं? – Jess

उत्तर

6

(संपादित) आपका मुख्य धागा क्या कर रहा है? अपना कोड देखे बिना, मैं अनुमान लगा रहा था कि मुख्य धागा वास्तव में मुश्किल से चल रहा है, लेकिन अभी भी घड़ी-चक्र खत्म होने पर घड़ी-चक्र खा रहा है, फिर यह फिर से शुरू होता है और जारी रहता है। प्रत्येक बार इसके दिए गए चक्र अन्य थ्रेड को रोकने/जारी रखने के लिए ओवरहेड होते हैं।

ओपनएमपी में, मुख्य धागा शायद सो जाता है, और समांतर क्षेत्रों को समाप्त होने पर जागने की घटना की प्रतीक्षा करता है।

+1

उम ... यह बिल्कुल ठीक नहीं है जिसका मतलब है हाहा। मेरा मतलब था कि कोर की संख्या की तुलना में एक और धागा था, इसलिए वे समय प्रसंस्करण के लिए प्रतिस्पर्धा कर रहे थे। (प्रबंधन ओवरहेड यहां नगण्य है, क्योंकि यह निश्चित रूप से ओपनएमपी की तुलना में * अधिक * नहीं है।) – Mehrdad

+2

ओपनएमपी में प्रारंभिक धागा (या आपकी शब्दावली में मुख्य धागा), कार्यक्षेत्र क्षेत्रों में शेष टीम के साथ काम करता है । धागे में से कोई भी नींद नहीं करता है जब तक कि कोई और काम नहीं किया जाता है (और तब थ्रेड या तो नींद या स्पिन कार्यान्वयन के आधार पर बाधा पर प्रतीक्षा करते हैं)। – ejd