मैंने समानांतर पैरलस एल्गोरिथ्म और पीएसआरएस एल्गोरिथ्म दोनों के साथ काम किया है जो अनिवार्य रूप से विलय के साथ समानांतर में क्विकर को जोड़ती है।
समानांतर क्विकर एल्गोरिथम के साथ, मैंने 4 कोर (हाइपर-थ्रेडिंग के साथ दोहरे कोर) के साथ रैखिक स्पीडअप के पास प्रदर्शन किया है, जिसे एल्गोरिथ्म की सीमाएं दी गई हैं। एक शुद्ध समानांतर क्विकॉर्ट एक साझा स्टैक संसाधन पर निर्भर करता है जिसके परिणामस्वरूप थ्रेड्स के बीच विवाद होगा, इस प्रकार प्रदर्शन में किसी भी लाभ को कम किया जा सकता है। इस एल्गोरिथ्म का लाभ यह है कि यह 'इन-प्लेस' टाइप करता है, जिससे आवश्यक मेमोरी की मात्रा कम हो जाती है। आप इस पर विचार करना चाह सकते हैं जब आप 100M तत्वों को ऊपर की ओर छांटते हैं जैसा कि आपने कहा था।
मैं देख रहा हूं कि आप 8-32 कोर के साथ एक सिस्टम को सॉर्ट करना चाहते हैं। PSRS एल्गोरिथ्म साझा संसाधन पर विवाद से बचता है, जिससे अधिक संख्या में स्पीडअप की अनुमति मिलती है। मैंने ऊपर के रूप में 4 कोर के साथ एल्गोरिदम का प्रदर्शन किया है, लेकिन कोर, 32 और उससे आगे की बड़ी संख्या के साथ रैखिक स्पीडअप के पास दूसरों के प्रयोगात्मक परिणाम रिपोर्ट करते हैं। PSRS एल्गोरिदम का नुकसान यह है कि यह इन-प्लेस नहीं है और इसके लिए बहुत अधिक मेमोरी की आवश्यकता होगी।
यदि आप रुचि रखते हैं, तो आप इनमें से प्रत्येक एल्गोरिदम के लिए मेरे जावा कोड का उपयोग या उपयोग कर सकते हैं। आप इसे github: https://github.com/broadbear/sort पर पा सकते हैं । यह कोड जावा कलेक्शंस.सोर्ट () के ड्रॉप-इन प्रतिस्थापन के रूप में है। यदि आप एक जेवीएम में समानांतर सॉर्ट करने की क्षमता की तलाश कर रहे हैं जैसा कि आप ऊपर बता रहे हैं, मेरे रेपो में कोड आपको मदद कर सकता है। एपीआई पूरी तरह से तुलना करने वाले तत्वों को लागू करने या अपने स्वयं के तुलनाक को लागू करने के लिए पूरी तरह से सामान्य है।
क्या मैं पूछ सकता हूं कि आप कितने तत्वों को छांटना चाह रहे हैं? मैं अपने छँटाई पैकेज के लिए संभावित अनुप्रयोगों के बारे में जानना चाहता हूँ।