किस समानांतर छंटनी एल्गोरिथ्म में सबसे अच्छा औसत प्रदर्शन होता है?


134

क्रमिक मामले में सॉर्टिंग ओ (एन लॉग एन) लेता है। अगर हमारे पास O (n) प्रोसेसर है तो हम एक रैखिक स्पीडअप की उम्मीद करेंगे। ओ (लॉग एन) समानांतर एल्गोरिदम मौजूद हैं, लेकिन उनके पास बहुत अधिक निरंतर है। वे कमोडिटी हार्डवेयर पर भी लागू नहीं होते हैं जो O (n) प्रोसेसर के पास कहीं भी नहीं है। पी प्रोसेसर के साथ, उचित एल्गोरिदम को ओ (एन / पी लॉग एन) समय लेना चाहिए।

सीरियल के मामले में, त्वरित सॉर्ट में औसतन सबसे अच्छा रनटाइम जटिलता है। एक समानांतर त्वरित सॉर्ट एल्गोरिथ्म को लागू करना आसान है ( यहां और यहां देखें )। हालाँकि यह बहुत अच्छा प्रदर्शन नहीं करता है क्योंकि पहले चरण में एक ही कोर पर पूरे संग्रह को विभाजित करना है। मुझे कई समानांतर सॉर्ट एल्गोरिदम की जानकारी मिली है, लेकिन अभी तक मैंने स्पष्ट विजेता की ओर कुछ भी नहीं देखा है।

मैं 8 से 32 कोर पर चलने वाली JVM भाषा में 1 मिलियन से 100 मिलियन तत्वों की सूचियों को क्रमबद्ध करना चाहता हूँ।


@ वास्तव में कुछ भी। वे मेरे डोमेन ऑब्जेक्ट होंगे जो सभी अलग-अलग हैं, लेकिन सभी तुलना योग्य हैं।
क्रेग पी। मोटलिन

1
मुझे लगता है कि आपके पास अपने "ले जाना चाहिए" में एक बहुत अधिक n / p है
Sparr

@ शेपर मुझे ऐसा नहीं लगता। मैं कुछ प्रोसेसर होने और तत्वों के रूप में कई प्रोसेसर होने के बीच एक अंतर कर रहा हूं।
क्रेग पी। मोटलिन

@ CraigP.Motlin सही है, लेकिन आपको गलत तरीके से "वितरित" / p लगता है। केवल एक / पी होना चाहिए।
१।

@ सपर आह, यह बदल दिया, धन्यवाद।
क्रेग पी। मोटलिन

जवाबों:


206

निम्नलिखित लेख (पीडीएफ डाउनलोड) विभिन्न आर्किटेक्चर पर समानांतर सॉर्टिंग एल्गोरिदम का एक तुलनात्मक अध्ययन है:

विभिन्न आर्किटेक्चर पर समानांतर सॉर्टिंग एल्गोरिदम

लेख के अनुसार, नमूना प्रकार कई समानांतर वास्तुकला प्रकारों पर सबसे अच्छा लगता है।

मार्क की उम्र की चिंता का समाधान करने के लिए अपडेट करें:

यहां कुछ और उपन्यास (2007 से, जो, btw, अभी भी नमूना प्रकार के साथ तुलना में मिलते हैं) को प्रस्तुत करने वाले अधिक लेख हैं:

नमूना प्रकार एए-सॉर्ट पर सुधार

रक्तस्रावी धार (लगभग 2010, कुछ केवल कुछ महीने पुरानी):

समानांतर छँटाई पैटर्न
कई-कोर GPU आधारित समानांतर छँटाई
हाइब्रिड CPU / GPU
समांतर छँटाई एक प्रयोगात्मक अध्ययन के साथ समानांतर समानांतर छँटाई एल्गोरिथ्म प्राकृतिक आदेश का उपयोग करते हुए
छँटाई समानांतर छँटाई
एन-तत्वों: एक नया अनुकूलन छँटाई दृष्टिकोण

2013 के लिए अपडेट: यहां ब्लीडिंग एज सर्का जनवरी, 2013 है। (नोट: कुछ लिंक सिटेसर के पेपर के लिए हैं और इसके लिए पंजीकरण आवश्यक है जो मुफ़्त है):

विश्वविद्यालय व्याख्यान:
चयन और छंटाई के लिए समानांतर विभाजन
समानांतर छंटाई एल्गोरिदम व्याख्यान
समानांतर छंटाई एल्गोरिदम व्याख्यान 2
समानांतर छंटाई एल्गोरिदम व्याख्यान 3

अन्य स्रोतों और कागजात:
अनुकूली bitonic प्रकार के आधार पर कई-कोर आर्किटेक्चर के लिए एक उपन्यास छँटाई एल्गोरिथ्म
उच्च स्केलेबल समानांतर छंटाई 2
समानांतर विलय
समानांतर
वस्तुओं के
प्रदर्शन के लिए 2 समानांतर स्व-छंटनी प्रणाली का विलय अनुक्रमिक त्वरित क्रमबद्ध और समानांतर त्वरित क्रमबद्ध एल्गोरिदम
साझा मेमोरी, संदेश पासिंग, और स्टैंडअलोन के लिए हाइब्रिड मर्ज शॉर्ट्स और
समानांतर समानांतर एल्गोरिदम (सॉर्टिंग एट अल) कार्यान्वयन सहित।

GPU और CPU / GPU संकर स्रोतों और कागजात:
एक OpenCL GPU वास्तुकला के लिए समानांतर छंटाई एल्गोरिदम की विधि
डाटा छंटाई ग्राफिक्स प्रोसेसिंग यूनिट का उपयोग
GPUs पर छंटाई के लिए कुशल एल्गोरिदम
manycore GPUs के लिए डिजाइनिंग कुशल सॉर्टिंग एल्गोरिदम
नियतात्मक नमूना GPUs के लिए क्रमबद्ध
फास्ट यथा-स्थान के साथ छँटाई बिटकॉइन सॉर्ट पर आधारित CUDA
हाइब्रिड एल्गोरिथ्म का उपयोग करते हुए तेजी से समानांतर GPU- छँटाई,
GPUs पर समानांतर समानांतर सॉर्टिंग एल्गोरिदम
CPUs और GPU पर फास्ट सॉर्ट करें: बैंडविड्थ के लिए एक मामला बैंडविड्थ सिमड सॉर्ट
GPU नमूना सॉर्ट
GPU-ABiSort: स्ट्रीम आर्किटेक्चर GPUTeraSort पर इष्टतम समानांतर सॉर्टिंग
: उच्च प्रदर्शन ग्राफिक्स बड़े प्रोसेसर प्रबंधन के लिए सह-प्रोसेसर छँटाई
कई-कोर जीपीयू पर उच्च प्रदर्शन तुलना-आधारित सॉर्टिंग एल्गोरिथ्म
लोड संतुलन और कम स्थानांतरण ओवरहेड के साथ CUDA- सक्षम GPU के लिए समानांतर बाहरी सॉर्टिंग
बड़े पैमाने पर डेटासेट के लिए GPU पर छंटनी: एक पूरी तरह से तुलना


2
यह 1996 में विभिन्न आर्किटेक्चर पर समानांतर सॉर्टिंग एल्गोरिदम का एक तुलनात्मक अध्ययन है। तब से समानांतर कंप्यूटिंग में बहुत कुछ बदल गया है।
उच्च प्रदर्शन मार्क

1
ऐसा लगता है कि आपको याद है कि IMHO क्या सबसे अच्छा है, मल्टी-कोर SIMD वास्तुकला में छंटनी का कुशल कार्यान्वयन। इंटेल शोध से, वीएलडीबी 2008 में प्रस्तुत किया गया।
एलेको

1
यह एक बड़ा जवाब होता, एक बार। अब, अधिकांश लिंक टूट गए हैं।
टिम लॉन्ग

6

मैंने समानांतर पैरलस एल्गोरिथ्म और पीएसआरएस एल्गोरिथ्म दोनों के साथ काम किया है जो अनिवार्य रूप से विलय के साथ समानांतर में क्विकर को जोड़ती है।

समानांतर क्विकर एल्गोरिथम के साथ, मैंने 4 कोर (हाइपर-थ्रेडिंग के साथ दोहरे कोर) के साथ रैखिक स्पीडअप के पास प्रदर्शन किया है, जिसे एल्गोरिथ्म की सीमाएं दी गई हैं। एक शुद्ध समानांतर क्विकॉर्ट एक साझा स्टैक संसाधन पर निर्भर करता है जिसके परिणामस्वरूप थ्रेड्स के बीच विवाद होगा, इस प्रकार प्रदर्शन में किसी भी लाभ को कम किया जा सकता है। इस एल्गोरिथ्म का लाभ यह है कि यह 'इन-प्लेस' टाइप करता है, जिससे आवश्यक मेमोरी की मात्रा कम हो जाती है। आप इस पर विचार करना चाह सकते हैं जब आप 100M तत्वों को ऊपर की ओर छांटते हैं जैसा कि आपने कहा था।

मैं देख रहा हूं कि आप 8-32 कोर के साथ एक सिस्टम को सॉर्ट करना चाहते हैं। PSRS एल्गोरिथ्म साझा संसाधन पर विवाद से बचता है, जिससे अधिक संख्या में स्पीडअप की अनुमति मिलती है। मैंने ऊपर के रूप में 4 कोर के साथ एल्गोरिदम का प्रदर्शन किया है, लेकिन कोर, 32 और उससे आगे की बड़ी संख्या के साथ रैखिक स्पीडअप के पास दूसरों के प्रयोगात्मक परिणाम रिपोर्ट करते हैं। PSRS एल्गोरिदम का नुकसान यह है कि यह इन-प्लेस नहीं है और इसके लिए बहुत अधिक मेमोरी की आवश्यकता होगी।

यदि आप रुचि रखते हैं, तो आप इनमें से प्रत्येक एल्गोरिदम के लिए मेरे जावा कोड का उपयोग या उपयोग कर सकते हैं। आप इसे github: https://github.com/broadbear/sort पर पा सकते हैं । यह कोड जावा कलेक्शंस.सोर्ट () के ड्रॉप-इन प्रतिस्थापन के रूप में है। यदि आप एक जेवीएम में समानांतर सॉर्ट करने की क्षमता की तलाश कर रहे हैं जैसा कि आप ऊपर बता रहे हैं, मेरे रेपो में कोड आपको मदद कर सकता है। एपीआई पूरी तरह से तुलना करने वाले तत्वों को लागू करने या अपने स्वयं के तुलनाक को लागू करने के लिए पूरी तरह से सामान्य है।

क्या मैं पूछ सकता हूं कि आप कितने तत्वों को छांटना चाह रहे हैं? मैं अपने छँटाई पैकेज के लिए संभावित अनुप्रयोगों के बारे में जानना चाहता हूँ।


मुझे 8 कोर प्रोसेसर मिला है। :) अब मैंने 40M तत्वों के ऊपर की ओर छँटाई का परीक्षण किया है। मैं लीनियर स्पीडअप नहीं देख रहा हूं, लेकिन मैं मानक जावा 8 कलेक्शंस सॉर्ट एल्गोरिथ्म पर पर्याप्त प्रदर्शन हासिल कर रहा हूं, जो कि माना जाता है कि यह एक बहु-थ्रेड टिम् सॉर्ट है। मेरा PSRS कार्यान्वयन ४ ९ ,५ एमएस के औसत में ४० एम तत्वों की तुलना में है, जो कि डिफ़ॉल्ट जेडीके सॉर्ट एल्गोरिथ्म के लिए १ ९ for५ एमएस की तुलना में है।
ब्रॉडबेयर

4

इस पेपर पर एक नज़र डालें: एक स्केलेबल समानांतर छँटाई एल्गोरिथ्म सटीक विभाजन का उपयोग करना । यह 32 से अधिक कोर के साथ संबंध है। हालांकि, यह एक एल्गोरिथ्म का विस्तार से वर्णन करता है, जिसमें ओ (एन / पी * लॉग (एन) + पी * लॉग (एन) ** 2) की एक रनिंग टाइम जटिलता है और यह मनमानी तुलना के लिए लागू है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.