अगर हमारे पास GPGPU है तो SIMD का उपयोग क्यों करें?


13

मुझे लगा कि स्टैक एक्सचेंज के सीएस हिस्से में यह सवाल बेहतर है। अब जब हमारे पास CUDA और OpenCL जैसी भाषाओं के साथ GPGPU हैं, तो क्या मल्टीमीडिया SIMD एक्सटेंशन (SSE / AVX / NEON) अभी भी एक उद्देश्य पूरा करते हैं?

मैंने हाल ही में एक लेख पढ़ा कि कैसे एसएसई निर्देशों का उपयोग छँटाई नेटवर्क में तेजी लाने के लिए किया जा सकता है। मुझे लगा कि यह काफी साफ-सुथरा है, लेकिन जब मैंने अपने COMP आर्च प्रोफेसर को बताया तो वह हंस पड़ा और कहा कि GPU पर समान कोड चलाने से SIMD संस्करण नष्ट हो जाएगा। मुझे इस पर संदेह नहीं है क्योंकि एसएसई बहुत सरल है और जीपीयू बहुत अधिक समानता के साथ बड़े उच्च-जटिल त्वरक हैं, लेकिन यह मुझे सोच रहा है, क्या कई परिदृश्य हैं जहां मल्टीमीडिया सिमडी एक्सटेंशन एक GPU का उपयोग करने की तुलना में अधिक उपयोगी हैं?

अगर GPGPUs SIMD को बेमानी बनाते हैं, तो Intel उनके SIMD समर्थन को क्यों बढ़ाएगा? SSE 128 बिट्स था, अब यह AVX के साथ 256 बिट्स है और अगले साल यह 512 बिट्स होगा। यदि GPGPU डेटा समानता के साथ बेहतर प्रोसेसिंग कोड हैं तो इंटेल इन SIMD एक्सटेंशन को क्यों आगे बढ़ा रहा है? वे बराबर संसाधनों (अनुसंधान और क्षेत्र) को एक बड़े कैश और शाखा भविष्यवक्ता में डालने में सक्षम हो सकते हैं ताकि इस प्रकार धारावाहिक प्रदर्शन में सुधार हो सके।

GPGPUs के बजाय SIMD का उपयोग क्यों करें?


2
GPU को व्यस्त रखने के लिए पर्याप्त डेटा के साथ खिलाना अपने आप में एक चुनौती है। मेजबान और डिवाइस के बीच डेटा स्थानांतरण व्यावहारिक रूप से हमेशा अड़चन है। सीपीयू पर कुछ संचालन बेहतर तरीके से समर्थित हैं (जैसे कैरी-फ्री गुणा; देखें PCLMULQDQ)।
जुहो २०'१४

2
@ जूहो क्या एएमडी के एपीयू जैसे नए उपकरणों में एक ही मरने पर जीपीयू और सीपीयू नहीं है? क्या इससे अड़चन खत्म होती है?
जोंफ्रेजेन

1
जब सभी कहा और किया जाता है, तो एक वेक्टर निर्देश अभी भी एक ही निर्देश है, और इसे किसी भी एकल निर्देश के रूप में शेड्यूल करने और निष्पादित करने की लागत समान है। यह केवल लाभ पर काम चलाने के लिए समझ में आता है जब लाभ लागत से आगे निकल जाता है। यह भी विचार करें कि आपको प्रति कोर एक SIMD इकाई मिलती है, लेकिन आम तौर पर प्रति चेसिस केवल एक GPU है, और GPU वर्तमान में एक साझा संसाधन है। यह उन नौकरियों की संख्या को सीमित करता है जिन्हें आप GPU पर चला सकते हैं। (कोर की संख्या हर समय बढ़ रही है, लेकिन GPU की संख्या नहीं है।)
छद्मनाम

जीपीयू के संदर्भ में इंटेल बहुत कुछ नहीं करता है (लार्बी / नाइट्स लैंडिंग :) के अलावा), इसलिए मुझे लगता है कि एवीएक्स के बजाय धक्का देने की कोशिश करना उनके लिए स्वाभाविक है। हालांकि भारी एवीएक्स का उपयोग बहुत अच्छा हो सकता है, अब यह उनके नए सीपीयू पर डाउनक्लॉकिंग का परिणाम है, इसलिए वे किसी चीज के लिए सीमा मार सकते हैं।
nsandersen

जवाबों:


16

कुछ भी मुफ़्त नहीं है। GPGPUs हैं SIMD। GPGPUs पर SIMD निर्देश CPU पर SIMD निर्देशों की तुलना में व्यापक होते हैं। GPGPUs ठीक-ठाक बहु-थ्रेडेड होते हैं (और सीपीयू की तुलना में कई अधिक हार्डवेयर संदर्भ हैं)। GPGPU स्ट्रीमिंग के लिए अनुकूलित हैं । वे फ्लोटिंग पॉइंट यूनिट्स के लिए अधिक से अधिक प्रतिशत क्षेत्र को समर्पित करते हैं, क्षेत्र के कम प्रतिशत को कैश करने के लिए, और प्रदर्शन को पूर्ण करने के लिए क्षेत्र का कम प्रतिशत।

एक तुलना करते हैं। इंटेल के कोर i7-5960x में 8 कोर हैं, जिनमें से प्रत्येक में 4-वाइड (डबल सटीक) SIMD है, जो 3 GHz (3.5GHz टर्बो), 20M L3 कैश पर चलता है, 356mm ^ 2 और 140W की खपत करता है और इसकी लागत $ 1000 है। इसलिए 8 * 4 * 3 * 4 = 384 डबल सटीक GFlops। (अतिरिक्त 4x है क्योंकि आप दो फ्यूड-गुणा-जोड़कर प्रति वेक्टर वेक्टर प्रति चक्र कर सकते हैं।) यह 768 एकल परिशुद्धता GFlops कर सकता है। यह 1.08 DP GFlops / mm ^ 2 और 2.75 DP GFlops / वाट के बारे में है। लगभग 57.5 KB / mm ^ 2 ऑन-चिप कैश भी है।

NVidia के GeForce GTX टाइटन ब्लैक में 15 SMXs हैं, जिनमें से प्रत्येक में 32-वाइड डबल सटीक SIMD है, जो 890MHz (980MHz टर्बो) पर चल रहा है, L1 + L2 कैश का 3.5M, 561mm का उपभोग करता है: 2, 250W और लागत $ 1000 है। तो 15 * 32 * .89 * 4 = 1709 डबल सटीक GFlops। (समान 4x दो फ्यूज्ड-गुणा-प्रति-वेक्टर-लेन प्रति चक्र में जोड़ता है।) यह 5126 एकल परिशुद्धता GFlops कर सकता है। यह लगभग 3.05 DP GFlops / mm ^ 2 और 6.8 DP GFlops / वाट है। तो 3x प्रति इकाई क्षेत्र में डीपी फ्लोटिंग पॉइंट घनत्व और 3x डीपी फ्लोटिंग पॉइंट पावर दक्षता। और ट्रेडऑफ़? 6.4 केबी / मिमी ^ ऑन-चिप कैश के 2। सीपीयू की तुलना में लगभग 9x कम घना।

तो मुख्य अंतर यह है कि GPU ने एक क्षेत्र संतुलन चुना है जो कैश पर अधिक फ्लोटिंग पॉइंट (और विशेष रूप से एकल-सटीक फ़्लोटिंग पॉइंट) का दृढ़ता से पक्षधर है। यहां तक ​​कि इस तथ्य की अनदेखी करते हुए कि आपको I / O करने के लिए CPU और GPU के बीच के सामान की प्रतिलिपि बनाने की आवश्यकता है, CPU की तुलना में GPU कितनी अच्छी तरह से करने जा रहा है, यह आपके द्वारा चलाए जा रहे प्रोग्राम पर निर्भर करता है।

यदि आपके पास बहुत कम नियंत्रण विचलन के साथ एक डेटा समानांतर फ्लोटिंग पॉइंट प्रोग्राम है (सभी वेक्टर लेन एक ही समय में एक ही काम कर रहे हैं) और आपका प्रोग्राम स्ट्रीमिंग (कैशिंग से लाभ नहीं कर सकता है), तो GPU के बारे में होने जा रहा है प्रति इकाई क्षेत्र या वाट प्रति 3x अधिक कुशल। लेकिन अगर आपके पास कोई महत्वपूर्ण मात्रा में विचलन नियंत्रण, गैर-डेटा-समानांतर कार्य करने के लिए, या बड़े रीड-टाइम डेटा संरचनाओं से लाभ हो सकता है, तो सीपीयू शायद बेहतर करेगा।

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