CUDA Programming Applications

وبلاگ آموزشی کودا

CUDA Programming Applications

وبلاگ آموزشی کودا

معماری cuda

مقدمه:
فن آوری  NVIDIA® CUDA™ بزرگترین قدرت پردازش موازی NVIDIA GPUs است.
معماری کودا یک انقلاب در معماری محاسبات موازی است که ارائه می دهد عملکرد فن آوری پردازنده
گرافیکی NVIDIA برای هدف کلی به منظور محاسبه GPU .
  
برنامه هایی که بر روی معماری کودا اجرا می شوند می توانند مزیت نصب شدن بر روی بیش از صد میلیون
 GPU با CUDA فعال شده در دستاپ و کامپیوتر ها، ایستگاه های کاری حرفه ای و خوشه های
سوپرکامپیوتر.
     با معماری و ابزار کودا، توسعه دهندگان در حال پیشرفت قابل توجهی در زمینه هایی مانند تصویربرداری
پزشکی و اکتشاف منابع طبیعی و ایجاد برنامه های پیشرفت در زمینه هایی مانند تشخیص تصویر و پخش
تصاویر real-time HD و رمز گذاری.
CUDA این عملکرد بی سابقه را از طریق API های استاندارد مانند OpenCL ™ و DirectX® Compute و
 زبان برنامه نویسی سطح بالا مانند C / C ++، Fortran، Java، Python و
 Microsoft .NET Framework. انجام می دهد.
ارجاع از سایت http://www.webhostingtalk.ir/showthread.php?t=85820
فناوری cuda چیست؟
فناوری CUDA به معماری پردازش موازی NVIDIA گفته می شود که سرعت عملکرد پردازش گرافیکی را از طریق تحت کنترل درآوردن قدرت GPU امکان پذیر می کند. این تکنولوژی اجازه می دهد صدها تراشه گرافیکی مجزای انویدیا در کنار هم به پردازش موازی جهت پردازش حجیم ترین حجم اطلاعات بپردازند. تکنولوژی CUDA به وسیله هزاران نرم افزار پشتیبانی می شود تا سرعت سیستم را برای اجرای برنامه های سنگین افزایش دهد. با میلیونها GPUهای مبتنی بر CUDA، طراحان و توسعه دهندگان نرم افزار، متخصصین و محققان دامنه وسیعی از قابلیتهای CUDA را در برنامه هایی نظیر پردازش عکس و فیلم، زیست شناسی و شیمی محاسباتی، شبیه سازی پویا روان، نوسازی تصویر CT، آنالیز زمین لرزه، ردیابی اشعه و بسیاری دیگر را شناسایی می کنند.

در حقیقت CUDA، معماری دستگاه یکپارچه محاسباتی است که محصول شرکت Nvidia می باشد، یک پلتفرم نرم*افزاری است که برای محاسبات موازی حجیم با کارایی بالا در پردازنده های گرافیکی قدرتمند بکار برده می شود. معماریCUDA شامل ابزارهای برنامه نویسی به زبان های برنامه نویسی C یا C++و یک مکانیزم انتزاعی سخت*افزاری است.

هدف CUDA در برنامه های "متمرکز بر داده" که نیازمند ریاضیات با ممیز شناور و دقت معمولی هستند (عمدتاً علمی، مهندسی و محاسبات با کارایی بالا مانند برنامه های ویرایش عکس و فیلم) خلاصه شده است. ممیز شناور با دقت مضاعف طرح Nvidia برای GPUهای جدید است. این معماری همچنین به اجرای دیگر نرم افزارهای سنگین کامپیوتری کمک می کند و با آزاد کردن توان هزاران هسته موجود در پردازنده کارت گرافیک، توانایی سیستم را افزایش می دهد. از این رو، دیگر برای اجرای نرم افزارهای حجیم با مشکل کاهش سرعت مواجه نخواهید شد.

ارجاع از سایت http://daneshyari.com/isi/articles/cuda
کودا به انگلیسی (CUDA) که مخفف عبارت انگلیسی Compute Unified Device Architecture است یک سکوی
پردازش موازی و مدل برنامه‌نویسی است که توسط شرکت انویدیا به‌وجود آمده است و در واحدهای پردازش گرافیکی این
شرکت پشتیبانی می‌شود. کودا به توسعه دهنده گان نرم‌افزار اجازه می‌دهد تا از یک GPU که ویژگی CUDA-enabled
دارد برای هدف پردازش استفاده کنند، رویکردی که GPGPU شناخته می‌شود. کودا به توسعه‌دهنده گان امکان دسترسی
مستقیم به حافظه و مجموعه دستورالعمل در واحد پردازش گرافیکی را می‌دهد. سکوی کودا برای کار با زبان‌های
برنامه‌نویسی مانند C و ++C و فرترن طراحی شده‌است. این دسترسی باعث می‌شود تا برای متخصصان استفاده از منابع
GPU آسان‌تر شود برخلاف راه کار های API دیگر چون DIRECT3D و OpenGL که نیاز به توانایی حرفه ای در برنامه
نویسی گرافیک داشتند. همچین کودا از چارچوب‌هایی چون OpenACC و OpenCL پشتیبانی می کند. کودا توسط
کتابخانه‌های مجهز شده کودا،دستوردهنده کامپایلر مانند OpenACC و همین طور توسعه‌هایی استاندارد صنعتی از
زبان‌هایی شامل C، ++C و فرترن برای توسعه‌دهندگان قابل دسترسی است. برنامه‌نویسان C++/C از '++CUDA C/C'
استفاده می کنند که کامپایل شده با "nvcc" است. nvcc یک کامپایلر C++/C بر پایه LLVM شرکت انویدیا است. برنامه
نویسان فرترن نیز می توانند از 'CUDA Fortran' استفاده کنند که کامپایل شده با
 PGI CUDA Fortran Complier شرکت The Portland Group است. علاوه بر کتابخانه‌ها،دستوردهنده‌های کامپایلر
و ++CUDA C/C و CUDA Fortran،سکو کودا از سایر رابط‌های محاسباتی شامل موارد زیر پشتیبانی می کند
. OpenCL گروه Khronos DirectCompute مایکروسافت محاسبات سایه زنی OpenGL C++ AMP همچنین لفافه
سوم شخص (Third party wrappers) برای زبان هایی مانند پرل (Perl)،پایتون (Python)،آر (R)،فرترن
 (FORTRAN)،جاوا (Java)،روبی (Ruby)،هسکل (Haskell)،متلب (Matlab)،آی دی ال (IDL)،لوآ (Lua) و نیز به
طور پیشفرض متمتیکا (Mathematica) در دسترس هستند. در صنعت بازی‌های کامپیوتری،GPUها تنها برای رندر
کردن گرافیک نیست بلکه در محاسبات فیزیکی بازی (اثرات فیزیکی شبیه دود،آتش،ترشحات و آوار) نیز هستند.
مثال‌هایی نظیر فیز-اکس و گلوله شامل این مورد هستند. کودا همچنین برای کاربردهای شتاب‌دهی غیرگرافیکی در
زیست‌شناسی محاسباتی،رمزنگاری و حوزه های دیگر نیز استفاده می‌شود. کودا هم یک API سطح پایین و هم یک API
سطح بالا فراهم می کند. SDK اولیه کودا در 15 فوریه 2007 برای ویندوز مایکروسافت و لینوکس انتشار عمومی شد
. پشتیبانی در سیستم‌عامل مک در نسخه دوم اضافه شد که جای نسخه تست 14 فوریه 2008 را می‌گیرد. کودا با تمامی GPUهای از سری G8x به بعد شامل جی‌فورس،کوادرو و تسلا(گرافیک) کار
می‌کند. کودا با بیشتر سیستم‌عامل‌های استاندارد کار می‌کند. انویدیا می‌گوید برنامه‌هایی که برای سری G8x توسعه‌یافته‌اند
همچنین بدون تغییر روی نسل‌های آینده کارت‌های گرافیک بسته به سازگاری دودویی کارخواهند کرد. مزایا کودا چندین
برتری در برابر محاسبات عمومی سنتی روی GPU ها (در کل منظور GPGPU) که از واسط‌های گرافیکی استفاده
می‌کنند، دارد. خواندن پراکنده یعنی کد می‌تواند از آدرس‌های دلخواه در حافظه بخواند. حافظه مجازی یکپارچه (کودا
نسخه 4. 0 به بعد) حافظه یکپارچه (کودا نسخه 6. 0 به بعد) حافظه مشترک کودا ناحیه ای که یک حافظه سریع مشترک
است، نشان می‌دهد که می‌تواند میان نخ‌ها به اشتراک گذاشته شود. این حافظه می‌تواند به عنوان یک حافظه نهان مدیریت
شده تحت دسترسی کاربر استفاده شود و پهنای باند بیشتری داریم یعنی امکان استفاده را از جستجو بافتی. دانلودهای سریع
تر و مجدد خوانی پشتیبانی کامل برای اعداد صحیح و عملیات بیتی، شامل جستجوی بافتی صحیح

کتاب برنامه نویسی موازی با کودا(CUDA) http://www.naghoospress.ir/bookview.aspx?bookid=1487003
    چکیده :
استفاده از توان محاسباتی رایانه‌ها در تحقیقات علمی و فعالیت‌های دانشگاهی، مراکز تحقیقاتی و شرکت‌های تجاری، کاربرد روزافزونی پیدا نموده است؛ ازاین‌رو نیاز به پردازش سریع‌تر افزایش یافته و به یک نیاز اساسی تبدیل شده است. سرعت کامپیوترهای شخصی کنونی نسبت به اجداد خود به‌طور سرسام‌آوری افزایش یافته است اما علیرغم وجود این موضوع باز جوابگوی نیازهای مطرح‌شده نیست. ازجمله عرصه‌هایی که احتیاج به کامپیوترهایی با سرعت پردازش بسیار بالا دارند می‌توان به برنامه‌های شبیه‌سازی در تحقیقات هسته‌ای، نانو فناوری محاسباتی، برنامه‌های پیش‌بینی وضعیت هوا، برنامه‌های فیلم‌سازی کامپیوتری، برنامه‌های ساخت انیمیشن حرفه‌ای و بسیاری از زمینه‌های مختلف دیگر که همگی به‌سرعت پردازش بسیار زیاد نیاز دارند تا در یک زمان مناسب به نتیجه برسند اشاره کرد. یک راه‌حل برای این معضل، استفاده از سوپرکامپیوترها است. درست است که سرعت پردازش سوپرکامپیوترها بسیار بالاتر از کامپیوترهای شخصی است اما استفاده از آن‌ها در همه موارد مقرون‌به‌صرفه نیست؛ ضمن آن‌که این فناوری در انحصار بعضی از کشورهای توسعه‌یافته است و سایر کشورها از دسترسی به این تجهیزات استراتژیک محروم هستند. راه‌حل دیگر در دستیابی به سرعت پردازش بسیار بالا، استفاده از روش پردازش موازی است. به بیان ساده در این روش چند پردازنده (در اینجا منظور پردازنده‏های گرافیکی) معمولی با همکاری یکدیگر به اجرای یک برنامه می‌پردازند که طی این همکاری، برنامه با سرعت بالاتری اجرا می‌شود. به عبارت دیگر، پردازش یا محاسبه‏ی موازی، شکلی از پردازش است که در آن دستورالعمل‌های بسیاری در یک زمان و به صورت هم‌زمان انجام می‌شوند و بر اساس این اصل اجرا می‌شوند که مسائل بزرگ را اغلب می‌توان به مسائل کوچک‌تر تقسیم نمود که سپس باهم و به‌صورت موازی اجرا شوند. کودا در نوامبر 2006 توسط انویدیا معرفی گردید، کودا یک پلتفرم محاسبات موازی همه‌منظوره و مدل برنامه‌نویسی است که رابط‌های برنامه‌نویسی را در اختیار برنامه‌نویسان قرار می‌دهد و به طراحان نرم‌افزار اجازه می‌دهد تا از توانایی‌های جی‌پی‌یو (GPU سرواژه Graphics Processing Unit بوده و به معنای واحد پردازش گرافیکی است) در جهت محاسبات همه‌منظوره روی واحد پردازش گرافیکی استفاده کنند. پلتفرم کودا یک لایه نرم‌افزاری است که دسترسی مستقیم به مجموعه دستورالعمل‌های مجازی جی‌پی‌یو و عناصر محاسبات موازی را می‌دهد. این پلتفرم به گونه‌ای طراحی شده است که با زبان‌های برنامه‌نویسی سی، سی‏پلاس‌پلاس، فرترن و متلب کار می‌کند. این قابلیت دسترسی، کار را برای متخصصان برنامه‌نویسی موازی به منظور استفاده از منابع جی‌پی‌یو به همان شکلی که از دایرکت‌ایکس (DirectX) یا اپن‌جی‌ال (OpenGL) استفاده می‌کنند، هموار کرده است. با استفاده از این معماری ما می‌توانیم برنامه خود را به زبان سی یا سی‏پلاس‏پلاس نوشته و سپس بر روی پردازنده گرافیکی اجرا کرده و از سرعت آن لذت ببریم. همچنین مورد مهم دیگر وجود پلتفرمی است که بتواند بر روی دستگاه‌های مختلف اجرا شود، کودا با این شعار که می‌تواند برای شما سطح قابل قبولی از کارایی و مقیاس‌پذیری را در یک زمان به ارمغان آورد، وارد بازار برنامه‌نویسی شده است. درباره معماری کودا گفته می‌شود که کودا معماری‌ای است که به جای محدود کردن شما، توسط کارایی یک‌سری کتابخانه، اجازه می‌دهد که کار موردنظرتان را انجام دهید. در گذشته نوشتن نرم‌افزار برای جی‌پی‌یو به این معنی بود که برای جی‌پی‌یو باید برنامه نوشته می‌شد، در مقابل همان‌طور که عنوان شد، کودا به شما اجازه می‌دهد با زبان‌های معمول برنامه‌ای بنویسید که بر روی جی‌پی‌یو نیز اجرا شود، همچنین به دلیل آن‌که کودا می‌تواند نرم‌افزار شما را به صورت مستقیم روی سخت‌افزار گرافیکی کامپایل کند، کارایی به دست آمده نیز افزایش می‌یابد. کتاب حاضر مرجع مناسبی برای برنامه‏نویسی موازی با کودا بوده و همچنین آموزش و درک عمیقی از مطالب برنامه‏نویسی موازی با کودا را با انجام مثال‌ها و برنامه‌های این کتاب محقق می‏سازد. لذا خوانندگان، اساتید و دانشجویان می‌توانند با استفاده از مثال‌ها و برنامه‌های این کتاب یکی از مشکلات عمده سیستم آموزشی موجود، یعنی بیان مطالب به صورت صرفاً تئوری و نه با آموزش در قالب مثال‏های عملی را فائق آیند.این کتاب مشتمل بر دوازده فصل و دو پیوست است؛ که تا حد ممکن سعی شده که مطالب و مباحث مربوط به کودا به تفصیل و به صورت جامع آموزش داده شود و از آن مهم‌تر اینکه در این کتاب تأکید بسیار بر مطالب عملی کدنویسی با کودا و مثال‏های عملی‏محور در کنار مطالب تئوری بوده است به گونه‏ای که در این کتاب بالغ ‏بر یکصد و سی مثال و پروژه عملی در بخش‏های گوناگون کودا آورده شده است و سعی گردیده که کتاب به صورت خودآموز برای خوانندگان نوشته شود و آموزش آن گام به گام از سطح مبتدی تا پیشرفته بوده و تقریباً اکثر مباحث کودا را پوشش دهد و هر خواننده‏ای نیز که پیش‏زمینه‏ای در زمینه کامپیوتر و کدنویسی داشته باشد بتواند از آن بهره گیرد.

معماری CUDA
معماری CUDA شامل چندین جزء است که در جعبه های سبز زیر است:
1.    موتورهای محاسبه ی موازی داخل GPU های .NVIDIA
2.    سطح بندی هسته سیستم عامل برای پشتیباتی از راه اندازی سخت افزار اولیه، پیکربندی و غیره
3.    درایور User-mode،که یک API ی device-level برای توسعه دهندگان فراهم می کند.
4.    معماری مجموعه دستورالعمل(ISA) برای محاسبه موازی هسته ها و دستورالعمل ها

                                               
        

محیط توسعه نرم افزار CUDA
محیط توسعه نرم افزار CUDA تمام ابزارها، نمونه ها و اسناد لازم برای توسعه برنامه هایی که از معماری
 CUDA استفاده می کنند ، را فراهم می کند.


محیط توسعه نرم افزار CUDA دو رابط برنامه نویسی متفاوت را پشتیبانی می کند:
1.    یک رابط برنامه نویسی سطح-دستگاه، که در آن برنامه ازDirectX Compute، OpenCL یا
 CUDA Driver API را به طور مستقیم استفاده می کند به منظور پیکربندی GPU ، راه اندازی محاسبات
هسته  و خواندن نتایج بازگشتی
2.    یک رابط برنامه نویسی یکپارچه سازی زبان، که در آن یک برنامه از C Runtime برای CUDA استفاده می کند و توسعه دهندگان از مجموعه کوچکی از توسعه  استفاده می کنند تا مشخص کنند کدام توابع محاسباتی باید بر روی GPU به جای CPU انجام شوند.
 
هنگام استفاده از رابط برنامه نویسی سطح-دستگاه، توسعه دهندگان محاسبات هسته را در فایل های جداگانه با استفاده از زبان هسته پشتیبانی شده توسط APIبا انتخاب خودشان انجام می دهند.DirectX  محاسبات هسته ها (همانند "محاسبات شیدرها") در HLSL نوشته می شود. هسته هایOpenCL  نوشته می شوند در یک زبان مانندC   که با"OpenCL C"فراخوانده می شوند.  API Driver API CUDA هسته هایی را که در C یا    assembly  PTX نوشته شده اند می پذیرد.
هنگام استفاده از رابط برنامه نویسی یکپارچه سازی زبان، توسعه دهندگان توابع محاسباتی را در C و C Runtime نوشتند برای CUDA به طور خودکار تنظیمات GPU را انجام می دهد و توابع محاسباتی را اجرا  می کند .این رابط برنامه نویسی، توسعه دهندگان را قادر می سازد تا از پشتیبانی محلی برای زبان های سطح بالا از قبیل C، C ++، Fortran، Java، Python و دیگر موارد استفاده کنند (نگاه کنید به زیر)، کاهش پیچیدگی کد و هزینه های توسعه از طریق ادغام نوع و ادغام کد:
•    ادغام نوع اجازه می دهد تا انواع استاندارد و همچنین انواع بردار و انواع تعریف شده توسط کاربر (از جمله ساختارها) را به صورت یکپارچه در سراسر توابع اجرا شده بر روی CPU و توابع اجرا شده در GPU ااستفاده کنند
•    یکپارچه سازی کد اجازه می دهد تا همان عملکرد را از توابع که در پردازنده و توابع اجرا شده بر روی GPU اجرا شود فراخوانی می شود.

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





اقتباس CUDA
ابتدا در مارس 2007 معرفی شد، و با بیش از 100 میلیون GPU های فعال CUDA در روز به فروش می
رسد، هزاران نفر از توسعه دهندگان نرم افزار در حال حاضر به صورت رایگان از ابزارهای توسعه نرم افزار
CUDA برای حل مشکلات در انواع برنامه های حرفه ای و خانگی - از پردازش تصویر و فیلم و شبیه
سازی فیزیک، تا اکتشاف نفت و گاز، طراحی محصول، تصویربرداری پزشکی و تحقیقات علمی استفاده می
کنند.
برنامه های نوشته شده در C و C ++ می توانند از C Runtime برای CUDA به طور مستقیم استفاده
کنند. برنامه های کاربردی نوشته شده به زبان های دیگر می توانند به runtime  با استفاده از انقیاد
متد های محلی دسترسی پیدا کنند، و چندین پروژه وجود دارد که توسعه دهندگان را قادر می سازد تا از
این طریق از معماری CUDA استفاده کنند، از جمله:
Fortran:
o    بسته بندی فورتن برای CUDA-http://www.nvidia.com/object/cuda programming tools.html

o    FLAGON Fortran 95 library for GPU Numerics - http://flagon.wiki.sourceforge.net/

o    PGI Fortran to CUDA compiler - http://www.pgroup.com/resources/accel.htm

:Java


o    JaCuda - https://sourceforge.net/projects/jacuda.wiki/

o    Bindings for CUDA BLAS and FFT libs - http://javagl.de/index.html





Python:


o    PyCUDA Python wrapper - https://mathema.tician.de/software/pycuda/


.NET languages:


o    CUDA.NET - http://www.gass-ltd.co.il/en/products/cuda.net


منابع برای زبان های دیگر:


o    SWIG   - http://www.swig.org  (برای ده ها زبان از واسط های C / C ++ تولید می کند)



توسعه دهندگان می توانند با بهره گیری از عملکرد عالی در معماری CUDA امروزه از API های غنی و انواع زبان های سطح بالا در نسخه های 32 بیتی و 64 بیتی لینوکس، MacOS و ویندوز، استفاده کنند.







نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.