اجرای یک دستور بر چندین داده بهکمک چندین هسته صورت میگیرد. واحدهای پردازشگر گرافیکی امروزی بیش از 100هسته دارند که تمامی هستههای آنها متشابهاند. یک هسته GPU بسیار سادهتر از یک هسته پردازنده مرکزی است. یک GPU با n هسته قادراست یک دستور را روی بیش از n داده مختلف اجرا کند.
این قابلیت برای اجرای برخی نخها4 با ویژگی خاص، بسیار مناسب است. برای مثال فرض کنید میخواهیم سینوس 100 عدد را محاسبه کنیم. اگر پردازنده مرکزی بخواهد این کار را انجام دهد، 100بار باید یک دستور را اجرا کند ولی GPU این عملیات را تقریبا 100برابر سریعتر انجام میدهد! تنها ویژگی که نخها باید داشته باشند این است که متشابه باشند. یعنی بخواهند عملیات یکسانی را روی دادههای متفاوت انجام دهند.
نوشتن برنامهای که از GPUها برای انجام محاسبات گرافیکی استفاده کند، از طریق کتابخانههای Direct3D و OpenGL امکانپذیر است که بهترتیب محصول مایکروسافت و SGI هستند. تلاشهایی برای بهکاربردن GPU در محاسبات غیرگرافیکی نیز صورت گرفته است که تحت عنوان GPGPU5 شناخته میشوند. GPGPU در واقع تکنیک استفاده از GPU برای انجام محاسبات عمومی (نه لزوما گرافیکی) است.
NVIDIA و AMD، دو تولیدکننده بزرگ GPU، تلاش خود را برای تحقق GPGPU از سال 2007 آغاز کردند. AMD FireStream و NVIDIA Tesla نمونه GPUهای همه منظوره محصول این دو شرکت هستند که برای برنامهنویسی و استفاده از قدرت این GPUها میتوانید بهترتیب از Stream SDK و CUDA SDK بهره ببرید.
کنار هم قرار دادن GPU و CPU و تقسیم کار بین آنها، کارایی بسیار بالایی فراهم میکند. این تقسیم کار به این صورت است که دنباله دستورات را CPU دنبال کند و هر جا که نیاز به انجام محاسبات موازی شد، کار را به GPU بسپارد.
شرکت انویدیا مدل CUDA6 را در سال 2007 با همین هدف معرفی کرد. کودا مدلی است برای پردازش موازی همهمنظوره که در سطح نرمافزاری، شامل یک سری دستورالعمل و در سطح سختافزار شامل موتور پردازش موازی در GPU است. برای برنامهنویسی با مدل کودا، برنامهنویسان میتوانند از زبان C که یکی از رایجترین زبانهای سطح بالا است، استفاده کنند و با کارایی عالی روی پردازنده مجهز به کودا اجرا کنند.
اهداف کودا
مدل کودا و نرمافزارهای مرتبط آن با چندین هدف طراحی شده است:
1- افزودن توزیعهای کوچکی به زبانهای برنامهنویسی استاندارد (مانند سی) که پیادهسازی بیواسطه الگوریتمهای موازی را ممکن میسازد. منظور از پیادهسازی بیواسطه، کاهش لایههای واسط بین سختافزار و نرمافزار است. با کودا و زبان سی برای کودا، برنامهنویسان بهجای آنکه درگیر پیچیدگیهای پیادهسازی شوند، میتوانند بر الگوریتمهای موازیسازی تمرکز داشته باشند.
2- پشتیبانی از پردازش ناهمگن، بهنحوی که برنامهها هم از CPU و هم GPU بهره میبرند. بخشهای متوالی برنامه توسط CPU اجرا میشوند و بخشهای موازی توسط GPU. در عمل CPU و GPU واحدهای مجزایی خواهند بود که حافظه جداگانه خود را دارند. این پیکربندی اجازه میدهد تا پردازش همزمان در هر یک از دو واحد، بدون تداخل صورت گیرد.
3- GPUهای مجهز به کودا صدها هسته دارند و میتوانند بهصورت انتخابی هزاران نخ را اجرا کنند.
پیشنیازهای کودا
برای بهکاربردن کودا روی سیستم خود، نیاز دارید که موارد زیر روی سیستم نصب شده باشد:
1- GPUمجهز به کودا: از جمله کارتهای گرافیکی NVIDIA GeForce سری 8، 9 و Quadro و نیز کارتهای Tesla.
2- درایور کودا.
3- نرمافزار کودا: این بخش شامل دو بسته نرمافزاری است، CUDA Toolkit که شامل کتابخانهها و توزیع ویژه زبان سی است و CUDA SDK که شامل نمونه کد و برنامههایی به زبان سی است که از معماری کودا بهره میبرند.
4- مایکروسافت ویژوال استودیو نگارش 2005 یا 2008 یا یکی از نسخههای مشابه مایکروسافت ویژوال C++ اکسپرس.
کاربران کودا
اگر از علاقهمند به کدنویسی موازی هستید، با استفاده از معماری کودا دیگر لازم نیست درگیر پیادهسازی ایدههای خود شوید و میتوانید تمرکز خود را بر موازیسازی بگذارید.
اگر زبان سی را میدانید، نیازی به خرید کتابی برای یادگیری کودا ندارید و پس از نصب کودا میتوانید از کتاب الکترونیکی موجود در بسته نرمافزاری یادگیری را آغاز کنید.
اگر از کاربران لینوکس هستید، نیز نگران نباشید تنها کافی است نرمافزارهای فوق را برای توزیع لینوکس خود دریافت کنید و gcc نسخه 4 به بالا نیز داشته باشید.
گسترش کودا
هماکنون برنامهنویسان و شرکتهای بزرگی به کودا گرایش پیدا کردهاند. از جمله این شرکتها Mathworks، سازنده نرمافزار (بهگفته طراحانش زبان برنامهنویسی) Matlab است که برای بهینهسازی هرچه بیشتر کدهای خود به کودا روی آورده است. نمونه کدها و برنامههایی از شرکتهای مختلف (از جمله گوگل) به این زبان در سایت انویدیا موجود است. بهگفته شرکت انویدیا در حال حاضر کودا در بیش از 35دانشگاه معتبر جهان تدریس میشود.
برای اطلاعات بیشتر و دریافت نرمافزارها و درایورهای ذکر شده بهصورت رایگان، به سایت زیر مراجعه کنید:
منابع
[1] http://developer.download.nvidia.com
/compute/cuda/2_1/toolkit/docs/NVIDIA_
CUDA_Programming_Guide_2.1.pdf
[2] http://en.wikipedia.org/wiki/AMD_FireStream
[3] David A. Patterson; John L. Hennessy,
Computer Organization and Design: the
Hardware/Software Interface, 3rd Edition,
Morgan Kaufmann, 2007.
پینوشت
1. Single Instruction Single Data
2. Single Instruction Multiple Data
3. Graphic Processing Unit
4. Threat
5. General Purpose GPU
6. Compute Unified Device Architecture
احمد لشگر
در تپش این هفته، ماجرای فریب و تعرض در پوشش عرفانهای دروغین و رمالی را بررسی کردیم