2011-11-16 22 views
7

हम जेनेरिक x86 हार्डवेयर पर चलाने के लिए समर्पित डिजिटल सिग्नल प्रोसेसिंग चिप से किसी एप्लिकेशन को पोर्ट करने पर विचार कर रहे हैं। आवेदन बहुत सारे फूरियर ट्रांसफॉर्म करता है, और संक्षिप्त शोध से, ऐसा लगता है कि एफएफटी एक सीपीयू की बजाय जीपीयू पर गणना के लिए काफी उपयुक्त हैं। ,क्या यह एम्बेडेड जीपीयू में एफएफटी गणना को ऑफलोड करने लायक है?

http://www.cv.nrao.edu/~pdemores/gpu/

हालांकि हमारे उत्पाद, आकार की कमी में: उदाहरण के लिए, इस पेज कि गणना के समय में एक 10 गुना कमी दिखाने जब GPU का उपयोग कर एक कोर 2 Quad और एक GF 8800 GTX के साथ कुछ मानक है हमें पीसी 104 या मिनी-आईटीएक्स जैसे छोटे फॉर्म कारकों तक सीमित करें, और इस प्रकार एम्बेडेड जीपीयू सीमित करें।

GPU को कुछ लोडिंग गणना है जो उचित पीसीआई बस पर मांसपेशियों के ग्राफिक्स कार्ड के साथ केवल मूल्यवान है, या यहां तक ​​कि एम्बेडेड जीपीयू प्रदर्शन सुधार प्रदान करते हैं?

+0

मुझे नहीं लगता कि ये बोर्ड अब इतने सीमित हैं; नहीं [अगर वे एक सैंडब्रिज i7 की विशेषता रखते हैं, उदाहरण के लिए] (http://www.silentpcreview.com/zotac-h67itx) – sehe

+0

@ मुझे पता है कि मिनी-आईटीएक्स (और यहां तक ​​कि पीसी 104) समर्थन में ऐसे मॉडल हैं जो हालिया सीपीयू का समर्थन करते हैं , मेरा सवाल यह है कि उनके ऑनबोर्ड * जी * पीयू के साथ परेशान करने लायक हैं या नहीं। मिनी-आईटीएक्स अक्सर पीसीआई सॉकेट प्रदान करता है, लेकिन हमारे उत्पाद का आकार प्रोसेसिंग मॉड्यूल को लगभग मिनी-आईटीएक्स आकार के एक बोर्ड में प्रतिबंधित करता है और हमें मदरबोर्ड से चिपकने वाला अतिरिक्त ग्राफिक्स कार्ड जोड़ने की अनुमति नहीं देता है। –

+0

आपके एफएफटी कितने बड़े हैं? क्या आपका एल्गोरिदम आपको "बैच मोड" में करने की अनुमति देता है जहां आप एक ही समय में उनमें से बहुत से (सभी समान आकार) की गणना करते हैं? –

उत्तर

2

8800 के करीब 100 कोर के क्रम में लगभग आधा गीगाहर्ट्ज चल रहा है। मुझे नहीं लगता कि छोटे फॉर्म कारकों के लिए मौजूदा एम्बेडेड जीपीयू में से कोई भी शेडर/कंप्यूट कोर के पास कहीं भी है।

5

आपको जीपीयू मेमोरी से जीपीयू मेमोरी से किसी भी गति लाभ के विरुद्ध और आगे बढ़ने की लागत की तुलना करने की आवश्यकता है। यद्यपि I/O और गणना को कुछ हद तक ओवरलैप करना संभव है, फिर भी यदि आप I/O बैंडविड्थ आवश्यकताएं कम्प्यूटेशनल बैंडविड्थ से अधिक हैं तो भी आप भुगत सकते हैं। यदि आपके पास कोई अतिरिक्त गणना है जो एफपीटी डेटा पर किया जा सकता है, जबकि यह GPU मेमोरी में निवासी है तो यह I/O लागत को कम करने में मदद कर सकता है।

यह भी ध्यान रखना महत्वपूर्ण है कि जीपीयू आधारित एफएफटी आमतौर पर केवल एक परिशुद्धता डेटा के लिए अच्छा प्रदर्शन देते हैं। इसके अलावा आपको सबसे अच्छे संभव सीपीयू-आधारित एफएफटी के खिलाफ तुलना करने की आवश्यकता है, उदाहरण के लिए एफएफटीडब्ल्यू एक परिशुद्धता के लिए बनाया गया है और एसएसई का उपयोग कर रहा है।

1

एक समस्या को तकनीकी जानकारी प्राप्त हो रही है जो आपको GPU पर कोड लोड करने और निष्पादित करने और सीपीयू के साथ डेटा संचार करने और बदलने की आवश्यकता हो सकती है। Nvidia विशेष रूप से इस उद्देश्य के लिए CUDA नामक एपीआई प्रदान करता है। तो एक एनवीडिया जीपीयू के साथ एक बोर्ड चुनें जो सीयूडीए का समर्थन करता है और आप शायद बहुत कम लागत पर प्रयोग और बेंचमार्क कर सकते हैं, और यहां तक ​​कि एक नियमित डेस्कटॉप पीसी पर प्रोटोटाइप भी कर सकते हैं।

छोटे फॉर्म-फैक्टर हार्डवेयर के संबंध में, this discussion प्रासंगिक हो सकता है।

6

x86 हार्डवेयर और जीपीयू (सीयूडीए, 7800 GTX Hardware से पहले) दोनों एफएफटी दिनचर्या विकसित करने के बाद मुझे अपने स्वयं के परिणामों से पता चला कि छोटे आकार के एफएफटी (2^13 से नीचे) के साथ सीपीयू तेज था। इन आकारों के ऊपर जीपीयू तेज था। उदाहरण के लिए, 2^16 आकार के एफएफटी ने सीपीयू पर समकक्ष परिवर्तन की तुलना में जीपीयू पर 2-4x अधिक तेजी से गणना की। नीचे दिए गए समय की एक तालिका देखें (3 जीजेज़ पेंटियम 4 बनाम 7800 जीटीएक्स की तुलना में सभी समय सेकंड में हैं। यह काम 2005 में पुराने हार्डवेयर में किया गया था और जैसा कि मैंने कहा था, गैर सीयूडीए। नए पुस्तकालय बड़े सुधार दिखा सकते हैं)

 
N  FFTw (s) GPUFFT (s) GPUFFT MFLOPS GPUFFT Speedup 
8  0   0.00006  3.352705  0.006881 
16  0.000001 0.000065 7.882117  0.010217 
32  0.000001 0.000075 17.10887  0.014695 
64  0.000002 0.000085 36.080118  0.026744 
128  0.000004 0.000093 76.724324  0.040122 
256  0.000007 0.000107 153.739856  0.066754 
512  0.000015 0.000115 320.200892  0.134614 
1024 0.000034 0.000125 657.735381  0.270512 
2048 0.000076 0.000156 1155.151507  0.484331 
4096 0.000173 0.000215 1834.212989  0.804558 
8192 0.000483 0.00032  2664.042421  1.510011 
16384 0.001363 0.000605 3035.4551  2.255411 
32768 0.003168 0.00114  3450.455808  2.780041 
65536 0.008694 0.002464 3404.628083  3.528726 
131072 0.015363 0.005027 3545.850483  3.05604 
262144 0.033223 0.012513 3016.885246  2.655183 
524288 0.072918 0.025879 3079.443664  2.817667 
1048576 0.173043 0.076537 2192.056517  2.260904 
2097152 0.331553 0.157427 2238.01491  2.106081 
4194304 0.801544 0.430518 1715.573229  1.861814 

जैसा कि अन्य पोस्टर द्वारा सुझाया गया है GPU से डेटा का हस्तांतरण वह हिट है जिसे आप लेते हैं। छोटे एफएफटी सीपीयू पर, कुछ कार्यान्वयन/आकार पूरी तरह से कैश में किया जा सकता है। यह सीपीयू को छोटे एफएफटी (~ 1024 अंक से नीचे) के लिए सबसे अच्छा विकल्प बनाता है। यदि दूसरी तरफ आपको GPU से न्यूनतम चाल के साथ डेटा पर बड़े बैचों का प्रदर्शन करने की आवश्यकता है तो GPU CPU CPU को हरा देगा।

यदि आप एक तेज़ एफएफटी कार्यान्वयन चाहते हैं, या इंटेल मैथ लाइब्रेरी चाहते हैं तो मैं एफएफटीडब्ल्यू का उपयोग करने का सुझाव दूंगा यदि आप एक तेज़ (वाणिज्यिक) कार्यान्वयन चाहते हैं। एफएफटीडब्ल्यू के लिए, FFTW_Measure ध्वज का उपयोग करके योजनाएं करने से आपके विशिष्ट हार्डवेयर के लिए सबसे तेज़ संभव एफएफटी दिनचर्या का आकलन और परीक्षण किया जाएगा।मैं इसके बारे में this question में विस्तार से जाता हूं।

जीपीयू कार्यान्वयन के लिए आप एनवीडिया कूडा द्वारा प्रदान किए गए एक से बेहतर नहीं हो सकते हैं। जीपीयू के प्रदर्शन में उल्लेखनीय वृद्धि हुई है क्योंकि मैंने 7800 जीटीएक्स पर अपने प्रयोग किए हैं, इसलिए मैं सुझाव दूंगा कि उनके एसडीके को आपकी विशिष्ट आवश्यकता के लिए जाना होगा।

+0

हालांकि उत्तर बहुत अच्छा है, यह पुराना लगता है। क्या आपने कभी नई पीढ़ी के मोबाइल उपकरणों का बेंचमार्क किया है जहां एफएफटी के लिए जीपीयू के साथ मेमोरी साझा की जाती है? (संपादित करें: जब मैं मोबाइल लिखता हूं, लेकिन नया आईओटी, एम्बेडेड इत्यादि भी नहीं, तो मेरा मतलब सिर्फ फोन या टैबलेट नहीं है) – emrahgunduz

+1

हाँ यह 10 साल पहले हुआ था, मैंने यह काम किया था। आज के जीपीयूएस में मुख्य मेमोरी से जीपीयू मेमोरी में स्थानांतरित करने के लिए बहुत तेजी से बैंडविड्थ है, लेकिन इसी तरह, सीपीयू और कैश भी टोपी बहुत तेजी से हैं। मैंने इसे बेंचमार्क नहीं किया है, लेकिन मुझे लगता है कि आज भी इसी तरह की समस्याएं मौजूद हैं: छोटे डेटासेट सिम अनुकूलित ऑप्टिमाइज्ड सी ++ में तेजी से गणना करेंगे, जीपीयू पर बड़े डेटासेट तेजी से होंगे। वास्तव में वह कहाँ है? यह परीक्षण के लिए एक मामला है! –

1

मैं विशेष रूप से एम्बेडेड जीपीयू के बारे में आपके प्रश्न को जोड़ना चाहता हूं।

डेस्कटॉप पर देखे गए उच्च अंत GPU की तुलना में उनके पास आमतौर पर बहुत कम शेडर कोर होते हैं, कोर और निचले मेमोरी बैंडविड्थ के लिए कम रजिस्ट्रार होते हैं। हालांकि, एक एम्बेडेड जीपीयू पर अनुप्रयोगों जैसे एफएफटी चलाना ऑनबोर्ड मल्टीकोर सीपीयू [1] की तुलना में बेहतर प्रदर्शन दे सकता है। एम्बेडेड जीपीयू में प्रमुख लाभ यह है कि वे सीपीयू के साथ एक सामान्य मेमोरी साझा करते हैं जिससे मेमोरी कॉपी प्रक्रिया को मेजबान से डिवाइस से परहेज किया जाता है।

लगभग सभी एआरएम से माली, क्वालकॉम आदि समर्थन OpenCL से Adreno, इस प्रकार एक एम्बेडेड GPU पर अपने FFT के लिए एक OpenCL लाइब्रेरी का उपयोग कर एक बेहतर प्रदर्शन (एएमडी से clFFT अच्छी तरह से जाना जाता है और ओपनसोर्स) दे सकते हैं जैसे एम्बेडेड GPUs। एम्बेडेड GPU वास्तुकला के लिए OpenCL कोड ट्यूनिंग बेहतर बना सकते हैं। (http://infocenter.arm.com पर देखें एआरएम माली-T600 सीरीज जीपीयू OpenCL विकासकर्ता गाइड)

[1] अरियन Maghazeh, Unmesh, बोरदोलोई Petru, Eles पेंग। सामान्य लो-पावर एंबेडेड जीपीयू पर प्रयोजन कंप्यूटिंग: क्या यह आयु का आ गया है?