लघु संस्करण शीर्षक में है।समांतरता: जावा थ्रेड्स को सिंक्रनाइज़ेशन और I/O के अलावा अन्य ब्लॉक करने का क्या कारण बनता है?
लंबा संस्करण: मैं जावा का उपयोग कर वैज्ञानिक अनुकूलन के लिए एक कार्यक्रम पर काम कर रहा हूं। कार्यक्रम के वर्कलोड को समानांतर और धारावाहिक चरणों में विभाजित किया जा सकता है - समांतर चरणों का अर्थ है कि अत्यधिक समानांतर कार्य किया जा रहा है। प्रोग्राम को तेज़ करने के लिए (यह घंटों/दिनों तक चलता है) मैं जिस मशीन का उपयोग कर रहा हूं उस पर सीपीयू कोर की संख्या के बराबर कई धागे बनाते हैं - आम तौर पर 4 या 8 - और उनके बीच काम को विभाजित करें। मैं फिर इन धागे को शुरू करता हूं और एक धारावाहिक चरण में आगे बढ़ने से पहले उन्हें() में शामिल करता हूं।
अभी तक इतना अच्छा है। मुझे परेशान करने वाला यह है कि समानांतर चरणों का सीपीयू उपयोग और गति "सैद्धांतिक अधिकतम" के निकट कहीं नहीं है - उदा। अगर मेरे पास 4 कोर हैं, तो मुझे 350-400% "उपयोग" (शीर्ष पर रिपोर्ट के रूप में) के बीच कहीं और देखने की उम्मीद है, लेकिन इसके बजाय यह लगभग 180 और लगभग 310 के बीच उछालती है। केवल एक ही थ्रेड का उपयोग करके, मुझे 100% CPU उपयोग मिलता है।/हे तुल्यकालन
नहीं, मैं के कारण -blocking मैं के कारण -blocking/हे जो भी मेरी समानांतर धागे में चल रहा है:
केवल कारणों मैं धागे पूरी रफ्तार से चलाने के लिए नहीं करने के लिए के बारे में पता कर रहे हैं , न ही कोई सिंक्रनाइज़ेशन - धागे द्वारा साझा की गई एकमात्र डेटा संरचना केवल पढ़ने के लिए होती है, और या तो मूल प्रकार या (गैर-समवर्ती) संग्रह होते हैं। तो मैं अन्य स्पष्टीकरण की तलाश में हूं। एक संभावना यह होगी कि कई धागे कचरे के संग्रह के लिए बार-बार अवरुद्ध हो रहे हैं, लेकिन यह केवल स्मृति दबाव के साथ एक स्थिति में समझ में आता है, और मैं आवश्यक अधिकतम ढेर अंतरिक्ष से ऊपर आवंटित कर रहा हूं।
किसी भी सुझाव की सराहना की जाएगी।
अपडेट: कुछ और जांच के बाद, मैंने सामान्य प्रदर्शन के लिए कोड tweaked और बेहतर उपयोग देख रहा है, भले ही मैंने कुछ भी नहीं बदला है सिंक्रनाइज़ेशन के साथ करना है। हालांकि, कुछ बदलावों के परिणामस्वरूप कम नए हीप आवंटन में विशेष रूप से इटरेटर्स और अस्थायी बॉक्स किए गए नंबर (उच्च प्रदर्शन जावा कंप्यूटिंग के लिए सीईआरएन "कोल्ट" लाइब्रेरी यहां उपयोगी था: बुनियादी प्रकारों के लिए IntArrayList, DoubleArrayList आदि जैसे संग्रह प्रदान करता है।)। तो मुझे लगता है कि कचरा संग्रह शायद अपराधी था।
जो, क्योंकि मैं उत्सुक हूं, आप जो कह रहे हैं वह है कि आप बेहतर CPU उपयोग को देखते हुए।संख्याएं क्या हैं? – Dan