مفاهیم برنامهنویسی GPGPU
از آنجایی که واحدهای پردازش گرافیکی برای کارهای گرافیکی طراحی شدهاند، در انجام عملیات و برنامهنویسی محدود هستند. بر اساس مدل طراحی GPUها، استفاده از آنها تنها در مسائلی که به کمک پردازش جریانی قابل حل هستند مفید بوده و قدرت سختافزار آنها تنها به روشهای خاصی قابل بهرهبرداری است.
نگاهی کلی به پردازش جریانی
واحدهای پردازنده گرافیکی تنها میتوانند روی دادهها و آرایههای مستقل از هم پردازش انجام دهند؛ اما این پردازش را در تعداد بسیار بالا و به صورت همزمان اعمال میکنند. این ویژگی هنگامی که نیاز به کار یکسان بر روی تعداد زیادی داده داشته باشید، مفید واقع میشود. به بیان دیگر، GPUها پردازشگرهای جریانی هستند؛ پردازشگرهایی که به صورت موازی یک روند را بر روی جریانی از دادهها اعمال میکنند. یک جریان، به بیان ساده، مجموعهای از دادههاست که نیاز به محاسبات یکسانی دارند. جریانها اساس موازات دادهها در پردازش موازی محسوب میشوند. کرنلها (به معنای هسته) که توسط GPUها فراخوانده میشوند نیز توابعی هستند که بر روی تکتک اعضای جریان داده اجرا میشوند. در برنامههایی که برای GPUها نوشته میشوند، توجه به میزان عملیات ریاضی بر واحد حافظه ضروری است. از آنجایی که سرعت دسترسی به حافظه بسیار کمتر از سرعت پردازش این سختافزارها است، اگر تعداد عملیات ریاضی برای هر داده موجود در حافظه کم باشد، میزان افزایش سرعت اجرا محدود میگردد. نرمافزارهای ایدهآل برای GPGPU نرمافزارهایی هستند که دادههای فراوان، موازات بالا و وابستگی کم دادهای داشتهباشند.
کودا معجزه انویدیا
کودا (CUDA) سرنام Compute Unified Device Architecture یک سکوی پردازش موازی و مدل برنامهنویسی است که توسط شرکت انویدیا بهوجود آمده که از واحدهای پردازش گرافیکی کارتهای تولیدی این شرکت استفاده میکند. کودا به توسعهدهندگان نرمافزار اجازه میدهد از یک پردازنده گرافیکی که ویژگی CUDA-enabled دارد برای هدف پردازش استفاده کنند، رویکردی که GPGPU شناخته میشود. کودا به توسعهدهندگان امکان دسترسی مستقیم به حافظه و مجموعه دستورالعمل در واحد پردازش گرافیکی را میدهد. سکوی کودا برای کار با زبانهای برنامهنویسی مانند C و ++C و فرترن طراحی شده است. این دسترسی باعث میشود تا برای متخصصان استفاده از منابع GPU آسانتر شود، برعکس راهکارهای مبتنی بر API همچون DIRECT3D و OpenGL که نیاز به توانایی حرفهای در برنامهنویسی گرافیک داشتند. همچین کودا از چارچوبهایی چون OpenACC و OpenCL پشتیبانی میکند. GPU به عنوان یک پردازنده خاص، درخواستهایهای بلادرنگ با کیفیت بالا گرافیک سه بعدی که از نظر وظایف محاسباتی فشرده هستند را مختصاتدهی میکند. از سال ۲۰۱۲ میلادی GPUها به سیستمهای چند هسته ای قدرتمندی ارتقا یافتند که قادر به دستکاری بلوکهای بزرگی از دادهها هستند. این طراحی بسیار از هدف عامه CPUها برای الگوریتمها در مواقعی که پردازش موازی روی بلوکهای داده انجام میشود مؤثرتر است. بهطور مثال، الگوریتم ارسال برچسب، الگوریتم مرتبسازی سریع روی فهرستهای بزرگ، تبدیل موجک سریع دوبعدی و شبیهسازی دینامیک مولکولی از جمله این موارد هستند.
کودا توسط کتابخانههای مجهز شده کودا ،دستوردهنده کامپایلر مانند OpenACC و همینطور توسعههایی استاندارد صنعتی از زبانهایی شامل سی، سیپلاسپلاس و فرترن برای توسعهدهندگان قابل دسترسی است. برنامهنویسان زبانهای سی و سیپلاسپلاس میتوانند از ++CUDA C/C استفاده میکنند که کامپایل شده با "nvcc" است. nvcc یک کامپایلر سی/سیپلاسپلاس بر پایه LLVM شرکت انویدیا است. برنامه نویسان فرترن نیز میتوانند از CUDA Fortran استفاده کنند که کامپایل شده با PGI CUDA Fortran Complier شرکت The Portland Group است. علاوه بر کتابخانهها، دستوردهندههای کامپایلر و ++CUDA C/C و CUDA Fortran، سکو کودا از سایر رابطهای محاسباتی OpenCL گروه Khronos، DirectCompute مایکروسافت، محاسبات سایه زنی OpenGL و C++ AMP پشتیبانی میکند. در صنعت بازیهای کامپیوتری ،GPUها تنها برای رندر کردن گرافیک نیست بلکه در محاسبات فیزیکی بازی (اثرات فیزیکی شبیه دود، آتش، ترشحات و آوار) نیز هستند. مثالهایی نظیر فیز-اکس و گلوله شامل این مورد هستند. کودا همچنین برای کاربردهای شتابدهی غیرگرافیکی در زیستشناسی محاسباتی ،رمزنگاری و حوزههای دیگر نیز استفاده میشود. کودا هم یک API سطح پایین و هم یک API سطح بالا فراهم میکند. SDK اولیه کودا در ۱۵ فوریه ۲۰۰۷ برای ویندوز مایکروسافت و لینوکس انتشار عمومی شد. پشتیبانی در سیستمعامل مک در نسخه دوم اضافه شد که جای نسخه تست ۱۴ فوریه ۲۰۰۸ را میگیرد. کودا با تمامی GPUهای از سری G8x به بعد شامل جیفورس ،کوادرو و تسلا (گرافیک) کار میکند. کودا با بیشتر سیستمعاملهای استاندارد کار میکند. انویدیا میگوید برنامههایی که برای سری G8x توسعهیافتهاند همچنین بدون تغییر روی نسلهای آینده کارتهای گرافیک بسته به سازگاری دودویی کارخواهند کرد.
پردازش جریانی و پردازندههای گرافیکی همه منظوره (GPGPU)
استفاده از پردازندههای گرافیکی همهمنظوره (GPGPU) به عنوان پردازنده جریانی رشد روزافزونی دارد و هر روز فراگیرتر میشود. این نوع واحدهای پردازش گرافیکی، به جای آن که صرفاً برای عملیات گرافیکی طراحی شده باشند، قدرت محاسباتی یک سایهزن گرافیکی مدرن را برای محاسبات و رایانشهای عمومی به کار میگیرند. در برخی کاربردهای خاص که نیاز به عملیات برداری پیچیده دارند، این نوع پردازنده گرافیکی میتواند عملکرد بسیار بهتری نسبت به یک CPU داشته باشد. دو کمپانی مهم تولیدکننده GPU، یعنی ATI و انویدیا، برای پوشش کاربردهای بیشتر استفاده از GPGPU، وارد یک رقابت جدی شدهاند. هر دو کمپانی در پروژه ایجاد یک پردازشگر توزیعی برای محاسبات مربوط به تاشدگی پروتئین، به نام en:Folding@home با دانشگاه استنفورد همکاری میکنند. در برخی موارد ویژه پیش میآید که یک پردازنده گرافیکی، ۴۰ برابر سریعتر از یک پردازنده معمولی عمل میکند. 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 مدرن میتواند بهطور همزمان هزاران برنامه کوچک را تفسیر نماید. لازم به توضیح است که طبقه جدیدی از پردازندههای گرافیکی نیز عرضه شده است. معمولترین روشهای پیادهسازی این نوع پردازندههای گرافیکی، روش HyperMemory کمپانی ATI و TurboCache انویدیا هستند. کارتهای گرافیک هیبریدی نسبت به IGPها قیمت بالاتری دارند و از کارتهای گرافیک اختصاصی ارزانتر هستند. این نوع GPUها از حافظه مشترک با سیستم استفاده میکنند و در کنار آن یک حافظه کش اختصاصی نیز برای خود دارند، تا با استفاده از آن تاخیر بالای ناشی از دسترسی به حافظه رم را جبران کنند. در تبلیغات این نوع محصولات گاهی گفته میشود که حجم حافظه رم آنها ۷۶۸ مگابایت است، اما در واقع این میزان حجمی از رم سیستم است که این نوع پردازنده گرافیکی میتواند از حافظه اصلی رایانه اشغال کند.
OpenCL
اوپنجیال (OpenGL) یک رابط برنامهنویسی نرمافزار چندسکویی برای پردازش دوبعدی و سهبعدی است. این رابط برنامهنویسی معمولاً برای تعامل با پردازشگر گرافیکی و بهدستآوردن رندرینگ شتابیافته توسط سختافزار استفاده میشود. به بیان دیگر، اپنسیال بستری است برای برنامههایی که قرار است بر سکوهای ناهمگن با تکیه بر سیپییوها و جیپییوها و سایر پردازندهها اجرا شوند. اپنسیال دارای یک زبان برای نوشتن kernelها (توابعی که در دستگاههای OpenCL اجرا میشوند) بهعلاوه رابطهای برنامهنویسی برای تعریف و پس از کنترل بستر استفاده شوند را دارا است. OpenCL چندپردازندگی را با استفاده از روشهای وظیفه محور (task-based) و داده محور (data-based) پشتیبانی میکند. اپنجیال سرنام Open Graphic Library به معنای کتابخانه گرافیکی باز است، اما اپنجیال خود به هیچوجه یک کتابخانه نرمافزاری نیست و نرمافزار متنباز نیز به حساب نمیآید، زیرا حاوی هیچ کدی نیست. اوپنجیال، تنها استانداردی باز برای توصیف یک رابط گرافیکی است که توسط شرکتهای متعددی توسعه داده شده و میتواند توسط درایورهای گرافیک، سیستمعاملها و نرمافزارهای مختلف پیادهسازی شود. اوپنجیال توسط شرکت سیلیکون گرافیکز از سال ۱۹۹۱ توسعه یافت و در سال ۱۹۹۲ منتشر شد و بهصورت گسترده در طراحی به کمک رایانه، واقعیت مجازی، مصورسازی، بصریسازی اطلاعات، شبیهسازهای پرواز و بازیهای ویدئویی بهکار گرفتهشد. علاوه بر این ابلیتهای جدیدی که توسط هسته رابط برنامهنویسی مورد نیاز هستند، فروشندگان واحد پردازش گرافیکی ممکن است قابلیتهای جدید را به شکل extensions (افزونه) ارائه دهند. افزونهها ممکن است ویژگیها یا ثابتهای جدیدی معرفی کنند یا ممکن است محدودیتهایی توابع فعلی اوپنجیال را کاهش یا حذف کنند. فروشندگان میتوانند از افزونهها برای در معرض گذاشتن رابطهای برنامهنویسی سفارشی بدون نیاز به حمایت از طرف سایر فروشندگان استفاده کنند که بهمقدار زیادی انعطافپذیری اوپنجیال را افزایش میدهد. همه افزونهها توسط فهرست اوپنحیال جمعآوری و تعریف میشوند. هر افزونه با توجه به شرکتی که آن را توسعه داده با نامی کوتاه پیوند خورده است. برای نمونه شناسه انویدیا NV است که قسمتی از نام افزونه GL_NV_half_float، ثابت GL_HALF_FLOAT_NV و تابع glVertex2hNV است. اگر چند فروشنده بر سر قابلیتی مشابه با رابط برنامهنویسی بهتوافق برسند این افزونه مشترک ممکن است با شناسه EXT منتشر گردد. ویژگیهای جدید معرفیشده توسط هر نسخه معمولاً با ترکیب قابلیتهای افزونههای گسترده پیادهسازیشدهٔ به خصوص افزونههای از نوع ARB و EXT هستند.
کتابخانههای وابسته
نسخههای اولیه اوپنجیال با کتابخانه همراهی که GLU، کتابخانه ابزار اوپنجیال خوانده میشد عرضه میشد. جیالیو قابلیتهای ساده و مفیدی از قبیل Mipmapسازی و موزاییککاری که بعید بهنظر میرسید در سختافزارهای آن زمان حمایت شوند را فراهم میکرد. مشخصات GLU آخرین بار در ۱۹۹۸ بهروز شد و نسخههای اخیر به قابلیتهایی که استفاده از آن توسط اپنجیال ۳٫۱ با انتشار اپنجیال در سال ۲۰۰۹ منسوخ اعلامشده وابسته است. با در نظرگرفتن اینکه ایجاد زمینه فرایند پیچیدهای است و همچنین بین سیستمعاملهای مختلف متفاوت است، ایجاد خودکار زمینه اوپنجیال ویژگی مشترکی بین کتابخانههای توسعه بازی و رابط کاربری است از جمله اسدیال، Allegro, SFML, FLTK و کیوت. چند کتابخانه فقط بهمنطور پنجره با توانایی اپنجیال ایجاد شدهاست. اولین نمونه چنین کتابخانههایی جیالیوتی (GLUT) که بعداً توسط فریجیالیوتی (freeglut) جایگزین شد بود. جیالافدبلیو (GLFW) نیز جایگزین جدیدتری است.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟