क्या FPGA मल्टी-कोर पीसी का प्रदर्शन कर सकता है?


20

मुझे समझ में नहीं आता कि एक एल्गोरिथ्म को तेज करने के लिए FPGA का उपयोग कैसे किया जा सकता है। वर्तमान में मैं क्वाडकोर लैपटॉप पर रियल टाइम अल्गोरिद्म का उपभोग करने वाला समय चला रहा हूं ताकि समानांतर रूप से चार गणनाएं की जा सकें।

मुझे हाल ही में सतर्क किया गया है कि FPGA बेहतर प्रदर्शन दे सकता है। मुझे समझ नहीं आता कि यह कैसे काम करता है। क्या कोई समझा सकता है कि FPGA एक एल्गोरिथ्म को कैसे तेज करता है और अगर मुझे Xilinx या Altera FPGA समाधान पर स्विच करना चाहिए या अपने क्वाडकोर लैपटॉप पर कम्प्यूटेशन का प्रदर्शन करते रहना चाहिए।

अतिरिक्त विवरण: एल्गोरिथ्म तरंगिका पैकेट परिवर्तन के माध्यम से खिलाया इनपुट का उपयोग करके 20 कृत्रिम तंत्रिका नेटवर्क चलाता है

शानदार जवाब के लिए आप सभी का धन्यवाद।


1
क्या आपने डेस्कटॉप (या सर्वर) सीपीयू पर एल्गोरिथ्म चलाने पर विचार किया है? वे आमतौर पर लैपटॉप सीपीयू की तुलना में तेज होते हैं। (एक स्थिर कारक द्वारा, लेकिन अभी भी तेज है।)
ntoskrnl

1
तंत्रिका नेटवर्क प्रसंस्करण के लिए GPU का उपयोग करने के बारे में सोचें। जीपीयू में कई इकाइयाँ होती हैं जो समानांतर में फ्लोटिंग पॉइंट नंबरों को गुणा कर सकती हैं।
कामिल

@ntoskrnl मुझे लगता है कि उसके पास i5 या बेहतर सीपीयू (4 कोर) है, इसलिए डेस्कटॉप या सर्वर पर प्रदर्शन केवल घड़ी की गति के लिए प्रासंगिक होगा। हो सकता है कि Xeon पर वह विशाल कैश और बेहतर मेमोरी बैंडविड्थ के लिए बहुत कम (20%?) प्रदर्शन कर सकता है, लेकिन यह बहुत ज्यादा नहीं है।
कामिल

आपके पास क्या सीपीयू है?
कामिल

सवालों का दिलचस्प समय, हमें नेटवर्कइंजीनियरिंग पर एक समान प्रश्न मिला। ईएस
माइक पेनिंगटन

जवाबों:


23

मेरी एक सहकर्मी ने इसे बेंचमार्क किया और इस नतीजे पर पहुंची कि FPGA एक पीसी को एक बार में पछाड़ देगी, जब आपके पास लगभग 100 से अधिक स्वतंत्र , पूर्णांक कार्य होंगे जो FPGA में फिट होंगे। फ़्लोटिंग पॉइंट कार्यों के लिए GPGPU ने FPGA को हरा दिया। संकीर्ण मल्टीथ्रेडिंग या SIMD ऑपरेशन के लिए, तब CPU अत्यधिक अनुकूलित होते हैं और आमतौर पर प्राप्त FPGAs की तुलना में अधिक उच्च गति पर चलते हैं।

अन्य कार्य: कार्य स्वतंत्र होना चाहिए। यदि कार्यों के बीच डेटा निर्भरताएं हैं तो यह गणना के महत्वपूर्ण मार्ग को सीमित करता है। एफपीजीए बूलियन मूल्यांकन और पूर्णांक गणित के साथ-साथ हार्डवेयर कम-विलंबता इंटरफेस के लिए अच्छे हैं, लेकिन मेमोरी-निर्भर वर्कलोड या फ्लोटिंग पॉइंट के लिए नहीं।

अगर आपको DRAM में वर्कलोड रखना है तो वह प्रोसेसर की बजाय अड़चन होगी।


3
यह तय करने के लिए कि क्या DRAM की सीमा है, आपको यह भी जानना होगा कि FPGAs में कई छोटे वितरित RAM (जैसे 500 स्वतंत्र 9kbit RAM ब्लॉक) हैं जो सभी एक ही घड़ी चक्र के दौरान पढ़ / लिख सकते हैं।
अधिकतम

19

एक FPGA एक प्रोसेसर से पूरी तरह से अलग काम करता है।

एक प्रोसेसर के लिए आप सॉफ्टवेयर लिखते हैं जो हार्डवेयर को बताता है कि क्या करना है। FPGA पर आप "आंतरिक रूप से हार्डवेयर कैसा दिखना चाहिए" का वर्णन करते हैं। यह ऐसा है जैसे आप अपने एल्गोरिथ्म के लिए विशेष रूप से बनाई गई एक चिप बना रहे हैं।

यह बहुत सी चीजों को गति देता है और बिजली की खपत को कम कर सकता है। लेकिन इसकी कमियां हैं: विकास में अधिक समय लगता है और यह बहुत अधिक जटिल है। आपको एक पूरी तरह से अलग तरीके से सोचने की जरूरत है और एक एल्गोरिदम का उपयोग नहीं कर सकते हैं जो सीधे आगे के तरीके से सॉफ्टवेयर में काम करते हैं।

कृत्रिम तंत्रिका नेटवर्क के लिए FPGA एक बढ़िया विकल्प है। इस क्षेत्र में बहुत सारे शोध चल रहे हैं।


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

13

यह एल्गोरिथ्म पर बहुत कुछ निर्भर करता है, लेकिन सिद्धांत को काफी सरल रूप से समझाया जा सकता है।

मान लीजिए कि आपके एल्गोरिथ्म को 8-बिट संख्याओं का योग करना है। आपके CPU को अभी भी प्रत्येक निर्देश प्राप्त करने की आवश्यकता होगी, रैम या कैश मेमोरी से ऑपरेंड प्राप्त करें, योग निष्पादित करें, परिणाम को कैश में संग्रहीत करें, और अगले ऑपरेशन के साथ आगे बढ़ें। पाइप लाइन मदद करती है, लेकिन आप केवल एक साथ संचालन को निष्पादित कर सकते हैं जैसे आपके पास कोर।

यदि आप एक FPGA का उपयोग करते हैं, तो आप बड़ी संख्या में सरल योजक को लागू कर सकते हैं जो समानांतर में काम करते हैं, संभवतः समानांतर में हजारों की संख्या में crunching। यद्यपि किसी एकल ऑपरेशन में अधिक समय लग सकता है, आपके पास समानता की एक विशाल डिग्री है।

आप समान कार्य करने के लिए GPGPU का उपयोग भी कर सकते हैं, क्योंकि वे कई सरल कोर से भी बने होते हैं।


GPGPU तंत्रिका नेटवर्क का उपयोग करने के लिए एक महान इनपुट है!
बॉटनिक

तंत्रिका नेटवर्क ASIC भी हैं। इंटेल एक बनाने के लिए इस्तेमाल किया जो 80 के दशक में 16 न्यूरॉन्स को लागू किया।
जूनियर बिलिया

@ LiorBilia अच्छी तरह से मैं उनके बारे में कुछ भी पता नहीं है :)। मैं के साथ FPGA तंत्रिका नेटवर्क के साथ काम किया कभी नहीं किया है, और बहुत कम
clabacchio

@clabacchio सॉफ्टवेयर न्यूरल नेटवर्क एक प्रोग्राम है जो ज्यादातर फ्लोटिंग पॉइंट नंबरों पर ऑपरेशन को गुणा और तुलना करता है। ज्यादातर मेरा मतलब है ... 95% या अधिक।
कामिल

एक पारंपरिक सीपीयू 8-बिट संख्याओं के बहुत सारे योगों का एक बहुत अच्छा काम कर सकता है; एक तेज़ मशीन पर निष्पादन का समय मेमोरी से डेटा प्राप्त करने की लागत पर हावी हो जाएगा (कोड भ्रूण का 99% कैच से आएगा)। एक और दिलचस्प उदाहरण एक ऐसी योजना का उपयोग करके एन्कोड किए गए डेटा के साथ काम करना होगा जिसमें बिट्स की "असामान्य" व्यवस्था या अनुमति की आवश्यकता होती है। उदाहरण के लिए, अगर वीडियो सैंपलिंग डेटा का एक टुकड़ा लाल, हरे और नीले रंग के लिए इंटरलेव्स बिट्स देता है, तो एक एफपीजीए बिट्स को आसानी से पुनर्व्यवस्थित कर सकता है; एक पारंपरिक सीपीयू में बहुत अधिक परेशानी होगी।
सुपरकैट

6

कंप्यूटिंग उपकरणों के विशेषज्ञता के लगभग 3 स्तर हैं:

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

FPGA (जिसका अर्थ है फील्ड प्रोग्रामेबल गेट ऐरे) मध्य स्तर है। जैसा कि यह नाम है, इसका मतलब है कि इसे "क्षेत्र में" प्रोग्राम किया जा सकता है, जो एक कारखाने के बाहर है। FPGA आमतौर पर एक बार प्रोग्राम हो जाता है, इस प्रक्रिया को आंतरिक संरचना की स्थापना के रूप में वर्णित किया जा सकता है। इस प्रक्रिया के बाद यह आपके द्वारा चुने गए एक कार्य के लिए विशेष रूप से एक छोटे कंप्यूटर की तरह व्यवहार करता है। यही कारण है कि यह सामान्य सीपीयू से बेहतर किराया कर सकता है। FPGA की प्रोग्रामिंग बहुत कठिन और महंगी है और उन्हें डीबग करना बहुत कठिन है।

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

यदि आप "कोर" में सोचते हैं, तो इसे इस तरह से देखें: सीपीयू में 4, 6, शायद 8 बड़े कोर हैं जो सब कुछ कर सकते हैं। ASICS में अक्सर हजारों कोर होते हैं, लेकिन बहुत छोटे लोग, केवल एक चीज के लिए सक्षम होते हैं।

आप बिटकॉइन माइनिंग कम्युनिटी को देख सकते हैं। वे SHA256 हैश करते हैं।

  • सीपीयू कोर आई 7: 0.8-1.5 एम हैश / एस
  • FPGA: 5-300M हैश / एस
  • ASIC: 12000M हैश / प्रति एक छोटे चिप, 2000000M (हां, कि 2T) हैश / एस एक 160 चिप डिवाइस के लिए

बेशक, उन ASIC शिशुओं की लागत लगभग $ 2000 होती है जब बड़े पैमाने पर उत्पादन होता है, लेकिन यह आपको एक विचार देता है कि एक जैक-ऑफ-ऑल-ट्रेड एक विशेषज्ञ के खिलाफ कैसे किराया कर सकता है।

एकमात्र सवाल यह है कि क्या FPGA आपको लागत बचाने की तुलना में अधिक बचत लाएगा? बेशक, इसे एक लैपटॉप पर चलाने के बजाय, आप इसे 20 पीसीएस पर चलाने की कोशिश कर सकते हैं।


हैशिंग हालांकि एक बहुत ही खास मामला है; ध्यान दें कि scrypt- आधारित सिक्के विशेष हार्डवेयर द्वारा (जानबूझकर) बहुत त्वरण योग्य नहीं हैं।
pjc50

1
& ASIC डीबगिंग आमतौर पर निर्माण से पहले शिपिंग से पहले सिमुलेशन में संभाला जाता है। तो यह आम तौर पर निर्माण करने के लिए कल्पना से 6 महीने या अधिक है। निर्माण के बाद कीड़े का निदान करना .. महंगा है लेकिन असंभव नहीं है।
16:50 बजे pjc50

और जब यह कठिन होता है, वास्तव में बहुत कठिन हो सकता है, तो सीमा स्कैन, जेटीजी परीक्षण और एफआईबी का उपयोग करने वाली सीधी तकनीक आदि जैसी चीजें हैं, इसलिए उन्हें डीबग करना असंभव है, आपको बस यह जानना होगा कि आप क्या कर रहे हैं। । अब एक दिन ASIC एक डिजाइन प्रवाह (HDL, सिंथेसिस, P & R) को अधिक संदर्भित करता है जो वास्तव में एक वास्तविक डिवाइस को संदर्भित करता है क्योंकि ज्यादातर डिवाइस ASIC के एआरएम प्रोसेसर जैसी चीजों में शामिल हैं।
प्लेसहोल्डर

@ pjc50 हाँ, यह मेरी बात थी - विशेष मामलों में, गति अंतर जबरदस्त है। लेकिन scrypt asics अभी भी CPU और GPU को pwn करता है। मिलियन के कारक के रूप में नहीं (शा के साथ), लेकिन फिर भी 100 से अधिक।
Agent_L

@ प्लेसहोल्डर हाँ, लेकिन अगर आप बग ढूंढते हैं, तो यह उन सभी चिप्स के लिए बहुत उपयोग नहीं है जो पहले से निर्मित हैं। मेरा मतलब था "डीबगिंग" के रूप में "बग को दूर करना" न केवल "यहाँ यह" है।
19 अप्रैल को Agent_L

5

हां, FPGA कुछ विशिष्ट कार्य में आधुनिक CPU (जैसे इंटेल i7) को बेहतर बना सकता है, लेकिन तंत्रिका नेटवर्क प्रदर्शन को बेहतर बनाने के लिए आसान और सस्ता तरीके हैं।

सस्ता होने से - मेरा मतलब है कुल प्रयास, न कि FPGA आईसी लागत, बल्कि FPGA के लिए बहुत तेज मेमोरी (आपको तंत्रिका नेटवर्क के लिए इसकी आवश्यकता होगी) और संपूर्ण विकास प्रक्रिया।

  1. SSE का उपयोग करें - मैंने 2-3x बेहतर प्रदर्शन के साथ बहुत सरल तंत्रिका नेटवर्क कार्यान्वयन देखा है। यह अच्छा विचार हो सकता है यदि आपके लैपटॉप में कोई समर्पित जीपीयू नहीं है।

    विन्सेन्ट वोनहोक और एंड्रयू सीनियर द्वारा सीपीयू पर तंत्रिका नेटवर्क की गति में सुधार

  2. उपयोग GPGPU (प्रसंस्करण इकाइयों ग्राफिक्स पर सामान्य-उद्देश्य कंप्यूटिंग) - मुझे लगता है कि आप GeForce 730M की तरह मध्यम वर्ग के लैपटॉप GPU पर 100-200x प्रदर्शन को बढ़ावा देने archieve कर सकते हैं।

    यहाँ तंत्रिका नेटवर्क कार्यान्वयन (और मुफ्त कोड) है। यह एनवीडिया क्यूडा का उपयोग करता है।

    GPGPU दृष्टिकोण बहुत ही स्केलेबल है, अगर कुछ बिंदु पर आपको एहसास होता है कि आपको अधिक कंप्यूटिंग शक्ति की आवश्यकता है - तो आप 4992 कोर (महंगे महंगे) के साथ अधिक शक्तिशाली GPU या यहां तक ​​कि एनवीडिया टेस्ला K80 के साथ डेस्कटॉप कंप्यूटर का उपयोग कर सकते हैं।


1
यहां समस्या प्रदर्शन को परिभाषित करने की है। अगर हम तेजी से मतलब रखते हैं, तो हाँ, fpga सामान्य cpus की तुलना में तेज़ हो सकता है। हालांकि, fpga सीपीयू के रूप में इतना लचीला नहीं है, वे eficiently सिर्फ एक पूर्वनिर्धारित कार्य को अंजाम देने के लिए तैयार हैं। एक अन्य कार्य को निष्पादित करने का मतलब होगा कि इसकी आंतरिक वायरिंग वास्तव में एक और fpga को लागू करना है
गियानलुका यहूदीय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.