با سلام،
در پاسخ به یکی از دوستان در مورد این مبحث تصمیم گرفتم که چیزهایی که تو این مدت در مورد OpenCL یاد گرفتم (و زیاد هم نیست) رو اینجا قرار بدم تا دوستان دیگه هم بتونن استفاده کنن. از اونجایی که بخش مناسبی برای تاپیک پیدا نکردم، همین جا در صفحه ی اصلی ایجادش می کنم، امیدوارم مدیر محترم تاپیک رو به جایی که خودشون صلاح می دونن انتقال بدن!
برای شروع کار با OpenCL باید بسته ی نرم افزاری مربوطه رو با توجه پلت فرمی که قراره رو ش کار کنید دانلود و نصب کنید. منظور از پلت فرم AMD یا Intel بودنه. دو ستانی که از AMD استفاده می کنن، برای دانلود بسته ی مربوطه به مسیر زیر برن و بسته 32 یا 64 بیتی بودن ویندوزشون، بسته ی مناسب رو دانلود کنن:بعد از نصب نرم افزار لازمه که تغییراتی در رجیستری ایجاد کنید تا در زمان اجرای برنامه ها روی GPU مشکلی پیش نیاد. برای این کار بسته ی OpenCLTemplate رو از مسیر زیر دانلود کنید:و فایل OpenCL Template رو اجرا کنید. با فشردن دکمه ی Write recommended values to registry عملیات مربوطه انجام می شه.
قبل از ادامه باید زبانی که قصد دارید تا برنامه تون رو باهاش بنویسید، انتخاب کنید. فکر می کنم هر زبانی این قابلیت رو داره اما C و C# در اولویت هستن.
قبل از شروع برنامه نویسی لازمه که تنظیماتی رو در کامپایلرتون اعمال کنید. در اینجا به تنظیمات Visual Studio می پردازیم.
برای زبان C کارهای زیر رو انجام بدید:
در مسیر زیر:
در مسیر زیر:
در مسیر:
در مسیر زیر:
حالا همه چی سر جاشه، فقط باید header file مربوطه که همون “CL\cl.h” هست رو هم اضافه کنید.
اما برای C# کار ساده تره، و فقط نیاز به دو DLL دارید که در بسته ی OpenCL Template موجودند. البته این در صورتیه که بخواید از این کتابخانه ها استفاده کنید چون کتابخانه های دیگه ای هم برای این کار نوشته شده. پس دو کتابخانه ی Cloo.dll و OpenclTemplate.dll رو داخل پوشه ی برنامه کپی کنید و داخل Visual Studio و از مسیر Project/Add reference و تب Browse دو کتابخانه ی گفته شده رو اضافه کنید. برای سهولت برنامه نویسی می تونید دستور using OpenCLTemplate رو هم در بالای برنامه اضافه کنید.
برای نوشتن برنامه به زبان C لازمه که kernel رو بالای Main و به صورت یه رشته ی const تعریف کنید و هر خط برنامه داخل “ “ قرار بگیره و به \n ختم بشه.
اما در C# کافیه یه string تعریف کنید و کل کد Kernel رو داخل “ “ قرار بدید.
تنها دستور مهمی که در روال kernel باید مورد استفاده قرار بگیره، دستور مربوط به یافتن شماره ی واحد پردازشیه که با get_global_id(0) تعیین می شه. همون طور که می دونید واحدهای پردازشی در سه بعد و به صورت یه مکعب کنار هم قرار گرفتند و برای فهمیدن موقعیت واحد مورد نظر در بعدهای مختلف از دستور فوق استفاده می شه. صفر داخل پرانتز بعد x رو نشون می ده و برای ابعاد y و z هم از 1 و 2 استفاده می شه. سایر دستورات مثل یه زیربرنامه ی معمولیه اما باید به عدم تداخل کار پردازنده ها روی یه حافظه ی عمومی دقت ویژه ای داشته باشید.
در پاسخ به یکی از دوستان در مورد این مبحث تصمیم گرفتم که چیزهایی که تو این مدت در مورد OpenCL یاد گرفتم (و زیاد هم نیست) رو اینجا قرار بدم تا دوستان دیگه هم بتونن استفاده کنن. از اونجایی که بخش مناسبی برای تاپیک پیدا نکردم، همین جا در صفحه ی اصلی ایجادش می کنم، امیدوارم مدیر محترم تاپیک رو به جایی که خودشون صلاح می دونن انتقال بدن!
برای شروع کار با OpenCL باید بسته ی نرم افزاری مربوطه رو با توجه پلت فرمی که قراره رو ش کار کنید دانلود و نصب کنید. منظور از پلت فرم AMD یا Intel بودنه. دو ستانی که از AMD استفاده می کنن، برای دانلود بسته ی مربوطه به مسیر زیر برن و بسته 32 یا 64 بیتی بودن ویندوزشون، بسته ی مناسب رو دانلود کنن:بعد از نصب نرم افزار لازمه که تغییراتی در رجیستری ایجاد کنید تا در زمان اجرای برنامه ها روی GPU مشکلی پیش نیاد. برای این کار بسته ی OpenCLTemplate رو از مسیر زیر دانلود کنید:و فایل OpenCL Template رو اجرا کنید. با فشردن دکمه ی Write recommended values to registry عملیات مربوطه انجام می شه.
قبل از ادامه باید زبانی که قصد دارید تا برنامه تون رو باهاش بنویسید، انتخاب کنید. فکر می کنم هر زبانی این قابلیت رو داره اما C و C# در اولویت هستن.
قبل از شروع برنامه نویسی لازمه که تنظیماتی رو در کامپایلرتون اعمال کنید. در اینجا به تنظیمات Visual Studio می پردازیم.
برای زبان C کارهای زیر رو انجام بدید:
در مسیر زیر:
Project Properties->c/c++->General-> Additional Include
فولدر Include در محل نصب AMD APP که اغلب در Program files هستش رو آدرس بدید.در مسیر زیر:
Preprocessor->Preprocessor-> definition
مقدار ATI_OS_WIN رو اضافه کنید.در مسیر:
Linker->General->Additional library
فولدر LIB/X86 رو از محل نصب AMD APP ادرس بدید.در مسیر زیر:
Input->Additional Dependencies
مقدار OpenCL.lib رو اضافه کنید. حالا همه چی سر جاشه، فقط باید header file مربوطه که همون “CL\cl.h” هست رو هم اضافه کنید.
اما برای C# کار ساده تره، و فقط نیاز به دو DLL دارید که در بسته ی OpenCL Template موجودند. البته این در صورتیه که بخواید از این کتابخانه ها استفاده کنید چون کتابخانه های دیگه ای هم برای این کار نوشته شده. پس دو کتابخانه ی Cloo.dll و OpenclTemplate.dll رو داخل پوشه ی برنامه کپی کنید و داخل Visual Studio و از مسیر Project/Add reference و تب Browse دو کتابخانه ی گفته شده رو اضافه کنید. برای سهولت برنامه نویسی می تونید دستور using OpenCLTemplate رو هم در بالای برنامه اضافه کنید.
برای نوشتن برنامه به زبان C لازمه که kernel رو بالای Main و به صورت یه رشته ی const تعریف کنید و هر خط برنامه داخل “ “ قرار بگیره و به \n ختم بشه.
اما در C# کافیه یه string تعریف کنید و کل کد Kernel رو داخل “ “ قرار بدید.
تنها دستور مهمی که در روال kernel باید مورد استفاده قرار بگیره، دستور مربوط به یافتن شماره ی واحد پردازشیه که با get_global_id(0) تعیین می شه. همون طور که می دونید واحدهای پردازشی در سه بعد و به صورت یه مکعب کنار هم قرار گرفتند و برای فهمیدن موقعیت واحد مورد نظر در بعدهای مختلف از دستور فوق استفاده می شه. صفر داخل پرانتز بعد x رو نشون می ده و برای ابعاد y و z هم از 1 و 2 استفاده می شه. سایر دستورات مثل یه زیربرنامه ی معمولیه اما باید به عدم تداخل کار پردازنده ها روی یه حافظه ی عمومی دقت ویژه ای داشته باشید.