अन्य उत्तरों में वर्णित बिंदुओं के अलावा (यह साबित करने के लिए कठिन है कि संचालन स्वतंत्र हैं, और प्रोग्रामर क्रमिक रूप से सोचते हैं), एक तीसरा कारक है जिस पर विचार करने की आवश्यकता है: समानांतरकरण की लागत ।
सच्चाई यह है कि, थ्रेड समानता के साथ बहुत महत्वपूर्ण लागत जुड़ी हुई है:
धागा निर्माण बहुत महंगा है: कर्नेल के लिए, एक प्रक्रिया शुरू करने के लिए एक धागा शुरू करना उसी के बारे में है। मैं सटीक लागतों के बारे में निश्चित नहीं हूं, लेकिन मेरा मानना है कि यह दस माइक्रोसेकंड के क्रम में है।
म्यूटेक्स के माध्यम से थ्रेड संचार महंगा है: आमतौर पर, इसके लिए प्रत्येक तरफ एक सिस्टम कॉल की आवश्यकता होती है, संभवतः सोने के लिए एक धागा डालकर उसे फिर से जगाया जाता है, जो विलंबता के साथ-साथ ठंड कैश और फ्लश किए गए टीएलबी भी पैदा करता है। औसतन, म्यूटेक्स को लेने और जारी करने में लगभग एक माइक्रोसेकंड खर्च होता है।
अब तक सब ठीक है। यह अंतर्निहित समानता के लिए एक समस्या क्यों है? क्योंकि छोटे पैमाने पर साबित होने के लिए निहित समानता सबसे आसान है। यह साबित करना एक बात है कि एक साधारण लूप के दो पुनरावृत्तियों एक दूसरे से स्वतंत्र होते हैं, यह साबित करने के लिए एक पूरी तरह से अलग बात है कि stdout
किसी डेटाबेस को एक क्वेरी भेजने और भेजने के लिए एक दूसरे से स्वतंत्र हैं और समानांतर में निष्पादित किया जा सकता है ( डेटाबेस प्रक्रिया पाइप के दूसरी तरफ हो सकती है!)।
यही है, एक कंप्यूटर प्रोग्राम जो साबित कर सकता है वह निहित समानता संभव नहीं है क्योंकि समानांतर की लागत समानांतर प्रसंस्करण के लाभ से अधिक है। दूसरी ओर, बड़े पैमाने पर समानता जो वास्तव में किसी अनुप्रयोग को गति दे सकती है वह संकलक के लिए सिद्ध नहीं होती है। एक माइक्रोसेकंड के भीतर एक सीपीयू कितना काम कर सकता है, इसके बारे में सोचें। अब, यदि समानांतर को धारावाहिक कार्यक्रम की तुलना में तेज माना जाता है, तो समानांतर कार्यक्रम को दो म्यूटेक्स कॉल के बीच कई माइक्रोसेकंड के लिए सभी सीपीयू को व्यस्त रखने में सक्षम होना चाहिए। इसके लिए वास्तव में दानेदार समानता की आवश्यकता होती है, जो स्वचालित रूप से साबित करना लगभग असंभव है।
अंत में, अपवाद के बिना कोई नियम नहीं: निहित समानता के शोषण का काम करता है जहां कोई थ्रेड शामिल नहीं है, जो कि कोड के वेक्टरकरण के साथ मामला है (AVX, Altivec, आदि जैसे SIMD अनुदेश सेट का उपयोग करके)। यह वास्तव में छोटे पैमाने पर समानता के लिए सबसे अच्छा काम करता है जो अपेक्षाकृत आसान साबित होता है।