মার্কেটের বেশিরভাগ ক্ষেত্রে এটি সঠিকভাবে রয়েছে তবে আমি আমার 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 টিরও বেশি চক্র ব্যয় করেছেন।
একটি এফপিজিএতে, আপনি সহজেই এটিকে জোড়ার জোড় হিসাবে তারে বেড়াতে পারেন। আপনি কিছু রেজিস্টারে আপনার ডেটা পান, তারপরে আপনি বিপরীত বিট ক্রমে এটি বিভিন্ন রেজিস্টারে তারযুক্ত করুন। এর অর্থ এফপিজিএতে একক ঘড়ির চক্রের মধ্যে অপারেশনটি সম্পন্ন হবে। সুতরাং, একক চক্রে, এফপিজিএস একটি অপারেশন সম্পন্ন করেছে যা আপনার সাধারণ উদ্দেশ্য সিপিইউতে কয়েক হাজার চক্র সম্পূর্ণ করেছে! তদ্ব্যতীত, আপনি সমান্তরালভাবে এই কয়েকশত নিবন্ধগুলি সম্ভবত তারে আপ করতে পারেন। সুতরাং আপনি যদি কয়েক শত সংখ্যক এফপিজিএ-তে সরে যেতে পারেন, তবে একটি একক চক্রের মধ্যে এই হাজার হাজার অপারেশন শত শত বার শেষ হবে, সমস্ত 1 এফপিজিএ ঘড়ির চক্রের মধ্যে।
অনেকগুলি জিনিস রয়েছে যা একটি সাধারণ উদ্দেশ্য সিপিইউ করতে পারে তবে একটি সীমাবদ্ধতা হিসাবে আমরা সাধারণীকরণ এবং সহজ নির্দেশাবলী সেট আপ করি যা অগত্যা কিছু কাজ শেষ করার জন্য সরল নির্দেশাবলীর তালিকায় প্রসারিত করতে হয়। সুতরাং আমি সাধারণ উদ্দেশ্য সিপিইউতে "32 বিট রেজিস্টারের জন্য বিপরীত বিট অর্ডার" এর মতো একটি নির্দেশনা তৈরি করতে পারি এবং সিপিইউকে কেবলমাত্র এফপিজিএর মতো সামর্থ্য দিতে পারি, তবে এরকম সম্ভাব্য দরকারী নির্দেশাবলীর অসীম সংখ্যা রয়েছে এবং তাই আমরা শুধুমাত্র জনপ্রিয় সিপিইউগুলিতে ব্যয়ের গ্যারান্টি রয়েছে এমনটি রাখুন।
এফপিজিএ, সিপিএলডি এবং এএসআইসি সমস্ত আপনাকে কাঁচা হার্ডওয়্যার অ্যাক্সেস দেয় যা আপনাকে "ডিক্রিপ্ট এএস 256 এনক্রিপ্টড বাইটস" কী বা "এইচ .264 ভিডিওর ডিকোড ফ্রেম" এর মতো পাগল ক্রিয়াকলাপগুলি সংজ্ঞায়িত করতে দেয়। এগুলির একটি এফপিজিএতে একাধিক ঘড়ির চক্রের বিলম্ব রয়েছে, তবে সাধারণ লক্ষণীয় সমাবেশ কোডের কয়েক লক্ষ লাইনে অপারেশনটি লেখার চেয়ে এগুলি আরও কার্যকর দক্ষতার সাথে প্রয়োগ করা যেতে পারে। এর মধ্যে অনেকগুলি অপারেশনকে স্থির-উদ্দেশ্যে এফপিজিএ / এএসআইসি আরও শক্তি-দক্ষ করার সুবিধাও রয়েছে কারণ তাদের এতটা বহিরাগত কাজ করতে হবে না!
সমান্তরালতা অপর অংশ যা চিহ্নিত করে এবং এটিও গুরুত্বপূর্ণ, মূল বিষয়টি যখন কোনও এফপিজিএ অপারেশন সঞ্চালনের জন্য প্রয়োজনীয় চক্রগুলির ক্ষেত্রে সিপিইউতে ইতিমধ্যে ব্যয়বহুল কিছু ছিল ralle আপনি একবার বলতে শুরু করলেন "আমি আমার সিপিইউতে ১০,০০,০০০ চক্র গ্রহণকারী একটি টাস্ক আমি 10 টি এফপিজিএ চক্রের মধ্যে সম্পাদন করতে পারি এবং আমি একবারে সমান্তরাল 4 আইটেমগুলিতে এই কাজটি করতে পারি," আপনি সহজেই দেখতে পারবেন কেন এফপিজিএ অনেকগুলি হেক হতে পারে be সিপিইউর চেয়ে দ্রুত!
তাহলে আমরা কেন সবকিছুর জন্য এফপিজিএ, সিপিএলডি এবং এএসআইসি ব্যবহার করি না? কারণ সাধারণভাবে এটি একটি সম্পূর্ণ চিপ যা একটি অপারেশন ছাড়া কিছুই করে না। এর অর্থ হ'ল আপনি যদি আপনার এফপিজিএ / এএসআইসি তে অনেকগুলি পরিমানের অর্ডার দ্রুত চালানোর প্রক্রিয়া পেতে পারেন তবে সেই অপারেশনটি আর কার্যকর না হলে আপনি পরে এটিকে পরিবর্তন করতে পারবেন না। কোনও সার্কিটের মধ্যে একবার আপনি কোনও এফপিজিএ পরিবর্তন করতে পারবেন না তার কারণ হ'ল ইন্টারফেসের জন্য ওয়্যারিংগুলি স্থির হয়ে যায় এবং সাধারণত সার্কিটটিতে এমন উপাদানগুলি অন্তর্ভুক্ত হয় না যা আপনাকে আরও দরকারী কনফিগারেশনে এফপিজিএ পুনরায় প্রোগ্রাম করতে দেয়। কিছু গবেষক হাইব্রিড এফপিজিএ-সিপিইউ মডিউল তৈরির চেষ্টা করছেন, যেখানে সিপিইউর একটি অংশ রয়েছে যা এফপিজিএর মতো পুনর্নির্মাণ / পুনঃপ্রক্রমন করতে সক্ষম, আপনাকে সিপিইউর একটি কার্যকর বিভাগ "লোড" করতে দেয়,