2009-10-16 22 views

उत्तर

5

एन = के लिए एक कुशल sorting network देखें जो आपके द्वारा की जाने वाली बाइट्स की संख्या (4 या 16) है। तुलना और विनिमय निर्देशों के अनुक्रम में कनवर्ट करें। (एन = 16 के लिए जो 'कुछ' से अधिक होगा, हालांकि।

+0

धन्यवाद। मैं एक एएसएम कुशल समाधान की तलाश में हूं। ओह, कृपया ध्यान दें कि मैंने "कुछ निर्देश" और "कुछ चक्र" नहीं कहा;) – alecco

+0

आह, मैं देखता हूं कि आपके द्वारा लिंक किया गया पेपर एसएसई 2 निर्देशों का उपयोग करके केवल इस दृष्टिकोण को लेता है। ठंडा। –

+0

हाँ, मैं भी वर्बोज़ नहीं बनना चाहता था, क्योंकि मैं एएसएम के साथ कुछ प्रकार के हैक जादू की उम्मीद कर रहा था। असल में मैं इस पढ़ने को "मल्टी-कोर सिमड सीपीयू आर्किटेक्चर पर सॉर्टिंग के कुशल कार्यान्वयन" (छूगानी, .. 2008) की तलाश में था, लेकिन एल्गोरिदम के लिए निर्देशों से निराश हो गया: 1) ए) इन-रजिस्टर करें लंबाई के क्रमबद्ध अनुक्रम प्राप्त करें। मुझे लगता है कि इंटेल में शोधकर्ताओं के लिए यह एक "duh" प्रक्रिया है, लेकिन मेरे लिए नहीं! (मुझे अभी भी यकीन नहीं है कि वे एक रजिस्टर को सॉर्ट करने के लिए पूरी 17-19 निर्देश प्रक्रिया करते हैं।) [नोट: क्षमा करें, कर्म की कमी के कारण आपको वोट नहीं दिया] – alecco

1

सभी सॉर्टिंग एल्गोरिदम को एक स्थान से दूसरे स्थान पर "स्वैपिंग" मानों की आवश्यकता होती है। चूंकि आप एक शाब्दिक सीपीयू रजिस्टर के बारे में बात कर रहे हैं, इसका मतलब है कि बाइट्स को स्वैप करने के लिए किसी भी प्रकार के अस्थायी स्थान के रूप में उपयोग करने के लिए किसी अन्य प्रकार की आवश्यकता होगी।

मैंने किसी रजिस्टर में बाइट्स सॉर्ट करने के लिए अंतर्निहित विधि के साथ चिप कभी नहीं देखा है। यह नहीं कह रहा कि यह नहीं किया गया है, लेकिन मैं इस तरह के निर्देश के लिए कई प्रयोगों के बारे में नहीं सोच सकता।

+0

मेरा मतलब है कि एक रजिस्टर में बाइट्स को सॉर्ट करें, निश्चित रूप से कम से कम एक अन्य रजिस्टर का उपयोग करना होगा। गलतफहमी के लिए खेद है। – alecco

+0

वास्तव में ईएक्स रजिस्टर का उपयोग करके सीएमपीएक्सएचजी का उपयोग करके इन-रजिस्टर सॉर्टिंग का एक तरीका है और इसे घुमाकर एक दोस्त के रूप में जो x86 में काफी जानकार है। इससे थोड़ा लाभ, लेकिन यह संभव है। सीएमपीएक्सएचजी भी काफी धीमी है। – alecco

+1

मेरे द्वारा उपयोग किए जाने वाले सभी सिमड आर्किटेक्चर में ऐसे निर्देश हैं। –

7

इसे मिला! यह 2007 के पेपर में है "फर्टक, अमरल और न्यूवियाडोम्स्की द्वारा सॉर्टिंग एल्गोरिदम में निर्देश-स्तर समांतरता को सक्षम करने के लिए सिम रजिस्टर्स और निर्देशों का उपयोग करना। धारा 4.

यह 4 एसएसई रजिस्टरों का उपयोग करता है, इसमें 12 कदम हैं, और लोड और स्टोर सहित 19 निर्देशों में चलता है।

उसी पेपर में गतिशील रूप से सिमड के साथ सॉर्टिंग नेटवर्क बनाने पर कुछ उत्कृष्ट काम है।

+1

पीडीएफ से लिंक: http://www.cs.ualberta.ca/~amaral/papers/furtak-spaa07.pdf – alecco

4

स्ट्रिंग्स को सॉर्ट करने की गति बढ़ाने के लिए, मैंने एसईएस 2 में 16 बाइट्स की एक सरणी को क्रमबद्ध करना और एसएसई 2 में 16 युगल की एक सरणी को क्रमबद्ध करना, बिटोनिक सॉर्ट का उपयोग करके 8 के दो रन बनाने के लिए, और दोनों को मर्ज करने के लिए बाइनरी विलय रन। आप यहां पहला भाग देख सकते हैं http://mischasan.wordpress.com/2011/07/29/okay-one-more-poke-at-sse2-sorting-doubles/ (एएसएम) और यहां http://mischasan.wordpress.com/2011/09/02/update-on-bitonic-sse2-sort-of-16-doubles/ (सी), और बिटोनिक मर्ज चरण (यदि आप एसएसई को हर तरह से जाना चाहते हैं) यहां: http://mischasan.wordpress.com/2012/11/04/sse2-odd-even-merge-the-last-step-in-sorting/। मैंने इस तरह के साथ qsort के नीचे सम्मिलन क्रम को प्रतिस्थापित किया, और यह सीधे qsort के रूप में लगभग 5 गुना तेज है। एचटीएच

मैंने यूओएफए पेपर नहीं देखा था; बिटोनिक लॉजिक पुराने स्कूल (सीटीएम) जीपीजीपीयू प्रोग्रामिंग से है।

एम्बेडेड लिंक तारों के बारे में खेद है; मुझे नहीं पता कि टिप्पणियों में क्लिक करने योग्य लिंक कैसे जोड़ें stackoverflow।

संबंधित मुद्दे