एक FPGA एक सीपीयू से कैसे बेहतर हो सकता है?


55

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

FPGA प्रदर्शन पर सीपीयू के साथ कैसे प्रतिस्पर्धा कर सकता है जब सीपीयू आमतौर पर कम से कम परिमाण का एक क्रम तेजी से (घड़ी के संदर्भ में) चल रहा होता है?


13
FPGA सब कुछ एक ही बार में करता है।
इग्नासियो वाज़केज़-अब्राम्स

जवाबों:


48

सीपीयू अनुक्रमिक प्रसंस्करण के उपकरण हैं। वे संचालन के अनुक्रम में एक एल्गोरिथ्म को तोड़ते हैं और उन्हें एक बार में निष्पादित करते हैं।

FPGA हैं (या, के रूप में कॉन्फ़िगर किया जा सकता है) समानांतर प्रसंस्करण उपकरणों। एक संपूर्ण एल्गोरिथ्म को घड़ी के एकल टिक में निष्पादित किया जा सकता है, या सबसे खराब स्थिति, एक अनुक्रमिक प्रोसेसर की तुलना में बहुत कम घड़ी की टिक। बढ़े हुए तर्क जटिलता की लागतों में से एक आम तौर पर एक कम सीमा है जिस पर डिवाइस को देखा जा सकता है।

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

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

फायदे के लिए आपके द्वारा भुगतान की जाने वाली कीमत बिजली की खपत और $ $ $ है।


2
+1; FPGAs हालांकि सीपीयू के रूप में गतिशील नहीं हैं, यही कारण है कि आमतौर पर सीपीयू पीसी के लिए बेहतर होते हैं
निक विलियम्स

17
"आप जो लाभ के लिए भुगतान करते हैं वह बिजली की खपत और $ $ $ है।" - यह अक्सर सच होता है, लेकिन आप कई एल्गोरिदम के लिए कम अंत $ 50 Xilinx संयमी -6 के साथ एक उच्च अंत बहु-$ 1000 इंटेल Xeon मशीन को हरा सकते हैं। लेकिन आम तौर पर इंजीनियरिंग का बहुत समय लगता है और आप एक बहुत ही कस्टम डिजाइन के साथ समाप्त हो सकते हैं जो केवल एक आवेदन के लिए काम करता है और इसे बदलना मुश्किल है। तो Tradeoff सिर्फ शक्ति और धन नहीं है, लेकिन एल्गोरिथ्म विकास समय, पुन: प्रयोज्य और लचीलापन है। (यद्यपि आप समय == धन का तर्क दे सकते हैं।)
wjl

markt, आपके अंतिम वाक्य के बारे में, FPGAs CPU की तुलना में बहुत कम बिजली नहीं हैं? CPU और FPGAs दोनों के लिए उपकरणों की एक विस्तृत श्रृंखला है, लेकिन अगर हम बिट-कॉइन माइनिंग जैसी चीजों के लिए उपयोग किए जाने वाले उपकरणों को देखते हैं, तो उन कार्यों के लिए उपयोग किए जाने वाले CPU नहीं हैं जो FPGAs की तुलना में अधिक शक्तिशाली हैं। उपयोग किया गया?
डेविड गार्डनर

4
@ डेविड: जब बिटकॉइन खनन के बारे में बात की जाती है, तो प्रासंगिक मीट्रिक प्रति वाट हैश की संख्या होती है। मार्कट समग्र बिजली की खपत के बारे में बात कर रहा है। यही है, एक दिया गया FPGA एक विशिष्ट सीपीयू की 3x शक्ति का उपभोग कर सकता है, लेकिन बिटकॉइन खनन में 3x से अधिक तेज है; इसलिए बिटकॉइन के लिए यह एक जीत है।
बिली ओनेल

2
@ बिली: हैश प्रति वाट की संख्या · दूसरा, प्रति वाट नहीं।
पाओलो एबरमन

34

Markt के पास यह अधिकतर सही है, लेकिन मैं अपने 2 सेंट यहां फेंकने जा रहा हूं:

कल्पना कीजिए कि मैंने आपको बताया था कि मैं एक कार्यक्रम लिखना चाहता था जिसने 32-बिट पूर्णांक के अंदर बिट्स के क्रम को उलट दिया। कुछ इस तरह:

int reverseBits(int input) {
    output = 0;
    for(int i = 0;i < 32;i++) {
        // Check if the lowest bit is set
        if(input & 1 != 0) {
            output = output | 1; // set the lowest bit to match in the output!
        }

        input = input >> 1;
        output = output << 1;
    }
    return output;
}

अब मेरा कार्यान्वयन सुरुचिपूर्ण नहीं है, लेकिन मुझे यकीन है कि आप इस बात से सहमत हैं कि ऐसा करने में कुछ संक्रियाएँ शामिल होंगी, और शायद कुछ प्रकार के लूप भी। इसका मतलब है कि सीपीयू में, आपने इस ऑपरेशन को लागू करने के लिए 1 से अधिक चक्र खर्च किए हैं।

एक FPGA में, आप बस इसे कुंडी की एक जोड़ी के रूप में तार कर सकते हैं। आप अपने डेटा को कुछ रजिस्टर में प्राप्त करते हैं, फिर आप इसे रिवर्स बिट ऑर्डर में अलग रजिस्टर में वायर करते हैं। इसका मतलब है कि ऑपरेशन FPGA में एक एकल घड़ी चक्र में पूरा होगा। इस प्रकार, एक एकल चक्र में, FPGS ने एक ऑपरेशन पूरा किया है जो आपके सामान्य उद्देश्य सीपीयू को कई हजारों चक्र पूरा करने के लिए ले गया है! इसके अलावा, आप समानांतर में इनमें से कुछ सौ रजिस्टर कर सकते हैं। इसलिए यदि आप FPGA पर कुछ सौ नंबरों में जा सकते हैं, तो एक ही चक्र में यह उन हजारों ऑपरेशनों को सैकड़ों बार खत्म कर देगा, सभी 1 FPGA घड़ी चक्र में।

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

FPGAs, CPLDs, और ASIC सभी आपको कच्चे हार्डवेयर तक पहुँच प्रदान करते हैं, जो आपको "डिक्रिप्ट AES256 एन्क्रिप्टेड बाइट्स विद की" या "डिकोड फ्रेम ऑफ़ h.264 वीडियो" जैसे पागल संचालन को परिभाषित करने की अनुमति देता है। ये एक FPGA में एक से अधिक घड़ी चक्र की विलंबताएं हैं, लेकिन इन्हें सामान्य प्रयोजन असेंबली कोड की लाखों लाइनों में ऑपरेशन लिखने की तुलना में बहुत अधिक कुशल शिष्टाचार में लागू किया जा सकता है। यह भी इन कार्यों में से कई के लिए फिक्स्ड उद्देश्य FPGA / ASIC बनाने का लाभ अधिक शक्ति-कुशल है, क्योंकि उन्हें उतने बाहरी काम करने की ज़रूरत नहीं है!

समानांतरवाद वह दूसरा भाग है जिसे चिह्नित किया गया था, और जबकि वह महत्वपूर्ण भी है, मुख्य बात यह है कि एक FPGA कुछ को समानांतर करता है जो ऑपरेशन को करने के लिए आवश्यक चक्रों के संदर्भ में सीपीयू में पहले से ही महंगा था। एक बार जब आप कहना शुरू करते हैं "मैं 10 FPGA चक्रों में कार्य कर सकता हूं जो मेरे सीपीयू 100,000 साइकिलों को ले जाता है, और मैं इस कार्य को एक समय में 4 आइटम समानांतर में कर सकता हूं," आप आसानी से देख सकते हैं कि एफपीजीए बहुत अधिक हो सकता है। एक सीपीयू से तेज!

तो हम सब कुछ के लिए FPGAs, CPLD और ASIC का उपयोग क्यों नहीं करते? क्योंकि सामान्य तौर पर यह एक पूरी चिप होती है जो एक ऑपरेशन के अलावा कुछ नहीं करती है। इसका मतलब यह है कि यद्यपि आप अपने FPGA / ASIC में तेजी से परिमाण के कई आदेशों को चलाने के लिए एक प्रक्रिया प्राप्त कर सकते हैं, आप बाद में इसे तब नहीं बदल सकते जब यह ऑपरेशन अब उपयोगी नहीं है। एक सर्किट में एक बार FPGA को बदलने के कारण आप (आम तौर पर) को बदल नहीं सकते हैं, यह है कि इंटरफ़ेस के लिए वायरिंग को ठीक किया जाता है, और आम तौर पर सर्किट में ऐसे घटक शामिल नहीं होते हैं जो आपको FPGA को अधिक उपयोगी कॉन्फ़िगरेशन में फिर से शुरू करने की अनुमति देते हैं। कुछ शोधकर्ता हाइब्रिड एफपीजीए-सीपीयू मॉड्यूल बनाने की कोशिश कर रहे हैं, जहां सीपीयू का एक खंड है जो एफपीजीए की तरह रीवाइंड / रीप्रोग्राम किए जाने में सक्षम है, जो आपको सीपीयू के प्रभावी अनुभाग को "लोड" करने की अनुमति देता है,


2
बिट्स (और अन्य सभी बिट स्वैप / चयन कार्यों) को उलटने के उदाहरण के लिए, यह वास्तव में 1 घड़ी चक्र नहीं लेता है, यह 0. लेता है। आपके उदाहरण में, यह एक कुंडी में डेटा स्टोर करने के लिए 1 घड़ी चक्र लेता है , जो कि नहीं है एक ही ऑपरेशन। यह 1 घड़ी चक्र लेता है कि आप बिट्स को उलटते हैं या नहीं। बिट्स को उलटने का ऑपरेशन 0 घड़ी चक्र है; ओवरहेड नहीं, बस अलग मार्ग। अंतर सिर्फ शब्दार्थ नहीं है, खासकर जब आप चीजों को जोड़ना शुरू करते हैं। उदाहरण के लिए, 3 बिट्स के नीचे 32-बिट शब्द को शिफ्ट करने में कितना समय लगता है, फिर हर दूसरे निब को स्वैप करें, फिर इसे उल्टा करें?
wjl

1
"हाइब्रिड एफपीजीए-सीपीयू मॉड्यूल" - ये लंबे समय से बाजार में हैं ( एक आधुनिक सफल व्यक्ति के लिए xilinx.com/products/silicon-devices/soc/zynq-7000/index.htm देखें , लेकिन बिना भी विशेष समर्थन, सॉफ्टवेयर और एचडीएल के संयोजन को कपड़े पर FPGA के अंदर एक नरम सीपीयू लागू करके किया जाता है।
wjl

@wjl आप सही कह रहे हैं कि यह तकनीकी रूप से ऑपरेशन करने के लिए कोई चक्र नहीं लेता है। मैं तर्क दूंगा कि आपका उदाहरण केवल शब्दार्थिक रूप से भिन्न है, अधिकांशतः क्योंकि उन तीनों कार्यों को करने से तार्किक रूप से एक निश्चित बिट पैटर्न में अनुवाद होता है (अर्थात मैं b1b2b3b4 से शुरू होता हूं और मैं b3b1b4b2 के साथ समाप्त होता हूं)। पूरे उत्तर में यह मेरी बात थी। मैं यह बताने की कोशिश कर रहा था कि किसी ऑपरेशन को चरणों की एक श्रृंखला के रूप में वर्णित करना अक्सर आवश्यक होता है जब आपके पास एक निश्चित निर्देश सेट / गेट व्यवस्था होती है।
किट स्कज्ज

@wjl: जिस तरह से दाविद-माली ने सवाल पूछा, वह कहता है कि "सीपीयू" एक इंटेल या एएमडी x86 / x86_64 के बराबर है जिसे अत्यधिक देखा, पाइपलाइन और अनुकूलित सीपीयू कहा जाता है। कई नरम "CPUs" हैं, लेकिन मैं FPGA में बैठने के लिए डिज़ाइन किए गए किसी भी व्यक्ति को i7 की तरह नहीं देखा जा सकता है, न ही वे लगभग अनुकूलित या सक्षम हैं। संकर के लिए के रूप में, मैं और अधिक इस तरह से कुछ मतलब था: newsroom.intel.com/docs/DOC-1512 जो जाहिरा तौर पर मौजूद है
किट स्कज़

1
Zynq वास्तव में एक प्रोसेसर (ARM Cortex-A9 - टैबलेट कंप्यूटर आदि चलाने वाली एक ही चीज) का बहुत बुरा नहीं है, लेकिन मैं मानता हूं कि यह एक उच्च गति x86_64 के साथ एकीकृत FPGA के लिए अधिक भयानक होगा। =)
wjl

25

यहाँ प्रस्तुत अन्य सभी लोकप्रिय उत्तर FPGAs और CPU के बीच शाब्दिक अंतर के बारे में बात करते हैं। वे FPGA के समानांतर प्रकृति बनाम एक सीपीयू की अनुक्रमिक प्रकृति की ओर इशारा करते हैं, या कुछ विशिष्ट एल्गोरिदम एक FPGA पर अच्छी तरह से काम क्यों कर सकते हैं, इसके उदाहरण देते हैं। वे सभी अच्छे और सच्चे हैं, लेकिन मैं यह सुझाव दूंगा कि सीपीयू और एफपीजीए के बीच अधिक बुनियादी अंतर है।

FPGA और CPU के बीच आम भाजक क्या है? यह है कि वे दोनों सिलिकॉन के ऊपर निर्मित हैं। और कुछ मामलों में शाब्दिक रूप से समान सिलिकॉन प्रक्रियाएं होती हैं।

मूलभूत अंतर वह अमूर्तता है जिसे हम उस सिलिकॉन के ऊपर ढेर करते हैं। सिलिकॉन से पैकेज्ड आईसी तक एक ही आधुनिक सीपीयू डिजाइन के पूर्ण विवरण को समझना एक मानव के लिए संभव नहीं है। इसलिए इंजीनियरिंग प्रक्रिया के एक हिस्से के रूप में हम उस जटिल समस्या को छोटी प्रबंधनीय समस्याओं में विभाजित करते हैं जो मनुष्य अपने सिर को चारों ओर लपेट सकते हैं।

विचार करें कि उस सिलिकॉन को एक कार्यशील सीपीयू में बदलना क्या है। यहाँ उस लक्ष्य के लिए आवश्यक अमूर्तता की परतों का कुछ सरलीकृत दृश्य दिया गया है:

  1. पहले हमारे पास इंजीनियर हैं जो जानते हैं कि सिलिकॉन से ट्रांजिस्टर कैसे बनाया जाता है। वे जानते हैं कि छोटे ट्रांजिस्टर को कैसे डिज़ाइन किया जाता है, जो 10 s या गिगाहर्ट्ज़ की दर से बिजली घूमाता है और स्विच करता है, और वे यह जानते हैं कि गोमांस ट्रांजिस्टर कैसे डिज़ाइन करते हैं जो उन्हें एक IC पैकेज से बाहर भेजने के लिए पर्याप्त शक्ति के साथ सिग्नल ड्राइव कर सकते हैं और एक PCB पर एक और चिप के लिए।

  2. फिर हमारे पास डिजिटल लॉजिक डिज़ाइनर हैं जो जानते हैं कि सैकड़ों अलग-अलग लॉजिक सेल के साथ लाइब्रेरी में उन ट्रांजिस्टर को कैसे रखा जाए। तर्क गेट्स, फ्लिप फ्लॉप, muxes, और योजक, कुछ नाम करने के लिए। सभी विभिन्न विन्यास में।

  3. आगे हमारे पास इंजीनियरों के विभिन्न समूह हैं जो जानते हैं कि उन डिजिटल (और कभी-कभी एनालॉग) ब्लॉकों को कैसे उच्च स्तर के कार्यात्मक ब्लॉक बनाने के लिए एक साथ रखा जाता है जैसे कि उच्च गति ट्रांसीवर, मेमोरी नियंत्रक, शाखा भविष्यवक्ता, एएलयू, आदि।

  4. फिर हमारे पास सीपीयू डिज़ाइनर हैं जो उन उच्च स्तरीय सीपीयू डिज़ाइनों को आर्किटेक्ट करते हैं जो उन कार्यात्मक इकाइयों को एक पूर्ण प्रणाली में एक साथ खींचते हैं।

और यह वहाँ बंद नहीं करता है। इस बिंदु पर हमारे पास एक काम करने वाला सीपीयू है जो असेंबली कोड चलाता है लेकिन यह एक भाषा नहीं है जो अधिकांश प्रोग्रामर इन दिनों लिखते हैं।

  1. हमारे पास एक सी कंपाइलर हो सकता है जो असेंबली कोड के लिए संकलित होता है (शायद कुछ मध्यवर्ती प्रतिनिधित्व के माध्यम से)
  2. हम एक वस्तु उन्मुख भाषा प्राप्त करने के लिए C के शीर्ष पर एक और अमूर्त जोड़ सकते हैं
  3. हम C या C ++ के ऊपर एक वर्चुअल मशीन भी लिख सकते हैं ताकि हम जावा बाइट कोड जैसी चीजों की व्याख्या कर सकें

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

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

अब उन सार की तुलना करें जो एक FPGA के लिए आवश्यक है। अनिवार्य रूप से, FPGA सार उपरोक्त सूची में # 2 पर रुकता है। FPGA डेवलपर्स को डिजिटल लॉजिक लेयर पर काम करने की अनुमति देता है। यह कुछ हद तक अधिक परिष्कृत है क्योंकि इस स्तर पर सीपीयू 'हार्ड कोडेड' हैं और FPGAs को रन टाइम पर कॉन्फ़िगर किया जाना चाहिए (जो, BTW, यही कारण है कि CPU आमतौर पर बहुत अधिक आवृत्तियों को चलाते हैं), लेकिन आवश्यक महत्वपूर्ण सच्चाई यह है कि यह बहुत दूर है सीपीयू की तुलना में FPGAs के लिए कुछ सार।

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

लेकिन निश्चित रूप से कम अमूर्त के लिए एक नीचे की ओर भी है। उन सभी CPU अमूर्त अच्छे कारण के लिए वहाँ हैं। वे हमें बहुत सरल कोडिंग प्रतिमान देते हैं जिसका अर्थ है कि अधिक लोग आसानी से उनके लिए विकसित कर सकते हैं। बदले में इसका मतलब है कि अस्तित्व में कई और सीपीयू डिज़ाइन हैं और इस प्रकार हमारे पास सीपीयू से बड़े पैमाने पर मूल्य / पैमाने / समय-से-बाज़ार के लाभ हैं।

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


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

21

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

यदि आप 32-बिट (या अधिक) सीपीयू पर इस लूप को प्रोग्राम करते हैं, तो आप इसके इंस्ट्रक्शन सेट को कार्य के लिए अच्छी तरह से अनुकूल पाएंगे --- SHA-256 को सीपीयू पर कुशलतापूर्वक चलाने के लिए डिज़ाइन किया गया था। फिर भी आप केवल एक आधुनिक सीपीयू के सिलिकॉन क्षेत्र का 2% का उपयोग कर रहे हैं, कैशिंग, गुणा, विभाजन, फ्लोटिंग प्वाइंट ऑपरेशन, ब्रांचिंग और ब्रेक भविष्यवाणी आदि जैसे क्षेत्र-गहन कार्यक्षमता के साथ, या तो बिल्कुल भी उपयोग नहीं किया जाता है या महत्वपूर्ण प्रदान करने में असमर्थ हैं। इस विशेष कार्य के लिए प्रदर्शन को बढ़ावा देना।

एक FPGA की तरह कॉन्फ़िगर करने योग्य हार्डवेयर में, आप केवल उन 2% को लागू करते हैं, और कोड निष्पादन के बारे में सभी को भूलकर आगे अनुकूलन करते हैं, बल्कि गेट्स को डिजाइन करने के लिए उनमें से प्रत्येक को अक्सर दोहराए जाने वाले सबफंक्शंस की गणना करते हैं। पाइपलाइज़्ड ऐसा है कि उनमें से प्रत्येक अगले हर घड़ी के सिलसिले में एक परिणाम पारित करता है, और 128-बार दोहराया (और कुछ विशेष अतिरिक्त तर्क के साथ जहां प्रत्येक SHA-256 शुरू होता है और समाप्त होता है), आपको अंत में हर घड़ी चक्र का परिणाम मिल रहा है (शायद के लिए एक FPGA पर 100 मिलियन हैश प्रति सेकंड 300 मेगाहर्टज का समर्थन करने के लिए विज्ञापित तर्क से सरल) एक आधुनिक सीपीयू पर होने के बावजूद, आप एक कोर के प्रति कुछ हजार घड़ी चक्रों के परिणाम की उम्मीद कर सकते हैं, एक मल्टी-कोर मल्टी पर 10 मिलियन हैश प्रति सेकंड का कहना है -जीपीयू सीपीयू

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


3
यह सिलिकॉन के उपयोग के बारे में एक बहुत अच्छा बिंदु है।
मार्कट

लेकिन शायद (अनायास ही!) भ्रामक, यह देखते हुए कि एक FPGA में कई भौतिक द्वारों वाली कुछ जटिल कोशिकाएँ होती हैं, जिनमें से एक विशिष्ट अनुप्रयोग फिर से केवल एक अंश का उपयोग करता है, जिससे उनके निर्माता आपको बताने की कोशिश में समकक्ष गेट काउंट का विज्ञापन कर सकते हैं। उस में एक "ठेठ" आवेदन के लायक हो सकता है ...
पिरामिड

3

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

वास्तविक लाभ यह है कि SHA-256 गणनाओं का एक बड़ा हिस्सा तार्किक संचालन (उदाहरण के लिए, बिट शिफ्ट्स) हैं जो वायरिंग में किए जा सकते हैं। जब इस तरह से किया जाता है, तो उन्हें 0 घड़ी चक्र की आवश्यकता होती है।

एक अन्य महत्वपूर्ण लाभ यह है कि CPU की तुलना में FPGAs अधिक शक्ति-कुशल (यानी MIPS प्रति वाट) हैं, इसलिए गणना के लिए आवश्यक ऊर्जा की मात्रा बहुत कम है। यह महत्वपूर्ण है क्योंकि एक बिटकॉइन खनन की लागत इस बात पर निर्भर करती है कि आप इसे बनाने के लिए कितनी बिजली का उपयोग करते हैं।

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

जीपीयू, बिटकॉइन बनाने के लिए भी उपयोग किया जाता है, लेकिन चूंकि वे बहुत कम ऊर्जा-कुशल हैं, इसलिए वे FPGAs और कस्टम ASIC के लिए जमीन खो रहे हैं।


यदि आप Monero hashing एल्गोरिथ्म उर्फ ​​क्रिप्टोनाइट को देखते हैं, तो आप देखेंगे कि FPGA का कार्यान्वयन असंभव है क्योंकि स्मृति की उच्च मात्रा को यादृच्छिक रूप से एक्सेस करने की आवश्यकता है (2MB)। इस मामले में सीपीयू का फायदा है।
लुकास92
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.