بخشی از مقاله

چکیده

با توجه به هدف طراحی قابلیت حملپذیری OpenCL، علاوه بر استفاده این پلتفرم در محیط GPU، در پردازنده چندهستهای نیز قابل بهرهبرداری میباشد. یکی از مسائل مربوطه این پلتفرم در محیطهای CPU قابلیت حملپذیری عملکرد OpenCL است. در این مقاله تاثیر دانهبندی در بهبود عملکرد کرنل OpenCL مورد بررسی قرار میگیرد. چندین برنامه از بنچمارک Rodinia در پردازنده چندهستهای با مجموعه دادههای مختلف آزمایش میشود و اندازه بهینه دانهبندی برای هر یک تعیین میگردد.

با هدف شناسایی دانهبندی مناسب، برای دستههای مختلف برنامه است که در چه اندازه work-group، عملکرد بهتری دارند. نتایج نشان میدهد این متغیر در عملکرد برنامههای مختلف به شکل متفاوتی اثر میگذارد. در این مقاله، اثر ویژگیهای برنامههای بررسی شده در تاثیر دانهبندی بر عملکرد بررسی میشود. نتایج نشان میدهد که به طور کلی با کاهش اندازه work-group و یا به عبارت دیگر با افزایش تعداد work-group در فضای index، عملکرد برنامهها بهبود مییابد.

مقدمه

سیستمهای چندهستهای، با قراردادن چندین هسته روی یک تراشه واحد طراحی میشوند. با ایجاد این سیستمها، ابزارهای موازیسازی برای بهرهمندی بهتر از قابلیت هستههای تعبیهشده در این تراشهها مورد نیاز میباشد. از این رو زبانهای موازیسازی مقیاسپذیری برای بهرهمندی بهتر از این سیستمها بوجود آمدند تا همگام با پیشرفت سختافزار استفاده آن را نیز تسهیل نمایند. امروزه با تمرکز در محاسبات موازی، سیستمهای جدیدی وارد بازار شدند که از ترکیب معماریهایی مانند پردازندههای چندهستهای، پردازندههای سیگنالدیجیتالی، FPGAها و GPUها تشکیل شدهاند. این سیستمهای ناهمگن نیازمند محیط برنامهنویسی استاندارد و یکنواختی هستند تا بتوانند منابع مختلف را در یک چارچوپ مشترک مدیریت کنند.

امروزه به دلیل چند سطحی شدن محاسبات و بهرهبرداری بیشتر از پردازندههای ناهمگن مسئله مهم در زبانهای موازیسازی برخوردار بودن قابلیت حملپذیری است تا قابلیت پورت شدن برنامهها از یک معماری به معماری دیگر وجود داشته باشند.

در بین زبانهای موازی توسعهیافته برای این پلتفرمها، تنها زبان OpenCL دارای این ویژگی است و زبانهای دیگر از قبیل CUDA مختص پلتفرم سختافزاری واحدی هستند . OpenCL یک مدل برنامهسازی حملپذیری است که با بهروزرسانی بسیار اندک بخش های پیکربندی در کد برنامه در معماریهای مختلف نظیر GPU، DSP، پردازندههای چندهستهای و تسریعکنندهها با حافظه اشتراکی قابل اجرا است

اصولاً محاسبات با OpenCL در محیط GPU عملکرد بهتری دارند زیرا پلتفرم OpenCL با پلتفرم GPU مطابقت بیشتری دارد ولی نظر به اهمیت سیستمهای پردازنده چندهستهای و رایج بودن آنها در لپتاپها و دسکتاپها قابلیت استفاده از این پلتفرم و پورت برنامهها به این سیستمها با حفظ عملکرد تسریع، امکانات محاسبات فوق سریع با هزینه اندکی در اختیار کاربر قرار میدهد . پورت برنامههای تولید شده برای GPUصرفاً، از طریق کامپایل مجدد آنها برای محیط پردازنده چندهستهای، عملکرد محیط GPU را به همراه نخواهد داشت.[3] پارامترهای متفاوتی در حفظ عملکرد کارآمد هستند این تحقیق به بررسی یکی از پارامترها که دانهبندی در work-group است، میپردازد.

در این گزارش، ابتدا در بخش 2 به کارهای پیشین مرتبط اشاره میشود. دربخش 3 مدل OpenCL بررسی میشود. بخش 4 به کارهای انجام شده این تحقیق و نمودارها و نتایج تجربی و بخش 5 به تحلیل آنها پرداخته میشود. درنهایت در بخش 6 نتیجهگیری و پیشنهادات ارائه میگردد.

  کارهای مرتبط

Membarth و همکاران [4] پنج مدل برنامه نویسی موازی OpenMP - ، Cilk++، TBB، RapidMind و - OpenCL را تنها توسط یک برنامه بر روی پردازندههای چندهستهای آزمایش نمودند و از نظر قابلیت استفاده و عمکرد ارزیابی کردند. بر اساس نتایج آنها، OpenMP و TBB بهترین عملکرد را داشتند و OpenCL تنها برای مجموعه دادههایی با حجم بالا عملکرد بهتری داشت.

در بیشتر موارد OpenMP عمکرد بهتری از OpenCL داشت و دلایل این اختلاف عملکرد را پلتفرم و دانهبندی و کامپایلر OpenCL دانستند. آنها آزمایشهایشان را با پنج برنامه از بنچمارک [6] Rodinia با مجموعهدادههای مختلف بر روی سه پلتفرم چندهستهای انجام دادند و با دو کامپایلر Intel - و - AMD اندازه work-group برنامههای PathFinder، HotSpot، CFD و K-means را تغییر دادند و این دو کامپایلر را با هم مقایسه کردند.

Hwan Lee و همکاران [2] عملکرد برنامههای OpenCL را از جنبه معماری که شامل سربار زمانبندی، موازی سازی در سطح د ستورالعمل، سربار API و فضای آدرس و ... است در پردازندههای چندهستهای ارزیابی کردند. پلتفرم محا سباتی آنها از پردازنده چهاره ستهای و GPU ت شکیل شده است. با تغییر اندازه work-group در سه برنامه از بنچمارک [7] parboil م شاهده کردند که با افزایش اندازه work-group عملکرد در پردازنده افزایش مییابد. آنها همچنین دریافتند که تخ صیص کار بی شتر به work-itemها و یا به عبارتی دیگر کاهش تعداد آنها، عملکرد پردازنده را ارتقاء میبخشد.

Shen و همکاران [8] آزمایشهای خود را با سه برنامه از بنچمارک Rodinia با پیادهسازی OpenCL و OpenMP با مجموعهدادههای مختلف بر روی سه پلتفرم چندهستهای انجام دادند. عامل اصلی در عملکرد نامطلوب OpenCL نسبت به OpenMP، استفاده نادرست از cache در بین work-item ها دانست ند. تمرکز این م قا له پ یدا کردن علت های تفاوت عملکرد در دو مدل موازیسازی OpenMP و OpenCL در پردازندههای چندهستهای است. یکی از راهحلهای پیشنهادی آنها جهت بهبود عملکرد OpenCL، افزایش اندازه دانههای work-item در OpenCL است.

Shen و همکاران [9] تله1هایی را شناسایی کردند که منجر به کاهش عملکرد OpenCL در پردازنده میشود. راهحلهای پیشنهاد شده آنها از بین بردن کپیهای غیرضروری و بهبود data-locality با استفاده از cache و استفاده یا بهبود از SIMD در پردازندههای چندهستهای است که برای استفاده بهتر از cache افزایش دانهبندی را پیشنهاد دادند.

مدل OpenCL

محیط برنامهنویسی OpenCL دارای یک host و deviceهای محاسباتی است. سیستم host در استاندارد OpenCL، پردازنده است که با deviceهای OpenCL ارتباط دارد. deviceهای OpenCL میتواند GPU، DSP، پردازنده و شتابدهندهها باشد.

شکل 1 مدل پلتفرم OpenCL را نشان میدهد که در آن device محاسباتی شامل چندین واحد محاسباتی2 است. هر یک از واحدهای محاسباتی نیز شامل چندین عناصر پردازشی است. عناصر پردازشی یک دستور العمل واحد با چندین داده3 یا یک برنامه واحد با چندین داده4 را اجرا میکنند. این دستورالعملها بخش کرنل OpenCL را تشکیل میدهند.

محاسبات موازی در deviceهای محاسباتی در یک فضای مسئله -n بعدی تعریف میشود. زمانی که کرنل برای اجرا، در صف قرار میگیرد، یک فضای index تعریف میشود. در این فضای index هر عنصر مستقل که یک نمونه از کرنل مسئله است، work-item نامیده میشود. همه work-itemها در توابع کرنل کار یکسان اما با دادههای مختلف انجام میدهند. زمانی که کرنل در صفاجرا قرارمیگیرد، فضای index باید برای دربرگرفتن تعداد کامل work-itemها برای اجرا تعریف شود. این فضای index ، NDRANGE یا تعداد بعد مسئله نام دارد و -nبعدی است که n میتواند با توجه به ابعاد مسئله1، 2 و 3 باشد.

work-itemها میتوانند با هم ترکیب شوند و work-group را ایجاد نمایند. اندازه هر work-group توسط فضای index محلی تعریف میشود.

مدل حافظه دارای چهار بخش شامل حافظه سراسری5، حافظه ثابت، حافظه محلی و حافظه خصوصی است که هر چهار بخش از حافظه در host و deviceهای محاسباتی قابل دسترسی هستند. همهی work-itemها در هر work-group قابلیت خواندن و نوشتن در host و deviceهای محاسباتی را در حافظه سراسری دارند. این بخش از حافظه، تنها توسط host در زمان اجرا تخصیص مییابد.

شکل :1 مدل پلتفرم .[10] OpenCL

حافظه ثابت، یک منطقه از حافظه سراسری است که در زمان اجرای کرنل ثابت میماند. work-itemها تنها در آن بخش، قابلیت خواندن دارند. host می تواند هم دسترسی خواندن و نوشتن داشته باشد.

حافظه محلی، یک بخشی از حافظه استفاده شده برای دادههای اشتراکی توسط work-item در work-group است. همهی work-itemها در یک work-group حقوق دسترسی برای خواندن و نوشتن در این فضای حافظه را دارند. حافظه خصوصی بخشی از حافظه است که تنها برای یک work-item قابل دسترس است

  نتایج تجربی

آزمایشها در محیط OpenCL تحت سیستم عامل لینوکس، توزیع Ubuntu، نسخهی 14.04 با کامپایلر AMD-APP-SDK نسخه ی v3.0.130.135، بر روی پلتفرم چهارهستهای - Intel core i5 -4460 3.20GHZ - انجام شده است. در این آزمایشها هشت برنامه از بنچمارک Rodinia، شامل NW، PathFinder، CFD، Particle Filter، HotSpot، K-means، LUD وBFS است با مجموعهدادههای مختلف بر روی این پلتفرم، به اجرا گذاشته شد.

اجرای یک برنامه OpenCL دارای چهار مرحله است. این مراحل عبارتند از: - 1 پیکربندی و مقداردهی اولیه. - 2 انتقال دادههای مسئله از host به - 3 .device اجرای کرنل. - 4 انتقال نتایج حل مسئله از device به .host هر یک از این مراحل در زمان اجرا سهمی در هزینه زمانی و یا عملکرد دارند. از زمان های انتقال host به device و device به host میتوان صرف نظر کرد زیرا device و host در CPU چندهستهای در یک تراشه واحد هستند. همچنین میتوان زمان پیکربندی را نادیده گرفت زیرا مقداردهی اولیه و پیکربندی برای هر برنامه OpenCL تنها یکبار اتفاق میافتد. در نتیجه زمان اجرا برنامه برابر با زمان اجرا کرنل است.

دانهبندی به دو شکل تعیین میگردد: - 1تغییر - 2 workload تغییر اندازه work-group که با افزایش هر یک از این کمیتها دانهبندی درشتتر و با کاهش آن، دانهبندی ریزتر میشود. در ادامه توضیح دانهبندی درشتتر را برای هر دو شکل به ترتیب ذکر میشود. با افزایش workload، بار محاسباتی در هر work-item افزایش مییابد. به این صورت که تعداد work-itemها در یک work-group و همچنین در فضای index کاهش مییابد. با افزایش اندازه work-group، تعداد work-itemها در یک work-group افزایش مییابد و تعداد work-group در فضای index کاهش مییابد.

در این تحقیق با تغییر اندازه work-group برنامههای بررسی شده در بنچمارک، زمان اجرا آن اندازهگیری گردید. تعداد اجرای برنامه برای هریک از اندازهها، 10 در نظر گرفته شده و زمان اجرا، بر حسب میانگین تعداد اجراها محاسبه میشود. زمان اجرا هر کدام از برنامهها، با زمان اجرا با اندازه work-group در حالت پیشفرض بنچمارک که برای محیط CPU آزمایش شده است مقایسه شده و تسریع آن در جدول 1 گزارش شده است. مقدار تسریع در این جدول، نسبت زمان اجرا با اندازه work-group در حالت پیشفرض بنچمارک، به زمان اجرایی است که حداقل زمان را دارد. برای برنامه HotSpot در مجموعه داده 4K تسریع قابل محاسبه نیست زیرا عملکرد بهینه برای اندازه work-group در حالت پیشفرض بنچمارک است.

برای تمام شکلهای نموداری که در زیر گزارش شدند، محور افقی اندازه work-group را نشان میدهد. به طور مثال WG=2x2 به این معنی است که اندازه 2 work-group در 2 میباشد و تعداد work-itemها برابر با 4 است و همچنین کل فضای index به work-groupهای 2 در 2 تقسیمبندی میشود. محور عمودی نمودار زمان اجرای برنامه مورد نظر را بر حسب میلی ثانیه نشان میدهد.

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید