واحد پردازش گرافیکی
واحد پردازش گرافیکی (نماپردازنده یا نماپردازشگر) یا به اختصار GPU ابزاری اختصاصی برای رندر کردن گرافیکی (به‌طور طبیعی به نظر رسیدن تصویر) در کامپیوترهای شخصی، ایستگاه‌های کاری، یا در کنسول‌های بازی است. این واحد گاهی اوقات "واحد پردازش بصری" یا VPU نیز نامیده می‌شود. ویژگی‌های واحدهای پردازش گرافیکی جدید برای پردازش و ارائه دادن کارهای دیداری (گرافیکی)، آن‌ها را بسیار کارآمدتر از واحدهای پردازش مرکزی یا CPU در پردازش الگوریتم‌های پیچیده کرده‌است.
در واقع واحد پردازش گرافیکی همانند واحد پردازش مرکزی در کامپیوتر است ولی وظیفه اصلی آن پردازش اطلاعات مرتبط با تصاویر است. یک GPU معمولاً بر روی کارت‌های گرافیکی قرار می‌گیرد، اگرچه کارت‌های گرافیکی غیر حرفه‌ای مستقیماً بر روی بُرد مادر به صورت (OnBoard) قرار می‌گیرند. GPU ابزاری است شامل تعدادی عملگر ابتدایی گرافیکی، که باعث می‌شود نسبت به CPU در خلق تصاویر بر صفحه نمایشگر بسیار سریعتر عمل کنند.
رایج‌ترین عملگرها برای گرافیک دو بعدی کامپیوترها شامل عملگر بیت بلیت است که معمولاً در سخت‌افزارهای مخصوص یک "Biltter" نامیده می‌شود. این عملگرها برای کشیدن مستطیل، مثلث، دایره و قوس بکار می‌روند. پردازنده‌های گرافیکی جدید، پردازش گرافیک سه بعدی را نیز در رایانه‌ها انجام می‌دهند.
تراشه‌های ANTIC و CTIA امکان کنترل سخت‌افزاری حالات گرافیکی و متنی و سایر تأثیرات را بر روی آتاری 8-بیتی را فراهم می‌کردند. تراشه ANTIC پردازشگری مخصوص برای نگاشت (در حالت برنامه نویسی) متن و دادهٔ گرافیکی به خروجی تصویری بود. طراح تراشه ANTIC جی مینر، طراحی تراشهٔ گرافیکی را برای کمودور آمیگا نیز بر عهده داشت.
شاید بتوان ایده اولیه شکل‌گیری مفهوم GPU را به دهه ۸۰ و کومودور آمیگا نسبت داد. این کامپیوتر اولین دستگاهی بود که با یک واحد پردازش گرافیکی استاندارد ارائه می‌شد و از ویژگی‌های گرافیکی قابل ملاحظه‌ای در زمان خود بهره می‌برد. در همین دهه و در سال ۱۹۸۷ کمپانی Texas Instrument اولین ریزپردازنده دارای قابلیت‌های گرافیکی را با نام TMS34010 ارائه کرد.
در دهه ۹۰ روند رشد کارت‌های گرافیکی و پردازنده‌های دارای قابلیت‌های گرافیکی به شکل روزافزونی پیش رفت و برای اولین بار پردازنده‌ها و کارت‌های گرافیکی با قابلیت رندر تصاویر و ویدیوهای سه‌بعدی ارائه شدند. ولی نقطه آغاز آنچه که امروز آن را GPU می‌نامیم به سال ۱۹۹۹ و محصول متفاوت کمپانی انویدیا باز می‌گردد.
Nvidia GeForce 256 (که به آن NV10 نیز می‌گویند) اولین کارت گرافیک تجاری بود که توانست قابلیت‌های سه‌بعدی و انتقال و نوردهی را در یک سخت‌افزار تجاری برای مصرف‌کننده ارائه دهد و از آنجا که بعدها قابلیت سایه‌زنی پیکسلی و برداری به آن اضافه شد، بسیار انعطاف‌پذیرتر و قابل‌برنامه‌ریزی‌تر از کارت‌های گرافیکی سه‌بعدی هم‌دوره خود بود.
پس از ارائه NV10 و با وجود رابط برنامه‌ای چون OpenGL و قابلیت‌های مشابه آن در دیرکت‌اکس، مسیر رشد پردازنده‌های گرافیکی به سمت قابلیت‌های بیشتر برنامه‌پذیری پیش می‌رفت. پردازش هر پیکسل توسط یک برنامه کوتاه که ورودی‌های آن بافت تصویر را مشخص می‌کرد، امکان‌پذیر بود و هر شکل هندسی پیش از آنکه بر روی نمایشگر پدیدار شود، می‌توانست توسط یک برنامه کوتاه به شکل دلخواه پردازش گردد. انویدیا نسخه جدیدتر GPU خود را با نام Geforce 3 یا NV20 وارد بازار کرد که اولین پردازنده گرافیکی مجهز به قابلیت سایه‌زنی برنامه‌پذیر بود. اما در اکتبر ۲۰۰۲ کمپانی رقیب انویدیا یعنی ATI محصول جدیدی به نام Radeon 9700 یا R300 را معرفی کرد که اولین پردازنده گرافیکی مبتنی بر Direct3D 9.0 در دنیا بود. سایه‌زن‌های پیکسل و شکل این پردازنده گرافیکی، قادر بودند محاسبات ممیز شناور طولانی و حلقوی را پیاده‌سازی نمایند و به سرعت، انعطاف‌پذیری در حد یک CPU را پیدا کردند. سایه‌زنی پیکسل معمولاً در مواردی چون ایجاد پستی و بلندی بر روی سطح اجسام (Bump Mapping) کاربرد دارد که منجر به ایجاد یک بافت بر روی یک شکل می‌گردد تا آن جسم براق، کدر، زبر، صاف یا حتی کنده‌کاری شده به نظر برسد.
با معرفی سری 8 GeForce، پردازنده‌های گرافیکی به دستگاه‌های محاسباتی عمومی‌تری تبدیل شدند. امروزه GPUهای موازی در مقابل CPUها قد علم کرده‌اند و به همین دلیل یکی از زمینه‌های پژوهشی مهم کنونی، یعنی GPUهای همه‌منظوره یا (رایانش و محاسبات عمومی بر روی GPU) توانسته در بسیاری از حوزه‌ها مثل فراگیری ماشین (یادگیری ماشین)، هوش مصنوعی، اکتشاف نفت، پردازش تصویر، جبر خطی، آمار، بازسازی سه‌بعدی و حتی تعیین قیمت در بازار سهام، به یکی از پرکاربردترین زمینه‌های تحقیقاتی و صنعتی تبدیل گردد. پلتفرم کودا (زبان برنامه‌نویسی) که شرکت انویدیا آن را توسعه داده است، یکی از قدیمی‌ترین مدل‌های برنامه‌نویسی موازی برای GPU است که از OpenCL نیز پشتیبانی می‌کند. OpenCL یک استاندارد آزاد است که توسط گروه Khronos تعیین گردیده است. OpenCL توسط اینتل، AMD، انویدیا و ARM پشتیبانی می‌شود و پرطرفدارترین پلتفرم‌های توسعه GPGPU در ایالات متحده و منطقه آسیا-اقیانوسیه است.
کمپانی‌های بسیاری در زمینه تولید GPU فعالند. در سال ۲۰۰۸، اینتل، انویدیا و AMD/ATI به ترتیب با ۴۹.۵٪ و ۲۷.۸٪ و ۲۰.۶٪ از سهم بازار در صدر تولیدکنندگان GPU بودند. البته در این آمار، پردازنده‌های گرافیکی مجتمع با CPU اینتل نیز محاسبه شده‌اند. اگر آن‌ها را در نظر نگیریم، انویدیا و ATI تقریباً کل بازار را در اختیار دارند. دو شرکت کوچکتر S3 Graphics و Matrox نیز به تولید GPU می‌پردازند.
پردازنده‌های گرافیکی مدرن از بیشتر قدرت خود برای محاسبات مربوط به گرافیک سه‌بعدی در کامپیوتر بهره می‌برند. پیشرفت‌های اخیر در GPUها باعث شده تا بتوانند از سایه‌زن‌های قابل‌برنامه‌ریزی بهره گیرند. بدین ترتیب با استفاده از این ویژگی می‌توان تصاویر را در سطح هندسی و بافت دستکاری نمود. از آنجا که بیشتر این محاسبات نیاز به محاسبات ماتریسی و برداری دارند، مهندسین و دانشمندان مطالعات خود بر روی کاربردهای غیرگرافیکی GPU را افزایش داده‌اند. یک نمونه از کاربردهای غیرگرافیکی پردازنده گرافیکی، تولید بیت‌کوین است، که برای حل معماها از یک واحد پردازش گرافیکی استفاده می‌گردد.
بیشتر GPUهای تولید شده از سال ۱۹۹۵ تاکنون از فواصل رنگی YUV که برای پخش ویدئوهای دیجیتالی بسیار مهم است، پشتیبانی می‌کنند، و بسیاری از GPUهای تولید شده از سال ۲۰۰۰ نیز از فرمت‌های MPEG پشتیبانی می‌کنند. این روند رمزگشایی ویدئو توسط سخت‌افزار که از دوبخش رمزگشایی و پردازش ویدئو تشکیل شده و توسط یک GPU انجام می‌گیرد را «رمزگشایی ویدئو توسط GPU» یا «رمزگشایی سخت‌افزاری ویدئو با GPU» می‌نامند.
کارت‌های گرافیکی جدیدتر حتی می‌توانند ویدئوهای کیفیت بالای HD را نیز به صورت سخت‌افزاری بر روی خود کارت رمزگشایی نمایند، تا پردازنده درگیر آن نشود. مهم‌ترین APIها برای رمزگشایی ویدئو با GPU عبارتند از DxVA برای سیستم‌عامل مایکروسافت ویندوز، VDPAU، VAAPI، XvMC و XvBA برای لینوکس و سیستم‌عامل‌های مبتنی بر یونیکس. همه این رابط‌ها به غیر از XvMC قادرند ویدئوهای رمزگذاری شده با فرمت‌های MPEG-1، MPEG-2، MPEG-4 ASP، H.264 یا DivX 6، VC-1، WMV، Xvid و DivX 5 را رمزگشایی کنند.
روند رمزگشایی فرمت‌های ویدئویی به وسیله GPU به صورت زیر است:
پردازنده‌های گرافیکی بسیار قدرتمند معمولاً به‌طور جداگانه تهیه شده و بوسیله یک درگاه اختصاصی مثل پی‌سی‌آی اکس‌پرس یا AGP یا HDMI به بورد اصلی متصل می‌شوند. بدین ترتیب به راحتی می‌توان آن‌ها را تعویض نموده یا در صورتی که مادربورد از مدل‌های جدیدتر پشتیبانی کند آن‌ها را ارتقا داد.
یک پردازنده گرافیکی اختصاصی لزوماً جداشدنی نیست و حتی می‌تواند از طریق درگاه‌های دیگری به غیر از موارد استاندارد مذکور به بورد اصلی متصل گردد. کلمه «اختصاصی» برای این استفاده می‌شود که در این نوع GPUها یک حافظه RAM اختصاصی برای استفاده کارت گرافیک در نظر گرفته شده‌است. البته اکثر پردازنده‌های گرافیکی اختصاصی جداشدنی و قابل تعویضند. در کامپیوترهای شخصی کوچکتر مثل لپ‌تاپ‌ها معمولاً برای اتصال GPU اختصاصی به بورد اصلی از رابط‌های غیر استاندارد استفاده می‌شود تا حجم کمتری اشغال کنند، ولی اغلب آن‌ها با وجود تفاوتی که در شکل و اندازه دارند از همان منطق ارتباطی PCIe و AGP بهره می‌برند.
فناوری‌هایی چون انویدیا و کمپانی ATI این امکان را فراهم می‌کنند که بتوان برای ترسیم یک تصویر از چند GPU بهره برد. این کار به معنای استفاده حداکثر از قدرت پردازشی GPU برای کارهای گرافیکی است.
پردازنده‌های گرافیکی مجتمع یا مشترک (IGP) از بخشی از حافظه RAM کامپیوتر برای محاسبات خود استفاده می‌کند و دیگر مثل پردازنده‌های گرافیکی اختصاصی به یک حافظه RAM جداگانه مجهز نیست. اکثر این نوع پردازنده‌های گرافیکی به صورت مجتمع با بورد اصلی ارائه می‌شوند. البته در APUها از این هم فراتر می‌روند و در داخل خود CPU ساخته می‌شوند. امروزه ۹۰٪ کامپیوترها مجهز به پردازنده گرافیکی مجتمع هستند. این نوع پردازنده‌های گرافیکی نسبت به نوع اختصاصی باعث کاهش هزینه سیستم می‌شوند ولی از سویی قابلیت‌های آن‌ها نیز کمتر است. سابقاً این نوع GPUها در اجرای بازی‌های سه‌بعدی و ویدئوهای HD با مشکل مواجه می‌شدند ولی با رشد تکنولوژی و معرفی نسل‌های جدیدتر، این پردازنده‌های گرافیکی نیز بهبود یافته و قدرتمندتر شدند. با این حال هنوز هم کاربران حرفه‌ای گرافیک و علاقه‌مندان به بازی‌های سنگین کامپیوتری باید یک پردازنده گرافیکی اختصاصی برای رایانه خود تهیه کنند.
از آنجا که GPUها میزان ارجاع به حافظه بالایی دارند، ممکن است نوع مجتمع آن‌ها در مواقعی که فضای خالی حافظه رم کاهش می‌یابد، برای استفاده از آن با CPU وارد رقابت شود. IGPها می‌توانند تا ۲۹.۸۵۶ گیگابایت بر ثانیه از پهنای باند حافظه را به خود اختصاص دهند. این در حالی است که کارت‌های گرافیکی اختصاصی می‌توانند تا ۲۶۴ گیگابایت از پهنای باند حافظه اختصاصی خود بهره گیرند. در مدل‌های قدیمی پردازنده‌های گرافیکی مجتمع امکان انتقال و نوردهی تصویر به صورت سخت‌افزاری وجود نداشت، اما مدل‌های جدیدتر این قابلیت‌ها را دارا می‌باشند.
طبقه جدیدی از GPUها وجود دارد که مابین دو نوع قبلی قرار می‌گیرد. معمول‌ترین روش‌های پیاده‌سازی این نوع پردازنده‌های گرافیکی، روش HyperMemory کمپانی ATI و TurboCache انویدیا هستند. کارت‌های گرافیک هیبریدی نسبت به IGPها قیمت بالاتری دارند و از کارت‌های گرافیک اختصاصی ارزان‌تر هستند. این نوع GPUها از حافظه مشترک با سیستم استفاده می‌کنند و در کنار آن یک حافظه کش اختصاصی نیز برای خود دارند، تا با استفاده از آن تاخیر بالای ناشی از دسترسی به حافظه رم را جبران کنند. در تبلیغات این نوع محصولات گاهی گفته می‌شود که حجم حافظه رم آن‌ها ۷۶۸ مگابایت است، ولی در واقع این میزان حجمی از رم سیستم است که این نوع پردازنده گرافیکی می‌تواند از حافظه اصلی رایانه اشغال کند.
استفاده از پردازنده‌های گرافیکی همه‌منظوره (GPGPU) به عنوان پردازنده جریانی رشد روزافزونی دارد و هر روز فراگیرتر می‌شود. این نوع واحدهای پردازش گرافیکی، به جای آن که صرفاً برای عملیات گرافیکی طراحی شده باشند، قدرت محاسباتی یک سایه‌زن گرافیکی مدرن را برای محاسبات و رایانش‌های عمومی به کار می‌گیرند. در برخی کاربردهای خاص که نیاز به عملیات برداری پیچیده دارند، این نوع پردازنده گرافیکی می‌تواند عملکرد بسیار بهتری نسبت به یک CPU داشته باشد. دو کمپانی مهم تولیدکننده GPU، یعنی ATI و انویدیا، برای پوشش کاربردهای بیشتر استفاده از GPGPU، وارد یک رقابت جدی شده‌اند. هر دو کمپانی در پروژه ایجاد یک پردازشگر توزیعی برای محاسبات مربوط به تاشدگی پروتئین، به نام با دانشگاه استنفورد همکاری می‌کنند. در برخی موارد ویژه پیش می‌آید که یک پردازنده گرافیکی، ۴۰ برابر سریع‌تر از یک پردازنده معمولی عمل می‌کند.
GPGPU می‌تواند در بسیاری از وظایف موازی مثل ردیابی اشعه، دینامیک سیال محاسباتی و مدل‌سازی آب‌وهوا مورد استفاده قرار گیرد. عموماً این ابزار برای رایانش‌های نیازمند به قدرت محاسباتی بالا استفاده می‌شود، چرا که GPUها به خاطر معماری ویژه‌ای که دارند، قابلیت‌های موازی‌سازی بالایی دارند.
به علاوه امروزه کامپیوترهای قدرتمند مبتنی بر GPU نقش مهمی در مدل‌سازی‌های بزرگ دارند. سه مورد از ۱۰ ابررایانه قدرتمند جهان از قدرت GPU استفاده می‌کنند.
کارت‌های انویدیا از APIهای برنامه‌نویسی به زبان C مثل CUDA (معماری دستگاه محاسبه یکپارچه) و OpenCL پشتیبانی می‌کنند. CUDA به‌طور اختصاصی در پردازنده‌های گرافیکی انویدیا به کار می‌رود، در حالی که OpenCL طوری طراحی شده که در معماری‌های متفاوتی مثل GPU، CPU و DSP مورد استفاده قرار گیرد. این فناوری‌ها به شما این امکان را می‌دهند تا از توابع مشخص یک برنامه معمولی C برای اجرا در پردازنده‌های جریانی استفاده کنید. این موضوع باعث می‌شود که برنامه‌های C از قابلیت‌های GPU استفاده کرده و بر روی ماتریس‌های بزرگ به صورت موازی اجرا شوند، در حالی که هنوز هم می‌توانند هنگام نیاز از CPU نیز استفاده نمایند. CUDA اولین API است که اجازه می‌دهد اپلیکیشن‌های مبتنی بر CPU به‌طور مستقیم از منابع یک GPU برای محاسبات عمومی‌تر، بدون محدودیت‌های استفاده از API گرافیکی استفاده نمایند.
از سال ۲۰۰۵ علاقه به استفاده از GPU برای محاسبات عمومی به وجود آمد. در اکثر موارد، برنامه‌های خطی یا درختی بر روی رایانه میزبان کامپایل می‌شوند و فایل اجرایی برای اجرا در GPU ارسال می‌شود. ایده کلی استفاده از GPU در این موارد بدین شکل است که یک برنامه مشخص به چند بخش کوچک شکسته می‌شود و سپس با استفاده از معماری اس‌آی‌ام‌دی پردازنده‌های گرافیکی به صورت موازی اجرا می‌گردد. روش دیگر آن است که عمل تفسیر و کامپایل برنامه نیز در خود GPU صورت گیرد. در این روش از همان ابتدا، پیش از کامپایل، برنامه به بخش‌های کوچکتر تقسیم شده و به‌طور موازی تفسیر می‌شوند. یک GPU مدرن می‌تواند به‌طور هم‌زمان هزاران برنامه کوچک را تفسیر نماید.
یکی از بهترین برنامه برای تست کارت گرافیک برنامه Dmark است که محصول شرکت feuturemark 2003 می‌باشد . این برنامه تمام جوانب کارت گرافیک را بررسی و تست می‌کند و به کارت گرافیک امتیاز می‌دهد .