GPU رقیب CPU
شنبه 4 شهریور 1391 9:19 AM
سختافزار گرافیکی در ده سال گذشته نسبت به کنترلکنندههای ساده صفحه نمایش و وسایل پردازش تخصصی به کمال رسیده، رشد چشمگیرتری داشته و مقدار حافظه بهکار رفته در آنها، از چند کیلو بایت به صدها مگابایت رسیده است. اما سوال این است که مصارف دیگری که یک کارت ویدیویی میتواند در مواقعی جز بازی کامپیوتری یا کار با آخرین بسته نرمافزاری CAD داشته باشد، چیست؟
قبل از اینکه شرکت ۳dfx (که اکنون به نام NVIDIA شناخته میشود) سخت افزار سه بُعدی ویژه کارتهای ویدیویی شتابدار را به تجهیزات تجاری تبدیل کند، کامپیوترهای شخصی هرگز این شکل را نداشتند.
واحدهای پردازش مرکزی (CPU) پردازندههای همهمنظورهای هستند که برای کار با محاسبات عمومی طراحی شدهاند و الزاما برای کنار آمدن با عملیاتی که به منظور بازسازی، اعمال بافت، نور پردازی و رسم سایهها در صحنههای سه بُعدی موردنیاز است، بهینه نمیشوند. ایده تولید واحدهای تخصصی برای پردازش و کار با این نوع عملیات گرافیکی، از اوایل دهه ۱۹۹۰ بهوجود آمد. اما بهکارگیری آنها تنها برای ایستگاههای کاری گرافیکی مدرن ممکن میشد تا اینکه شرکت ۳dfx، ارائه واحدهای ارزان قیمتی که بر روی سختافزار هر کامپیوتر شخصی تجاری قابل نصب بودند را در بازار آغاز کرد.
سختافزارهای گرافیکی امروزی بسیار پیچیده هستند. این نوع سختافزار معمولا شامل واحدهای پردازش فوق تخصصی (GPU) با چندین شاخه اجرایی و حافظه سریع (VRAM) برای بافرها و بازسازی بافت و مجموعهای از دستورالعملهای معین است. این مجموعه دستورالعملها اغلب از چند دستورالعمل کلی و عملیات متعدد
Single Instruction Multiple Data) SIMD) برای پردازش بُرداری و ماتریس تشکیل میشوند. کامپیوترهای شخصی مدرن، اغلب حاوی یک یا چند دستورالعمل SIMD (شامل MMX ،SSE ، ۲SSE،۳DNOW! و ...) هستند اما عملکرد آنها ممکن است به خوبی آنچهکه کارتهای ویدیویی ارائه میدهند، نباشد.
با این حال همه چیز آنطور که بهنظر میرسد، ساده نیست. سختافزارهای گرافیکی برای ارتباط با بقیه سیستم از طریق درگاههای AGP،PCI یا PCI Express، پهنای باند محدودی دارند به این نحو که:
▪ ۱۳۲PCIمگا بایت در ثانیه
▪ AGP ۸x: دو گیگابایت در ثانیه
▪ PCIe ۶۱x: هشت گیگابایت در ثانیه (حداکثر چهار هزار مگابایت در هر جهت)
▪ (Main Memory (DDR: تقریبا ۴/۶ گیگابایت تا هشت گیگابایت در ثانیه بنابراین، درگاههای نامبرده در هنگام انتقال دادهها به درون یا خارج از سیستم گرافیکی، مانند یک تنگه عمل میکنند.
اکنون سوال این است: آنچهکه واقعا میتوان با استفاده از GPU، به عنوان یک واحد پردازش عمومی انجام داد، چیست؟ در جواب میتوان گفت: تقریبا همه کار؛ اما با محدودیتهای معینی به این شرح:
▪ یکم: مجموعه دستورالعمل محدود: به همین خاطر ممکن است این محدودیت بهکارگیری برخی از الگوریتمها را مشکل کند.
▪ دوم: دراختیار قرار دادن رشتههای اجرای چندگانه (تا ۲۴ رشته در مدل جدید Nvidia ۷۸۰۰): از اینرو پردازش موازی از اهمیت خاصی برخوردار خواهد بود.
▪ سوم: SIMD بودن اغلب دستورالعملها: بنابراین رفع مشکلاتی که به سادگی از طریق ماتریسها قابل حل نیستند، برای GPU نیز آسان نخواهد بود.
▪ چهارم: پهنای باند محدود ارتباطدهنده سختافزار گرافیکی و واحد پردازش مرکزی اصلی: این امر ایجاب میکند که برنامهنویسان کدی را طراحی کنند که مکانیابی دقیق برای به حداقل رساندن مقدار دادهها و کد تبادل شده بینGPU و بقیه سیستم را ارائه دهد.
برخی از مشکلاتی که میتوان آنها را با استفاده از GPU به شکلی مناسب حل کرد، پردازش سیگنالهای دیجیتالی، بازسازی صحنه و پردازش حجمی تصاویر است. اما برخی از الگوریتمهای رایجتر مانند مرتبسازی و جستجوی سریع بانکهای اطلاعات و الگوریتمهای مشابه و تشخیص بافت در دید کامپیوتری را نیز میتوان با GPU بهکار گرفت.
انشعابی از ANSIC به نام Brook که به طور خاص، برای پردازش موازی طراحی شده، به GPU و BrookGPU وارد شده است. پردازش موازی (که به صورتی مؤثر به خطوط اجرای لولهای چندگانه موجود در GPU کمک میکند) و بخش ریاضی (که از انتقال دادهها به درون یا خارج از سیستم اصلی تا حد امکان جلوگیری میکند، دقیقا همان عواملی هستند که برای به دست آوردن بیشترین عملکرد از ساختار GPU مورد نیاز است.
نمونه دیگری از انشعاب زبانهای برنامهنویسی که به طور خاص برای GPUهای بهکار رفته در محاسبات کلی منظور شدهاست، Sh نام دارد. این زبان در حقیقت یک مجموعه C++ است که انشعابهای این زبان را که میتوانند درCPUها وGPU ها اجرا شوند، در اختیار میگذارد. همچنین Cg یکی از مجموعههای Nvidia و اصول کدنویسی برایGPUها است که میتواند برای برخی الگوریتمهای خاص نیز مورد استفاده قرار گیرد.
نتایج برخی از عملکرهای بهدست آمده با استفاده از GPU در محاسبات عمومی نشان میدهد که GPUها میتوانند بهاندازه CPUها در مصارف عمومی، سریع باشند و حتی عملکردی بهتر و تا پنج برابر یا بیشتر از آنها را نیز از خود نشان دهند. یک نمونه از سرعتهای قابل مقایسه، قدرت وضوح سیستمهای خطی فشرده(dense linear systems) است که یک NVIDIA ۶۸۰۰ میتواند با سرعتی مشابه نسبت به یک پردازنده مرکزی ۴/۳ گیگا هرتزیPentium IV با فوق رشتهها، تولید کند (درحالیکه یک NVIDIA ۷۸۰۰ به سادگی میتواند این پردازنده را از نظر عملکرد، پشت سر بگذارد).
در صورت تمایل به کسب اطلاع بیشتر، میتوانید به یکی از مفیدترین منابع اینترنتی در سایت GPGPU (نشانی:www.gpgpu.org) مراجعه کنید. در این سایت، فهرستی از پیوندها به پروژههای جاری و اخبار مربوط به آنها وجود دارد.
بهخاطر دارید که گفته شد برخی از کارتهای ویدیویی جدید، دارای ۱۲۸، ۲۵۶، ۵۱۲ مگابایت (یا بیشتر) حافظه RAM هستند و اگر در حال اجرای یک بازی ویدیویی با گرافیک بالا یا کار در برنامه CAD نباشید، بخش بزرگی از این حافظه، دست نخورده باقی میماند. بنابراین، چرا این RAM ویدیویی را در سیستم در جای دیگری بهکار نگیریم؟
به دلیل پهنای باند محدود نسبت به CPU، استفاده از حافظه ویدیویی به عنوان RAM اصلی ایده خوبی نیست (اگر چه اینکار با انجام برخی تصحیحات درونی امکانپذیر است).
چرا که هیچ روش سادهای برای ثابت نگهداشتن و مدیریت دو منبع حافظه متفاوت، به منظور دستیابی به سرعت بیشتر در سیستمعامل وجود ندارد (پهنای باند RAM ویدیویی برای ارتباط با سیستم اصلی محدود است. به همین دلیل، سیستم به نوعی NUMA یا دسترسی نامنظم به حافظه دچار میشود). اما یکی از روشهای جالب، تولید ramdisk از RAM ویدیویی و تبدیل آن به فضای قابل تبادل است. با اینکه دسترسی به RAM ویدیویی دارای سرعت مشابهRAM اصلی نیست، این حافظه بارها سریعتر از یک درایو دیسک سخت است (درایوهای دیسک سخت عادی نمیتوانند بیش از ۵۰ مگابایت در ثانیه را، به صورت ثابت، منتقل نمایند).
البته احتمالا تنها به منظور استفاده از حافظه RAM یک کارت ویدیویی، آن را خریداری نخواهید کرد (امروزه قیمت حافظه RAM عادی بسیار پایین است). اما اگر دارای یک کارت PCI بیمصرف هستید، بهکارگیری مجدد آن ایده خوبی خواهد بود. از سوی دیگر و براساس نتایج به دست آمده از عملکرد GPU در محاسبات عمومی، ممکن است تصمیم گرفته باشید یک کارت ویدیویی به عنوان یک پردازنده کمکی سریع را بخرید. قیمت پرداخت شده برای خرید چنین کارتی، نسبت به عملکرد به دست آمده از آن، بسیار مناسب خواهد بود و برای مشکل تهیه یک پردازنده کمکی، استفاده از چند کارت ویدیویی PCI به صورت گروهی که در یک محفظه جاسازی شدهاند، راهحلی با هزینه قابل قبول محسوب میشود.
● توضیح چند اصطلاح
۱- ۳dfx Interactive، شرکتی بود که از ابتدا در تولید واحدهای پردازش گرافیکهای سه بُعدی و سپس کارتهای گرافیکی تخصص داشته است. پس از سالها حکمرانی در این زمینه، در اواخر دهه ۱۹۹۰ تا پایان سال ۲۰۰۰، این شرکت پر سر و صداترین پایان را در تاریخ صنعت کامپیوترهای شخصی برای خود رقم زد. دفتر مرکزی این شرکت تا هنگام ورشکستگی مالی، در شهر سن خوزه، (ایالت کالیفرنیا) قرارداشت. داراییهای معنوی (و بسیاری از کارمندان آن) توسط شرکت NVIDIA، رقیب سرسخت آن، جذب شدند.
۲- شرکت NVIDIA یکی از ارائهدهندگان اصلی پردازندههای گرافیکی (graphics processing units) برای کارتهای گرافیکی، تجهیزات چندرسانهای و ارتباطات برای کامپیوترهای شخصی و کنسولهای بازی مانند، Xbox اولیه و Playstation ۳ است. دفاتر مرکزی این شرکت در شهر سن کلارا، از ایالت کالیفرنیا قرار دارد. در سال ۲۰۰۱، این شرکت درآمدی برابر با ۳۷/۱ میلیارد دلار داشته و درآمد خالص آن معادل ۱/۱۷۷ میلیون دلار بوده است.
۳- محاسبات موازی: اصطلاحی است ناظر اجرای همزمان یک وظیفه بر روی چند پردازنده، به منظور دستیابی به سرعت بیشتر.
۴- Brook برای GPU، یک مفسر و بهکارگیری زمان اجرای برنامه Brook برای سختافزارهای گرافیکی مدرن است. اهداف این پروژه عبارتند از:
- برنامهنویسی همه منظوره بر روی GPUها
- ارائه یک ابزار مفید به تولیدکنندگانی که قصد اجرای برنامهها بر روی GPUها را دارند.
- تحقیق درباره مدل برنامهنویسی، کاربردهای جاری و بهکارگیری سیستمها.
ترجمه: مسعود پاکنظر