شتاب‌دهنده سخت‌افزاری

بندانگشتی|تصویری از یک شتاب‌دهنده سخت افزاری
در رایانش، **شتاب دهنده سخت‌افزاری** برای استفاده از سخت‌افزار رایانه‌ای است که به‌طور خاص ساخته شده‌است تا برخی از توابع را کارآمد تر از آنچه در نرم‌افزار در حال اجرا بر روی یک  عمومی انجام دهد. هر گونه تغییر داده یا روال که می‌تواند محاسبه شود، می‌تواند صرفاً در نرم‌افزار در حال اجرا بر روی یک پردازندهٔ عمومی، صرفاً در سخت‌افزار سفارشی یا در برخی ترکیب هر دو، محاسبه شود. عملیات را می‌توان سریع تر در سخت‌افزار خاص برنامه‌ریزی شده یا برنامه‌ریزی شده برای محاسبه عملیات نسبت به نرم‌افزار مشخص شده و بر روی یک پردازنده رایانه ای عمومی انجام شده‌است. هر رویکرد دارای مزایا و معایب است. پیاده‌سازی وظایف محاسباتی در سخت افزار برای کاهش تاخیر و افزایش کارایی به عنوان **شتاب سخت افزاری** شناخته می‌شود.

مزایای نرم‌افزاری نرم‌افزار عبارتند از: توسعه سریعتر (به سرعت سریعتر به بازار)، هزینه‌های مهندسی هزینه‌های غیر تکراری، انتقال قابلیت افزایش، و سهولت به روز رسانی ویژگیها یا تکه کردن اشکالات، به هزینه سربار برای محاسبه عملیات عمومی. مزایای سخت افزاری عبارتند از: سرعت بالا، کاهش مصرف برق، تأخیر کمتر، افزایش موازی بودن و پهنای باند و استفاده بهتر از قطعات و اجزای عملکردی موجود در یک مدار مجتمع؛ در هزینه توانایی کمتر برای به روز رسانی طرح‌ها، پس از آن بر روی سیلیکون پراکنده شده و هزینه‌های بالای تأیید عملیاتی و زمان به بازار افزایش می‌یابد. در سلسله مراتب سیستم‌های محاسباتی دیجیتال اعم از پردازنده همه منظوره به‌طور کامل سفارشی سخت افزار، یک معاوضه بین انعطاف‌پذیری و بهره‌وری وجود دارد، با راندمان افزایش سفارشات از قدر زمانی که هر برنامه با توجه به بالاتر که سلسله مراتب اجرا شده‌است. این سلسله مراتب شامل پردازنده‌های عمومی مانند پردازنده‌ها، پردازنده‌های متفاوتی مانند پردازنده‌های گرافیکی، عملکرد ثابت ساخته شده در آرایه‌های دروازه قابل برنامه‌ریزی فازی (FPGAها) و عملکرد ثابت بر روی مدار یکپارچه برنامه کاربردی (ASICs) است.

شتاب دهنده سخت افزاری برای عملکرد بهتر است و زمانی که عملکردها ثابت می‌شوند، بنابراین به روز رسانی‌ها در مورد راه حل‌های نرم‌افزاری مورد نیاز نیست. با ظهور دستگاه‌های منطقی قابل برنامه‌ریزی مانند FPGAها، محدودیت شتاب سخت افزاری به الگوریتم‌های کاملاً ثابت از سال ۲۰۱۰ کاهش یافته‌است، به این ترتیب شتاب سخت افزاری برای حوزه‌های مشکوک که نیاز به اصلاح الگوریتم‌ها و پردازش جریان کنترل را دارند، کاهش می‌یابد.

## بررسی اجمالی
مدارهای مجتمع را می‌توان برای انجام عملیات دلخواه در سیگنال‌های آنالوگ و دیجیتال ایجاد کرد. اغلب در محاسبات، سیگنال‌های دیجیتال هستند و می‌توانند به عنوان داده‌های دودویی تفسیر شوند. سخت افزار و نرم‌افزار کامپیوتر بر روی اطلاعات در نمایش دودویی برای انجام محاسبات عمل می کنند؛ این کار با محاسبه توابع بولی در بیت ورودی انجام می‌شود و خروجی را به دستگاه‌های خروجی پایین دست برای ذخیره‌سازی یا پردازش بیشتر منتقل می‌کند.

### محاسبات ارزیابی از سخت افزار و نرم‌افزار
نرم‌افزار یا سخت افزار می‌تواند تابع‌های محاسبه‌کننده را محاسبه کنند. سخت افزارهای سفارشی عملکرد بالاتری را در هر وات برای همان توابعی که در نرم‌افزار مشخص شده ارائه می‌دهند.

زبان توصیف سخت‌افزار (HDLs) مانند Verilog و VHDL می‌تواند مدلی که به صورت نرم‌افزار یا سنتز طراحی به صورت netlist است را برنامه‌ریزی کند و به وسیلهٔ یک FPGA یا گیت‌های منطقی تشکیل شده از یک مدارهای مجتمع با کاربرد خاص توصیف کند.

### برنامه ذخیره شده کامپیوتر
اکثر محاسبات مبتنی بر نرم‌افزار در ماشین‌هایی که از معماری فون نویمان استفاده می‌کنند، به‌طور کلی به عنوان کامپیوترهای ذخیره شده شناخته می‌شوند. برنامه‌های کامپیوتری به عنوان داده‌ها ذخیره می‌شوند و توسط پردازنده‌ها اجرا می‌شوند، معمولاً یک یا چند هسته CPU. چنین پردازنده باید واکشی و رمزگشایی دستورالعمل و همچنین عملوند داده از حافظه به عنوان بخشی از چرخه دستورالعمل به اجرای دستورالعمل‌های تشکیل دهنده برنامه نرم‌افزار. تکیه بر یک حافظه رایج برای کد و داده‌ها، منجر به تنگنای فون نویمان می‌شود، محدودیت اساسی بر روی توانایی نرم‌افزار در پردازنده‌های معماری فون نویمان. حتی در معماری هاروارد اصلاح شده، که در آن دستورالعمل‌ها و داده‌ها را جداگانه انبارهای در سلسله مراتب حافظه است، وجود دارد سربار به آموزش رمزگشایی شناسنده‌های و تسهیم دسترس واحدهای اجرایی در ریزپردازنده یا میکروکنترلر، که منجر به استفاده از مدار پایین. تکنولوژی Hyper-Threading اینتل با استفاده از استفاده کمتر از واحدهای عملکردی پردازنده موجود و هماهنگی سطح آموزش در میان موضوعات سختافزاری، چندینپرداز همزمان را فراهم می‌کند.

### سخت افزار واحدهای اجرایی
سخت افزار واحدهای اجرایی نیست و به‌طور کلی تکیه می‌کنند فون نویمان یا تغییر دانشگاه هاروارد معماری و لازم نیست برای انجام این آموزش واکشی و رمزگشایی مراحل یک چرخه آموزش و متحمل کسانی که مراحل' سربار. در صورت نیاز محاسبات مشخص شده در ثبت نام انتقال سطح طراحی سخت افزار و مدار منطقه هزینه خواهد بود که متحمل شده توسط آموزش واکشی و رمزگشایی مراحل را می‌توان اصلاح قرار داده و به دیگر استفاده می‌کند.

این احیا موجب صرفه جویی در زمان، انرژی و مدار در محاسبات می‌شود. منابع بازیافت شده را می‌توان برای افزایش محاسبات موازی، توابع دیگر، ارتباطات یا حافظه، و نیز افزایش توانایی ورودی / خروجی استفاده کرد. این در هزینه فرصت کمتری برای ابزار کلی وجود دارد.

### در حال ظهور سخت افزار معماری
سفارشی سازی RTLهای بزرگ از ساختارهای سخت افزاری، معماری‌های جدیدی مانند محاسبات حافظه درونی، معماری های مجهز به حمل و نقل (TTA) و شبکه‌های درون تراشه (NoC) را فراهم می‌کند تا از موقعیت مکانی افزایش یافته و در نتیجه کاهش محاسبات و ارتباطات زمان تأخیر بین ماژول و کاربردی واحدرا به همراه دارد.

سخت افزار سفارشی محدودیت در قابلیت پردازش موازی تنها توسط منطقه و بلوک‌های منطق موجود در مدار یکپارچه است. بنابراین، سخت افزار بسیار راحت‌تر برای ارائه موازی عظیم نسبت به نرم‌افزار در پردازنده‌های عمومی می‌باشد، که امکان اجرای مدل موقت تصادفی (PRAM) را فراهم می‌کند.

روش مرسوم برای ساخت چندین هسته و چند هسته ای پردازش واحد از نقشه‌ها هسته ریزپردازنده IP در FPGA یک یا ASICاست. به‌طور مشابه، واحدهای عملیاتی ویژه می‌توانند به صورت موازی در پردازش سیگنال دیجیتالی بدون درج در هسته پردازشگر IP قرار بگیرند؛ بنابراین، شتاب دهنده سخت افزاری اغلب برای کارهای تکراری و ثابت که شامل شاخه‌های شرطی کمی هستند، به ویژه در مقادیر زیادی از داده‌ها مورد استفاده قرار می‌گیرد. این نحوه استفاده از GPUهای CUDA Nvidia است.

### معیارهای پیاده‌سازی
با افزایش قابلیت تحرک دستگاه، عملکرد نسبی پروتکل‌های شتاب مخصوص نیازمند معیارهای جدید است، با توجه به ویژگی‌های مانند ابعاد، سخت افزار فیزیکی، مصرف برق و عملیات عملیاتی آن‌ها را می‌توان به سه دسته تقسیم کرد: کارایی کار، بهره‌وری پیاده‌سازی، و انعطاف‌پذیری. معیارهای مناسب، مساحت سخت افزار را همراه با عملیات مربوط به عملیات مربوطه و انرژی مصرف شده در نظر می‌گیرند.

## نمونه کارهای شتاب دهنده
### جمع دو آرایه در یک آرایه دیگر
### مجموع یک میلیون عدد صحیح
فرض کنید ما مایل به محاسبه مجموع 2^{20} = 1,048,576 اعداد صحیح هستیم. فرض کنید اعداد صحیح بزرگ با عنوان `bignum` در دسترس هستند که به اندازه کافی بزرگند، برای نگهداری مجموع این اعداد می‌توان با کمک نرم‌افزار (در C++)آن را محاسبه نمود:
```c++
constexpr int N = 20;
constexpr int two_to_the_N = 1 <<N;

bignum array_sum(const std::array<int, two_to_the_N>& ints) {
    bignum result = 0;
    for (std::size_t i = 0; i <two_to_the_N; i++) {
        result += ints[i];
    }
    return result;
}
```
این الگوریتم در زمان خطیهای \mathcal{O}\left(n\right) در نماد O بزرگ اجرا می‌شود. در سخت افزار این عملیات در تراشه به صورت موازی تنها در ۲۰ مرحله با استفاده از پیشوند مجموع الگوریتم محاسبه می‌شود. این الگوریتمدارای پیچیدگی زمانی لگاریتمی \mathcal{O}\left(\log{n}\right)و \mathcal{O}\left(1\right)است:
```systemverilog
parameter int N = 20;
parameter int two_to_the_N = 1 <<N;

function int array_sum;
    input int array[two_to_the_N];
    begin
        for (genvar i = 0; i <N; i++) begin
            for (genvar j = 0; j <two_to_the_N; j++) begin
                if (j>= (1 <<i)) begin
                    array[j] = array[j] + array[j - (1 <<i)];
                end
            end
        end
        return array[two_to_the_N - 1];
    end
endfunction
```
 این مثال مزایای استفاده از منابع موازی بیشتر در سختافزارهای کاربردی خاص را در مقایسه با اکثر نرم‌افزارها و پارادایمهای رایج عمومی و معماری به کار می‌برد.

### پردازش جریان
شتاب دهنده سخت افزاری را می‌توان برای پردازش جریان استفاده کرد.

## برنامه‌های کاربردی
نمونه‌هایی از شتاب سخت افزاری شامل بیت blit شتاب عملکرد در واحد پردازش گرافیکی (gpuها) با استفاده از memristors برای شتاب شبکه‌های عصبی و عبارت منظم شتاب سخت افزاری برای دادن کنترل در سرور صنعت در نظر گرفته شده برای جلوگیری از به‌طور منظم بیان محرومیت از خدمات (ReDoS) حملات. سخت افزاری است که انجام شتاب ممکن است بخشی از یک منظوره CPU یا واحد جداگانه است. در مورد دوم آن است که به عنوان یک **شتاب دهنده سخت‌افزار**و یا بیشتر به‌طور خاص به عنوان یک 3D شتاب دهندههای رمزنگاری شتاب دهنده،

به‌طور سنتی، پردازنده‌ها متوالی بودند (دستورالعمل‌ها به صورت یکجا اجرا می‌شوند) و برای اجرای الگوریتم‌های هدف کلی، کنترل شده با استفاده از دستورالعمل فکتوری (fetch) (به عنوان مثال نتایج موقت حرکت به درون و از یک فایل رجیستر) طراحی شده‌اند. شتاب دهنده سخت افزار با اجازه دادن بیشتر برای بهبود اجرای یک الگوریتم خاص همزمانی، داشتن خاص مسیر داده برای خود متغیرهای موقت و کاهش سربار کنترل آموزش در واکشی رمزگشایی-چرخه اجرا عمل می‌کنند.

پردازنده‌های مدرن چند هسته ای و اغلب ویژگی‌های موازی «یک دستور العملی با داده‌های متعدد» با واحدی به نام (SIMD) هستند. همچنان شتاب دهنده‌های سخت افزاری بازدهی دارند.. شتاب دهنده‌های سخت افزاری مناسب برای هر گونه محاسبات برای فشرده سازی الگوریتم‌ها هستند که اغلب در یک کار یا برنامه اجرا می‌شوند. بسته به چند قسمتی بودن، شتاب دهنده‌های سخت افزاری می‌تواند از یک واحد کارکردی زیادی به عملکرد بلوک (مثل motion estimation در MPEG-2) با هم متفاوت باشد.

## واحدهای شتاب دهنده سخت افزاری توسط نرم‌افزار

## جستارهای وابسته
* دسترسی مستقیم به حافظه (DMA)
* طبقه‌بندی فلین‌ها
* دستورالعمل تک، اطلاعات چندگانه (SIMD)
* دستورالعمل‌های چندگانه، چندین داده (MIMD)

## منابع

رده:آرایه‌های دریچه‌ای
رده:بهینه‌سازی رایانه
رده:سخت‌افزارهای گرافیک
رده:شتاب‌دهنده سخت‌افزاری
رده:صفحات با ترجمه بازبینی‌نشده
رده:مدارهای مجتمع با کاربرد خاص
رده:واحد پردازشگر مرکزی