ابزارهاي برنامهنويسي GPGPU
زبان برنامهنويسي ++C همچنان بر تمامي ابزارهاي برنامه نويسي گرافيكي و GPGPU حكمفرمايي ميكند و كليه ابزارهاي برنامهنويسي اين حوزه از جمله مشتقهاي آن به شمار ميروند و به نوعي گرامر و دستورات اصلي آن را با خود به همراه دارند. به طور كلي براي برنامهنويسي GPGPU سه روش وجود دارد كه به ترتيب به آنها اشاره ميكنيم:
1-APIها و زبانهاي برنامهنويسي گرافيكي
اين روش كه در ابتدا از آن بسيار استفاده ميشد، كاملا مشابه برنامه نويسي گرافيكي است، به اين معنا كه برنامه نويس با فرض آشنا بودن به يكي از API هاي گرافيكي مانند DirectX يا OpenGL و در نظر گرفتن تمامي محدوديتهاي موجود در مدل برنامه نويسي Stream ، برنامه غيرگرافيكي را به صورت گرافيكي شبيهسازي كرده و مراحل پياده سازي آن را دنبال ميكند. علاوه بر اين برنامهنويس ميتواند در صورت آشنا بودن به زبان برنامه نويسي Cg كه توسط شركت NVIDIA توسعه داده شده است، برنامه غيرگرافيكي خود را در اين محيط توسعه دهد. لازمه اين روش آشنايي كامل با محيط برنامهنويسيگرافيكي و محدوديتهاي برنامهنويسي GPGPU ميباشد به همين دليل برنامهنويس بيشتر بايد بر روي نحوه پيادهسازي و مرتفعكردن محدوديتها تمركز داشته باشد تا بر روي الگوريتمهاي برنامه خود.
2-زبانهاي برنامهنويسي GPGPU و كتابخانهها
با توجه به پيچيدگي روش اول، پياده سازي برنامههاي بزرگ توسط آن بسيار مشكل است به همين دليل زبانهاي برنامه نويسي خاص GPGPU ابداع شده اند كه با در نظر گرفتن محدوديتهاي مدل برنامهنويسي Stream به برنامهنويس امكان ميدهند تا تمركز بيشتري بر روي الگوريتمهاي برنامه خود داشته باشد، همچنين اين زبانها تعامل مستقيم برنامهنويس با APIگرافيكي را از بين بردهاند و برنامهنويس نيازي به آشنايي با آنها جهت پيادهسازي برنامه خود ندارد. تا كنون دو زبان برنامه نويسي GPGPU معرفي شده كه اين دو زبان عبارتند از Brook و Sh.
زبان برنامه نويسي Brook توسط تيم دانشگاه استنفورد توسعه يافته، اين زبان از جمله كاربرديترين زبانهاي برنامه نويسي GPGPU به شمار ميرود كه در نسخه بهينه شده برنامه Folding@Home براي پردازندهگرافيكيها نيز از آن بهره گرفته شده است. زبان برنامهنويسي Sh نيز توسط تيم دانشگاه واترلو توسعه يافته و تا كنون پروژههاي زيادي با آن اجرا شده است. علاوه بر اين كتابخانههاي متعددي وجود دارند كه امكان برنامه نويسي GPGPU را در پلتفورم .Net يا VC++ 6.0 فراهم كردهاند از جمله معروفترين اين كتابخانهها، Accelerator نام دارد كه توسط مايكروسافت توسعه يافته است.
كتابخانههاي اختصاصي پردازشتصوير متعددي نيز در اين معقوله عرضه شدهاند كه از مهمترين آنها مي توان به GPUCV و OpenVIDIA اشاره كرد. به كمك اين كتابخانهها ميتوان الگوريتمهاي پردازش تصوير و بيناييماشين را جهت پردازش توسط پردازندهگرافيكي توسعه داد.
3-پلتفورمهاي تجاري:
متداولترين روش برنامهنويسي GPGPU تا كنون همان روش دوم است اما طي چندماه اخير پلتفورمهاي تجاري ارائه شده كه نويد برنامهنويسي سادهتر نه تنها براي پردازندهگرافيكي بلكه به صورت كلي براي پردازندههاي پرسرعت با قابليت موازيسازي نظير پردازنده Cell را ميدهند. از اين دسته دو پلتفورم PeakStream و RapidMind را ميتوان نام برد، برخلاف PeakStream كه نسخه تجاري آن عرضه شده است، RapidMind هنوز در مراحل آزمايشي به سر ميبرد.
كاربردهاي غيرگرافيكي پردازندهگرافيكي
ساختار برنامههاي غيرگرافيكي كه به خوبي توسط پردازندهگرافيكي پردازش ميشوند به صورت مختصر در ابتداي مقاله توضيح داده شد نمونهاي از اين كاربردها كه تاكنون صورت گرفته عبارتند از :
· برنامههاي پيچيده ضرب ماتريسي و برداري
· روشهاي حل دستگاه معادلات خطي و دستگاه معادلات ديفرانسل
· برنامههاي شبيهسازي ساختار پروتئين
· برنامههاي مسيريابي شعاع نور ( Ray Tracing)
· برنامههاي شبيهسازي فيزيكي مانند شبيه سازي جريان سيال يا تصادم
· برنامههاي پيمايش و توليد گراف
· برنامههاي پردازش صوت يا تصوير
· برنامههاي بينايي ماشين
· برنامههاي محاسبه تبديل فوريه سريع (FFT)