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 को अधिक उपयोगी कॉन्फ़िगरेशन में फिर से शुरू करने की अनुमति देते हैं। कुछ शोधकर्ता हाइब्रिड एफपीजीए-सीपीयू मॉड्यूल बनाने की कोशिश कर रहे हैं, जहां सीपीयू का एक खंड है जो एफपीजीए की तरह रीवाइंड / रीप्रोग्राम किए जाने में सक्षम है, जो आपको सीपीयू के प्रभावी अनुभाग को "लोड" करने की अनुमति देता है,