کمک‌پردازنده

هم‌پردازنده  یا کمک پردازنده، پردازشگری کامپیوتری است که به تکمیل وظایف پردازندهٔ اولیه (CPU) کمک می‌کند. عملیاتی که توسط کمک پردازنده، انجام می‌شوند، ممکن است از نوع: محاسبات شناور، گرافیک، پردازش سیگنال، پردازش رشته‌های متنی، رمزنگاری یا رابط‌کاربری  I / O با دستگاه‌های جانبی باشند. کمک پردازنده‌ها می‌توانند باعث تسریع عملکرد سیستم در وظایفی شوند که بار پردازشی بالایی را بر روی پردازنده اصلی، وارد می‌کنند. کمک پردازنده امکان سفارشی‌سازی کامپیوترها را فراهم می‌کند، ازاین‌رو دیگر لازم نیست تا مشتریان برای عملکرد بالاتر، هزینهٔ اضافی پرداخت کنند.

 عملکرد 
کمک پردازنده‌ها دارای درجهٔ متفاوتی از خودمختاری هستند. اساس کار برخی از آنها (مانند FPU‌ها) بر روی کنترل مستقیم بوسیلهٔ دستورالعمل‌های کمک پردازنده است، که این دستورالعمل‌ها درون جریان دستورالعمل CPU تعبیه شده‌اند. برخی دیگر نیز شامل پردازنده‌های مستقلی هستند که قادر هستند تا به‌صورت همگام، کار کنند، آنها هنوز برای همه‌منظوره، بهینه نشده‌اند، یا قادر به انجام مجموعه دستورالعملهای محدود در وظایف تسریع کننده نیستند. این کمک پردازنده‌ها از دسترسی مستقیم به حافظه (DMA)در کنار پردازندهٔ میزبان استفاده می‌کنند که پردازنده میزبان بر روی لیستی از دستورها، ایجاد شده‌است. موتور احساس پلی استیشن ۲ (Emotion PlayStation 2)حاوی واحد بردار SIMD شبه-DSP است که قادر به انجام هردو حالت عملیات است

 تاریخچه 
کامپیوتر بزرگ رایانه (Main Frame) برای استفادهٔ بهتر از زمان پردازنده رایانه اصلی، وظایف ورودی/خروجی را به سیستم‌های جداگانه‌ای تحت عنوان کانال I/O واگذار کرد. بزرگ رایانه به هیچ‌گونه پردازش I/O نیازی ندارد، درعوض از مجموعه‌ای از پارامترها برای هریک از عملیات ورودی یا خروجی استفاده می‌کند و سپس به کانال پردازنده، سیگنالی را ارسال می‌کند تا کل عملیات را به آن کانال، واگذار کند. با اختصاص پردازنده‌های فرعی برای مدیریت فرمت‌دهی و پردازش عملیات I/O زمان‌بر، عملکرد سیستم، بهبود یافت.

کمک پردازنده‌ها ابتدا در دههٔ ۱۹۷۰، برای عملیات محاسبات ممیز شناور در رایانه‌های رومیزی استفاده شدند و در دههٔ ۱۹۸۰ و اوایل ۱۹۹۰ رواج بیشتری یافتند. پردازنده‌های ۸-بیت و ۱۶ بیت قدیمی از نرم‌افزار برای انجام عملیات محاسبات ممیز شناور، بهره می‌گرفتند. وقتی استفاده از کمک پردازنده‌ها در این زمینه، رایج شد، سرعت انجام محاسبات ممیز شناور، بیشتر شد. کمک پردازنده‌های محاسباتی، گزینهٔ محبوبی برای کاربرانی شدند که از نرم‌افزارهای طراحی رایانهای (CAD) و محاسبات مهندسی و علمی، استفاده می‌کردند. برخی از واحدهای ممیز شناور مانند AMD ۹۵۱۱، Intel ۸۲۳۱/۸۲۳۲ و Weitek FUP بعنوان دستگاه‌های جانبی، مطرح شدند، درحالیکه سایرین مانند: Intel 8087، موتورلا (بزرگ رایانه) (Motorola ۶۸۸۸۱)۶۸۸۸۱ و National ۳۲۰۸۱ دارای یکپارچگی بیشتری با CPU بودند.

دیگر نوع کمک پردازنده‌ها، کمک پردازندهٔ نمایش ویدئو بود که در کامپیوترهای خانگی: در خانواده ۸ بیتی Atari, Texas Instrument TI-99 / 4A و MSX تحت عنوان «کنترل نمایشگر ویدیو» استفاده شد. . چیپست سفارشیCommodore Amiga جزو چنین کمک پردازنده‌هایی بود که به کوپر(Copper) مشهور شد و همچنین بلیتتر(Blitter)که برای تسریع دستکاری‌های بیت‌مپ(Bitmap) در حافظه، استفاده شد.

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

 اینتل 
چپ|بندانگشتی| ریزمعماری i8087 و i80287
چپ|بندانگشتی| ریزمعماری i80387
رایانه‌های شخصی اصلی IBM شامل سوکتی (موسوم به FPU) برای کمک پردازندهٔ ممیز  شناور Intel 8087 است، که گزینهٔ محبوبی برای افرادی است که از برنامه‌های طراحی کامپیوتری یا محاسبات حجیم در رایانه‌های شخصی، استفاده می‌کنند. در این معماری، کمک پردازنده به تسریع محاسب ممیز شناور تا پنجاه‌برابر، کمک می‌کند. کاربرانی که از رایانه‌های شخصی تنها برای پردازش کلمات، استفاده می‌کنند، هزینهٔ زیادی را در کمک پردازنده‌ها صرفه‌جویی می‌توانند بکنند، چرا که کمک پردازنده‌ها کمکی به افزایش عملیات دستکاری متن، نمی‌کنند.

۸۰۸۷ با 8086/8088 دارای یکپارچگی بالایی درکدهای عملیاتی ماشین ممیز شناور هستند که در جریان دستورالعمل‌های ۸۰۸۸ درج شده‌اند. هر پردازندهٔ ۸۰۸۸ بدون ۸۰۸۷ قادر به تفسیر این دستورالعمل‌ها نیست و به نسخهٔ جداگانه‌ای از برنامه‌های FPU و سیستم‌های غیر FPU نیاز دارد یا حداقل به واحدی برای تست در زمان اجرا دارد تا FPU را تشخیص داده و توابع کتابخانه‌ای محاسباتی مناسبی را انتخاب کند
چپ|بندانگشتی| CPU 80386DX اینتل با پردازنده ریاضی 80387DX
دیگر کمک پردازنده برای پردازندهٔ مرکزی ۸۰۸۶/۸۰۸۸ کمک پردازندهٔ ورودی/خروجی 8089 است. این کمک پردازنده از تکنیک برنامه‌نویسی یکسانی با ۸۰۸۷ برای عملیات ورودی/خروجی استفاده می‌کند، برای مثال در انتقال داده از حافظه به دستگاه جانبی. به اینصورت باعث کاهش بار CPU می‌شود. اما IBM از طراحی IBM رایانه‌های شخصی استفاده نمی‌کند و اینتل، توسعهٔ این نوع کمک پردازنده را متوقف کرده‌است.

ریزپردازنده Intel 80386از کمک پردازندهٔ محاسباتی اختیاری (۸۰۳۸۷) برای انجام عملیات ممیز شناور به‌صورت مستقیم در سخت‌افزار استفاده می‌کند. پردازندهٔ Intel 80486DX دارای سخت‌افزار ممیز شناور بر روی چیپ خود است. 80486SX پردازشگر نسبتاً ارزان اینتل است که هیچ نوع سخت‌افزار ممیز شناوری ندارد و همچنین کمک پردازندهٔ 80487SX در کنار آن فروخته می‌شود و این کمک پردازنده با استفاده از مجموعه‌ای از اتصالات پین، تکمیل‌کنندهٔ پردازندهٔ اصلی 80486DX است، همچنین در حین نصب کمک‌پردازنده، پردازندهٔ اصلی، غیرفعال می‌شود.Scott Mueller, Upgrading and repairing PCs  15th edition, Que Publishing, 2003 , pages 108–110

پردازنده‌های اینتل پس از ۸۰۴۸۶ سخت‌افزار ممیز شناور را با چیپ پردازندهٔ اصلی، یکپارچه کردند. پیشرفتها در یکپارچه‌سازی، هزینهٔ فروش پردازشگر ممیز شناور را بعنوان عنصری اختیاری، حذف کرد. تطابق با تکنیک‌های برد-مدار با سرعت موردنیاز 75MHz در پردازنده، سخت بود، مخصوصاً اینکه بایستی به تأمین مواردی چون: تأخیر زمانی، مصرف برق و فرکانس رادیویی استاندارد موردنیاز در سرعت کلاک در محدودهٔ گیگاهرتز نیز توجه می‌شد. این پردازنده‌های ممیز شناور روی-چیپ هنوز بعنوان کمک پردازنده، مورد استفاده هستند، چرا که قادر به عملکرد موازی با CPU اصلی هستند

Weitek دیگر نوع رایج برای کمک پردازنده‌های ممیز شناور در دوران استفاده از کامپیوترهای رومیزی ۸-بیت و ۱۶-بیتی بود. این کمک پردازنده‌ها دارای مجموعه دستورالعمل‌های متفاوتی نسبت به کمک پردازنده‌های اینتل بودند و سوکت متفاوتی را استفاده می‌کردند که در تمام بردهای اصلی پشتیبانی نمی‌شد. پردازنده‌های Weitek مانند خانوادهٔ intel x87 توابع محاسباتی غیرجبری (برای مثال توابع مثلثاتی) را پشتیبانی نمی‌کردند و به کتابخانه‌های نرم‌افزاری مخصوصی بمنظور پشتیبانی از این توابع، نیاز داشتند.Scott Mueller, Upgrading and Repairing PCs, Second Edition, Que Publishing, 1992 , pp. 412-413

 موتورولا 
خانوادهٔ موتورولا ۶۸۰۰۰ دارای کمک پردازنده‌های 68881/68882بودند که باعث تسریع سرعت ممیز شناور مشابهی با پردازندهای اینتل می‌شدند. کامپیوترهایی که از خانوادهٔ ۶۸۰۰۰ استفاده می‌کردند اما با سخت‌افزار پردازندهٔ ممیز شناور، مجهز نبودند، می‌توانستند از دستورالعمل‌های ممیز شناور در نرم‌افزار خود تقلید کرده و استفاده کنند. این دستورالعمل‌ها دارای سرعت پایینی بودند و نسخهٔ باینری از برنامه را برای هر دو مورد، توزیع می‌کردند. کمک پردازندهٔ مدیریت حافظهٔ ۶۸۴۵۱ برای کار با پردازندهٔ ۶۸۰۲۰ طراحی شده‌بود.William Ford, William R. Topp
Assembly language and systems programming for the M68000 family Jones & Bartlett Learning, 1992  page 892 and ff.

 کمک پردازنده‌های مدرن 
از سال ۲۰۰۱، واحدهای پردازش گرافیک (GPU) به شکل کارت‌های گرافیک، رایج شدند. مدل‌های معینی از کارت‌های صوتی با پردازنده‌های اختصاصی، متناسب شدند تا ترکیب چند کانالی دیجیتال و اثرات بیدرنگ DSP را تا اوایل ۱۹۹۰ الی ۱۹۹۴ ارائه کردند (گراویس اولتراسوند (Gravis Ultrasound) و ساند بلستر (Sound Blaster AWE32) دو نمونه از اینها هستند). درحالیکه ساند بلستر آئودیگی (Sound Blaster Audigy)

و ساند بلستر X-Fi

(Sound Blaster X-Fi) دو نمونهٔ اخیر هستند.

در سال ۲۰۰۶، AGEIA کارت افزودنی را برای کامپیوترها، معرفی کرد که PhysX PPU نامیده می‌شد. PhsyX برای انجام محاسبات فیزیکی پیچیده، طراحی شده‌بود و در این کارت، CPU و GPU نیازی نبود تا درگیر محاسبات زمان‌بر شوند. این کارت برای بازی‌های ویدئویی، طراحی شده‌بود و هرچند محاسباتی نیز از تئوری، قابلیت انجام دیگر کارهای محاسباتی را نیز داشت. در سال ۲۰۰۸، انودیایا (Nvidia) کمپانی را خرید و خط تولید کارت PhysX را از رده خارج کرد و وظیفه‌مندی نرم‌افزاری را به GPU افزود تا قادر به رندر PhysX بر روی هسته به‌صورت نرمال باشد و در پردازش گرافیک، مورد استفاده قرار بگیرد و از نرم‌افزار مونور انویدیا PhysX Nvidia) PhysX) استفاده می‌کرد.

در سال ۲۰۰۶، سیستم‌های بیگ فوت (BigFoot) کارت افزودنی PCI را معرفی کردند که KillerNIC نام گرفت و کرنل لینوکس مختص خود را بر روی PowerQUICC به‌صورت مقیاس آزاد و بر روی 400 MHz اجرا می‌کرد و چیپ مقیاس آزاد بر روی واحد پردازش شبکه یا NPU نام داشت.

موتور اسپروس (SpursEngine) کارت افزودنی مبتنی بر رسانه است که دارای کمک پردازنده‌ای بر روی ریزمعماری سلولی است. SPU‌ها دارای کمک پردازنده‌های برداری خود هستند.

در سال ۲۰۰۸، گروه با نامKhronos یک OpenCLخود را با هدف پشتیبانی از CPUهای کاربرد عمومی، ATI/AMD و GPUهای انویدیا (و دیگر تسریع‌کننده‌ها) ارائه کرد که دارای زبان مشترک منفردی برای هسته‌های محاسباتی بودند.

در سال ۲۰۱۰، برخی دستگاه‌های محاسبات سیار، هاب حسگر ی را بعنوان کمک پردازنده، پیاده‌سازی کردند. نمونه‌هایی از کمک پردازندها برای مدیریت یکپارچه‌سازی حسگر در دستگاه‌های سیار از جمله کمک پردازنده‌های حرکتی اَپل (Apple M7) و M8، هسته حسگر Qualcomm Snapdragon Sensor Coreو Qualcomm Hexagon و واحد پردازش هولوگرافی برای هولولنزهای میکروسافت (Microsoft HoloLens) استفاده شد.

در سال ۲۰۱۲، اینتلکمک پردازندهٔ Intel Xeon Phi را معرفی کرد.

تا سال ۲۰۱۶، شرکت‌های مختلفی، کمک پردازنده‌هایی را توسعه دادند که هدف آنها تسریع شبکه‌های عصبی مصنوعی برای وظایف بینایی و دیگر وظایف شناختی بود (مثلاً واحدهای پردازش بینایی، ترونورتس (TrueNorth) و زئروتس(Zeroth)) و تا سال ۲۰۱۸، تراشه‌های دارای هوش مصنوعی برای گوشی‌های هوشمند مانند اَپل و چندین فروشندهٔ گوشی‌های اندروید، تولید شد.

 سایر کمک پردازنده‌ها 
 معماری MIPS از چهار واحد کمک پردازنده، پشتیبانی می‌کند که برای مدیریت حافظه، محاسبات ممیز شناور استفاده می‌شوند و دو کمک پردازندهٔ تعریف نشده را برای دیگر وظایف مانند تسریع عملیات گرافیکی، استفاده می‌شود.Erin Farquhar, Philip Bunce, The MIPS programmer's handbook, Morgan Kaufmann, 1994 , appendix A3 page 330
 با استفاده از FPGA (آرایه دروازه برنامه‌پذیر در محل) کمک پردازنده‌های سفارشی را می‌توان برای تسریع وظایف خاص پردازشی مانند پردازش سیگنال دیجیتال طراحی کرد (برای مثال، Zynq، ترکیب هستهٔ ARM با FPGA بر روی واحد منفرد).
 شتاب‌دهنده‌های TLS / SSL، استفاده شده بر روی سرورها، مانند شتاب‌دهنده‌های مورد استفاده در کارت‌ها، اما در دورهٔ مدرن، دستورالعمل‌هایی برای رمزگذاری و جریان اصلی CPUها هستند.
 برخی تراشه‌های چند هسته ای را می‌توان به گونه ای برنامه‌ریزی کرد که یکی از پردازنده‌های آنها پردازنده اصلی باشد و سایر پردازنده‌ها از کمک پردازنده‌های دیگر پشتیبانی کنند.
 کمک پردازندهٔ PCI-e ماتریس ۲۰۰۰ (Matrix ۲۰۰۰) چین با ۱۲۸ هسته، تسریع‌کننده‌ای اختصاصی است که برای اجرا به CPU احتیاج دارد و در ارتقای ۱۷۷۹۲ گره سوپرکامپیوتر تیانهه-۲ (Tianhe-2) استفاده شده‌است (۲ پل Knights اینتل + ۲ ماتریس ۲۰۰ برای هریک)، اکنون در 2A دوبرابر شده‌است، که منجر به دو برابر کردن سرعت آن در ۹۵ پتافلوپس (petaflops)منجر شد و ازسریعترین ابر رایانه جهان نیز بالاتر رفت.
 دسته‌ای از کمک پردازنده‌ها برای کامپیوترهای آکورن BBC Micro، موجود هستند. این کمک پردازنده‌ها به جای کمک به پردازش‌های خاص گرافیکی یا کار بعنوان دستگاه‌های محاسباتی، به کمک CPUهای کاربرد عمومی می‌آیند (مانند ۸۰۸۶، زیلوگ (Z80 (Zilog یا ۶۵۰۲) و نوع خاصی از وظایف اختصاصی توسط سیستم‌عامل را انجام می‌دهند و بار CPU اصلی را کاسته و سرعت آن را افزایش می‌دهند. بعلاوه، BBC میکرو، به کمک پردازنده‌ای مجهز است که قادر به اجرای نرم‌افزار کد ماشین طراحی‌شده برای سایر سیستم‌ها است، ازجمله: CP/M و داس (DoS) که برای پردازنده‌های ۸۰۸۶ نوشته شده‌اند

 روندها 
در طول زمان، CPU رشد کردند که وظیفه‌مندی اغلب کمک پردازنده‌ها را جذب کردند. درحال‌حاضر، FPUها، قسمت یکپارچه‌ای از خط‌لولهٔ اصلی پردازنده هستند، واحدهای SIMD باعث تسریع رسانه می‌شوند و نقش کارت‌های تسریع مختلف DSP را به عهده می‌گیرند و حتی GPUsها با CPU یکپارچه شده‌اند. بااین‌وجود، واحدهای اختصاصی هنوز دارای محبوبیت خود در بین ماشین‌های رومیزی هستند و به خاطر داشتن قدرت بیشتر، امکان دارد به روند تکاملی خود به‌صورت مستقل از پردازنده، ادامه دهند.

 جستارهای وابسته 
 چندپردازشی، استفاده از دو یا چند CPU درون سیستم کامپیوتری منفرد
 توررنزا (Torrenza)، نوآوری در پیاده‌سازی کمک پردازنده برای پشتیبانی از پردازنده‌های AMD
 چارچوب اوپن سی‌ال (OpenCL) برای نوشتن برنامه‌هایی که قادر به اجرای پلتفرم‌های غیرهمگن هستند.
 چندپردازشی غیرهمگام
 شتاب‌دهنده هوش مصنوعی

 منابع 

رده:واحد پردازشگر مرکزی