فناوری بارگذاری خودکار GPU برای محیط IoT باز | Automatic GPU Offloading Technology for Open IoT Environment جدول مقالات آزادابزار تفکیک و ترجمه متون علمیمقالات اینترنت اشیاء
تماس با ما
 
بدان
 
امروز شنبه ، ۱۴۰۰/۰۷/۰۳
 
کلیه مقالات

فناوری بارگذاری خودکار GPU برای محیط IoT باز

Automatic GPU Offloading Technology for Open IoT Environment

فناوری بارگیری خودکار GPU برای محیط IoT باز:

خلاصه:

اخیراً ، فناوری های IoT (Internet of Things) پیشرفت کرده اند.

برای غلبه بر هزینه بالای توسعه خدمات IoT با ادغام در دستگاه ها و خدمات عمودی ، Open IoT خدمات مختلف IoT را با یکپارچه سازی دستگاه ها و خدمات بصورت افقی توسعه می دهد.

برای Open IoT ، ما فناوری Tacit Computing را برای کشف وسایلی که کاربران داده به صورت درخواستی نیاز داشته باشند پیشنهاد کرده و از آنها به صورت پویا استفاده می کنیم.

با این حال ، Tacit Computing موجود عملکرد را در نظر نمی گیرد.

بنابراین ، در این مقاله ، یک فناوری تخلیه بارگذاری خودکار GPU (واحد پردازش گرافیکی) را به عنوان یک فناوری ابتدایی جدید Tacit Computing پیشنهاد می کنیم که از الگوریتم ژنتیک برای استخراج مناطق تخلیه مناسب از عبارات حلقه موازی ساز به طور خودکار استفاده می کند.

این می تواند عملکرد برنامه های IoT را بهبود بخشد.

ما فناوری تخلیه GPU پیشنهادی خود را با استفاده از آن در پنج برنامه C / C ++ پردازش تصویر ، دستکاری ماتریس و غیره ارزیابی می کنیم تا اثربخشی آن را تأیید کنیم و دریابیم که می تواند آنها را بیش از 10 برابر سریعتر از تنها پردازنده ها در طی 1 ساعت تنظیم کند. زمان.

مقدمه:

با پیشرفت فناوری IoT (اینترنت اشیا) (به عنوان مثال ، صنایع 4.0 و غیره [1] - [3]) ، برنامه های مختلف IoT ظاهر شده است.

برنامه های IoT معمولی داده ها را از طریق دستگاه های IoT جمع آوری می کنند ، داده ها را به ابر منتقل می کنند ، داده ها را با استفاده از فناوری ابر تجزیه و تحلیل می کنند (به عنوان مثال ، [4] [5]) و وضعیت منطقه حاوی دستگاه را به موقع تجسم می کنند.

با این حال ، برنامه های IoT فعلی تمایل دارند که یک راه حل یک طرفه باشند که در آن دستگاه ها ، شبکه و خدمات بطور عمودی برای اهداف مشخص شده یکپارچه شوند و این هزینه بالایی را متحمل می شود.

برای کاهش هزینه ها و توسعه خدمات مختلف ، محققان در مورد IoT Open (به عنوان مثال ، Open IoT Platform Project Tron) [6]) تحقیق کرده اند ، که دستگاه ها را برای برنامه های مختلف به اشتراک می گذارد و به طور پویا منابع دستگاه ها ، شبکه ها و ابر را برای برنامه های مختلف هماهنگ می کند.

یک مثال برنامه IoT Open ، اشتراک دوربین های شبکه ای از سازمان های مختلف در یک شهر برای اهداف مختلف مانند جستجوی حیوانات خانگی گمشده و کشف تروریست ها با استفاده از فناوری های پردازش جریان مانند Spark [7] و Storm [8] است.

با این وجود ، در این مثال ، پردازش تصویر فیلم های دوربین برای چندین منظور نیاز به منابع محاسبه زیادی دارد ، صرف نظر از اینکه تصاویر روی دستگاه یا ابر مورد تجزیه و تحلیل قرار می گیرند.

علاوه بر این ، سیستم ها به روز شده اند تا بهترین استفاده را از پیشرفت های اخیر در سخت افزار برای انطباق با موارد مختلف مانند IoT داشته باشند.

برخی از ارائه دهندگان از سرورهای مخصوص با GPU های قدرتمند (واحد پردازش گرافیک) برای پردازش برنامه های گرافیکی یا سرورهای ویژه با FPGA (فیلد های قابل برنامه ریزی درست در زمینه) برای تسریع در منطق های محاسباتی خاص مانند پردازش سیگنال استفاده می کنند.

به عنوان مثال ، AWS (خدمات وب آمازون) [9] GPU ها و FPGA ها را برای استفاده کاربران در صورت تقاضا فراهم می کند.

موتور جستجوی مایکروسافت بینگ سعی می کند از FPGA ها برای بهینه سازی پردازش جستجو استفاده کند [10].

اکنون می توانیم با استفاده از فن آوری های هماهنگی خدمات مانند [11] - [13] در محیط های IoT Open برنامه های مختلف IoT را توسعه دهیم.

کاربران همچنین انتظار دارند که از پیشرفت های اخیر در سخت افزار ، برنامه های خود را با کارایی بالا (به عنوان مثال ، زمان پردازش کوتاه) اجرا کنند.

با این وجود ، برای دستیابی به کارایی بالا ، باید برنامه های مناسب را با در نظر گرفتن سخت افزار ناهمگن برنامه ریزی و پیکربندی کنیم و بتوانیم از فناوری هایی مانند CUDA (محاسبه معماری دستگاه متحد) [14] و OpenCL (زبان محاسبات آزاد) استفاده کنیم [15].

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

ما قبلاً Tacit Computing را به عنوان یک پلت فرم IoT Open ارائه می دادیم که با کشف و هماهنگی منابع مناسب برای کاربران از دستگاه ، شبکه و لایه های ابری ، خدمات شخصی سازی شده ای را در اختیار کاربران قرار می دهد [16].

بنابراین ، هدف فعلی ما بهبود محاسبات Tacit موجود و استفاده مؤثر از منابع محاسباتی (نه تنها CPU (واحدهای پردازش مرکزی) بلکه GPU ها و FPGA ها) در یک محیط IoT Open است.

برای دستیابی به این هدف ، در این مقاله ، ما پیشنهاد می کنیم و از تکنولوژی بارگذاری خودکار GPU خودکار برای نرم افزار منبع باز (OSS) C / C ++ منطق برنامه استفاده و ارزیابی کنیم تا کاربران عمومی بتوانند از GPU ها استفاده کنند و به طور خودکار عملکردها را بهبود بخشند.

این مقاله سه سهم دارد.

- با جستجوی مناطق بارگیری برنامه با استفاده از GA (الگوریتم ژنتیک) ، فناوری ما مناطق بارگیری را بطور خودکار و بدون نیاز به زمان و مهارت زیادی استخراج می کند.

این برنامه های IoT را برای کاربران عام امکان می دهد از GPU ها بدون مهارت و دانش خاصی استفاده کنند.

- با استفاده از روش فوق ، عملکرد بالایی از برنامه های کاربردی کاربر عمومی برای پردازنده هایی مانند پردازش تصویر را با استفاده از کتابخانه های پردازش تصویر عادی CPU ، که در مطالعات GPGPU معمولی (GPU General Purpose) در نظر گرفته نشده اند ، تأیید نمی کنیم.

این می تواند GPU انواع برنامه بارگذاری مجدد GPU را افزایش دهد ، که محاسبات علمی مورد اصلی به صورت مرسوم است.

بارگیری به GPU در رایانه های عمومی انجام می شود ، نه روی سرورهای مخصوص GPU مخصوص HPC (محاسبات با کارایی بالا) مانند رایانه های فوق العاده و خوشه های HPC.

در حال حاضر GPU در مکان های مختلفی مانند دوربین های شبکه Axis قرار دارد.

با استفاده از روش خود می توانیم نه تنها سرورهای دیتاسنتر بلکه GPU های عمومی را در دستگاه ها ، HGW (Home Gateways) ، لبه های شبکه و غیره بارگذاری کنیم.

بقیه این مقاله به شرح زیر برگزار می شود.

در بخش 2 ، ما فناوری های سخت افزاری ناهمگن موجود را مرور می کنیم.

در بخش 3 ، Tacit Computing را توضیح داده و تخلیه GPU اتوماتیک را به عنوان فناوری ابتدایی جدید آن پیشنهاد می کنیم.

در بخش 4 ، ما اجرای را برای اثربخشی اثربخشی روش پیشنهادی توضیح می دهیم.

در بخش 5 ، روش پیشنهادی را ارزیابی کرده و نتایج را مورد بحث قرار می دهیم.

بخش 6 کار مرتبط را تشریح می کند و بخش 7 مقاله را خلاصه می کند.

II- فن آوری های سخت افزار هتروژنی موجود:

برای GPGPU که از قدرت محاسباتی GPU نه تنها برای پردازش گرافیک استفاده می کند ، CUDA یک محیط اصلی توسعه است.

برای کنترل سخت افزار ناهمگن مانند GPU ها ، FPGA ها و بسیاری از CPU های اصلی به طور یکنواخت ، OpenCL یک استاندارد استاندارد است که به طور گسترده استفاده می شود.

CUDA و OpenCL نه تنها به پسوند زبان C بلکه توضیحات اضافی مانند کپی حافظه بین دستگاه های پردازنده گرافیکی یا FPGA و CPU نیاز دارند.

به دلیل این مشکلات برنامه نویسی ، تعداد کمی از برنامه نویسان CUDA و OpenCL وجود دارد.

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

OpenACC [17] یکی از مشخصات مبتنی بر بخشنامه است و کامپایلر PGI [18] یکی از کامپایلرهای مستقر در دستورالعمل است.

به عنوان مثال ، کاربران دستورالعمل های OpenACC را بر روی کدهای C / C ++ / Fortran مشخص می کنند تا به صورت موازی پردازش شوند و کامپایلر PGI امکان پردازش موازی و خروجی ها را بررسی می کند و پرونده های باینری را اجرا می کند تا روی GPU ها و CPU ها اجرا شود.

IBM JDK [19] از بارگیری GPU مشخص شده توسط عبارات جاوا لامبدا برای مناطق پردازش موازی پشتیبانی می کند.

با استفاده از این فناوری ها ، برنامه نویسان نیازی به در نظر گرفتن کپی داده حافظه بین CPU و GPU ندارند.

به این ترتیب ، CUDA ، OpenCL ، OpenACC و دیگران از پردازش بارگذاری GPU پشتیبانی می کنند.

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

به عنوان مثال ، هنگامی که کاربران از فناوری موازی سازی خودکار مانند کامپایلر اینتل استفاده می کنند [20] ، مناطق ممکن از پردازش موازی مانند جمله های حلقه "for" استخراج می شوند.

با این حال ، اجرای ساده موازی اجرای با GPU به دلیل سربار پردازنده و پردازنده انتقال حافظه GPU زیاد نیست.

برای دستیابی به اجراهای بالا با GPU ، CUDA یا OpenCL باید توسط برنامه نویسان بسیار ماهر تنظیم شوید یا منطقه بارگیری مناسب باید توسط کامپایلر PGI یا دیگران جستجو شود.

کار [21] به طور خودکار جستجو در منطقه بارگیری مناسب از برخی از ابزارهای معیار توسط آزمایش های رابین گرد و اندازه گیری عملکرد اجرای موازی / غیر موازی برای هر جمله حلقه.

بنابراین ، دستیابی به عملکردهای بالا برای کاربران بدون مهارت GPU دشوار است.

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

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

این باعث می شود تا کاربران بتوانند هزینه کل را کاهش دهند ، زیرا اگرچه منابع GPU افزایش یافته اند ، اما منابع CPU مانند ماشین های مجازی بسیار کاهش می یابد.

توجه داشته باشید که پردازش اضافه بار ما در پس زمینه استفاده واقعی برنامه IoT کاربران اجرا می شود.

Tacit Computing [16] ما بر اساس درخواست کاربران از دستگاههای مناسب استفاده می کند و خدمات موقت را ایجاد می کند.

به عنوان مثال ، Tacit Computing از توابع پردازش تصویر و دوربین های شبکه برای ایجاد خدمات نظارت مستمر برای یک شخص مشخص با تعویض دوربین های شبکه در یک شهر استفاده می کند.

در این مثال ، ما در روز اول خدمات استفاده آزمایشی را در اختیار کاربران قرار می دهیم ، بارگیری از تجزیه و تحلیل تصویر را در پس زمینه انجام می دهیم و از روز دوم خدمات تولیدی با قیمت مناسب ارائه می دهیم.

III- فن آوری اخطار GPU خودکار:

در این بخش ، فناوری تخلیه GPU اتوماتیک را به عنوان یک فناوری ابتدایی جدید Tacit Computing پیشنهاد می کنیم.

بخش 3.1 بررسی Tacit Computing است که ما به عنوان بستری برای Open IoT پیشنهاد داده ایم.

در بخش 3.2 مراحل بارگذاری خودکار به سخت افزار ناهمگن برای برنامه های IoT از Tacit Computing توضیح داده شده است.

سرانجام ، زیربخش 3.3 فناوری تخلیه GPU اتوماتیک را پیشنهاد می کند.

A- طرح کلی محاسبه Tacit:

Tacit Computing یک فناوری برای ایجاد خدمات شخصی سازی شده کاربر با کشف و هماهنگی منابع مناسب از لایه های ابری ، شبکه و دستگاه برای کاربران در آن زمان است (شکل 1) [16].

Tacit Computing یک ساختار سه لایه دارد ، اما مفهوم آن پردازش هرچه بیشتر در لایه دستگاه است که به سایت کاربر نزدیک است برای مقابله با تغییرات در زمان واقعی است.

با پردازش در لایه دستگاه ، Tacit Computing می تواند ترافیک شبکه را کاهش داده و از نشت اطلاعات خصوصی جلوگیری کند.

محاسبات Tacit از فناوری داده های زنده و کشف مجازی دستگاه استفاده می کند ، که کلیدهایی برای کشف و استفاده از دستگاه های مناسب برای کاربران هستند.

داده های زنده کشف فن آوری دستگاه هایی را که داده های لازم را برای کاربران فراهم می کند کشف می کند.

ما فرض می کنیم مثالی که در آن هشدارهای راهنمایی یا هشدار برای شخصی که در دوربین ثابت قرار دارد فیلمبرداری شود.

در این حالت ، فرد فقط چند ثانیه در دوربین است و فقط به معجون ویدئویی که در آن ظاهر می شود ، اهمیت می دهد.

به این ترتیب داده هایی که از لحظه به لحظه تغییر می کنند داده های زنده خوانده می شوند.

برای کشف داده های زنده لازم برای کاربران ، فن آوری کشف داده های زنده توابع را به جای انتظار برای رسیدن به لایه ابر ، تجزیه و تحلیل توابع را در لایه های پایین تر توزیع می کند.

به عنوان مثال ، وضعیتی که دوست کاربر در یک مسابقه ماراتن شرکت می کند و کاربر می خواهد فیلم هایی را ببیند که در آن دوست ظاهر می شود.

در این حالت کاربر شماره کلید دوست را به عنوان کلید جستجو در Tacit Computing وارد می کند.

Tacit Computing توابع تجزیه و تحلیل تصویر مانند OpenCV [22] را به دروازه یا لبه های شبکه ای که دارای دوربین هستند ، توزیع می کند و توابع فیلم ها را تجزیه و تحلیل می کنند و با استفاده از آنالیز عکس شماره دوست را استخراج می کنند و سپس Tacit Computing دوربینی را که دوست را در آن فیلم برداری کرده است ، کشف می کند. آن زمان.

در مرحله بعد ، Tacit Computing پس از کشف آنها با استفاده از داده های لازم کاربر ، باید از دستگاه ها استفاده کند.

از آنجا که دستگاه های IoT توسط بسیاری از شرکت ها توسعه یافته و دارای پروتکل های مختلف ، واسط ها ، آدرس ها و غیره هستند ، فناوری مجازی سازی دستگاه تفاوت هایی را بین پروتکل های دستگاه ، رابط ها ، آدرس ها و غیره پنهان می کند.

در مثال ، روش دسترسی برای هر دوربین متفاوت است.

Tacit Computing هر درخواست را از درخواستهای متداول مانند دستیابی به تصویر دوربین به درخواستهای خاص برای دوربینهای جداگانه توسط هر آداپتور دستگاه در یک دروازه تبدیل می کند.

به این ترتیب ، کاربران می توانند بدون در نظر گرفتن تفاوت بین دستگاه ها از دستگاه ها استفاده کنند.

وقتی از دستگاه ها استفاده می کنیم ، می توانیم از خدمات وب معنایی استفاده کنیم که هر منبع را با استفاده از Semantic Web RDF / OWL استفاده می کنند (مثلاً ، [23] - [25]).

ب- بهبود با بارگذاری پردازش خاص برای برنامه های کاربردی Tacit Computing:

به این ترتیب ، Tacit Computing بخشی از مفهوم Open IoT را برای کشف و استفاده از دستگاه های مناسب برای کاربران تحقق می بخشد.

اما ، هنگامی که Tacit Computing از دستگاه ها به صورت پویا استفاده می کند ، هزینه و عملکرد نادیده گرفته می شود.

اگر نمونه زیر بخش قبلی ، نظارت بر یک دونده ماراتن نیست ، اما به دنبال تروریست ها و یا جستجوی افراد مفقود شده توسط دوربین های شهر می باشد ، نیاز به خدمات تحلیل مداوم و معقول فیلم های دوربین دار است.

بنابراین ، برای مرحله بعدی Tacit Computing ، هدف ما بهبود کارایی با تخلیه مناسب و تخصیص عملکرد در دستگاه ، شبکه و لایه های ابری است.

ما در نظر داریم بهبود کارآیی را عمدتاً با بارگذاری پردازش عملکردی به سخت افزارهای ناهمگن مانند GPU / FPGA انجام دهیم.

برای بارگذاری پردازش عملکرد ، Tacit Computing مساحت offload را از کدهای منبع برنامه های کاربردی برای کاربران استخراج می کند ، زبان واسطه را صادر می کند ، فایل باینری حاصل از زبان واسطه را روی دستگاه تأیید مستقر می کند ، آن را اجرا می کند و اثر offload را تأیید می کند.

پس از تکرار تأیید و تعیین منطقه تخلیه مناسب ، Tacit Computing پرونده باینری را به محیط تولید اعزام می کند و آن را به عنوان یک سرویس تولید ارائه می دهد.

در اینجا مراحل تخلیه بارگذاری را با استفاده از شکل 2 توضیح می دهیم.

در 1-1 ، Tacit Computing برنامه های کاربرانی مانند تجزیه و تحلیل تصویر را مشخص می کند و آنها را به عملکرد تخلیه خودکار مشخص می کند.

در 1-2 ، عملکرد تخلیه خودکار ، کدهای منبع برنامه را تجزیه و تحلیل کرده و ساختار پردازش برنامه مانند جمله حلقه ، یک تماس کتابخانه ای خاص مانند FFT (Fast Fourier Transform) یا موارد دیگر را تعیین می کند.

در 1-3 ، عملکرد تخلیه اتوماتیک ، منطقهای قابل تخلیه را به GPU یا FPGA مانند جمله حلقه و FFT تشخیص می دهد و زبان منطقی را برای منطق بارگذاری خارج می کند.

در 1-4 ، فایلهای میانی را بیرون می آورد.

همانطور که در زیربخش بعدی با جزئیات توضیح می دهیم ، استخراج واسطه زبان نه تنها یکبار اتفاق می افتد.

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

در 2-1 ، عملکرد تخلیه اتوماتیک فایل باینری حاصل از زبان میانی را به دستگاه مجهز به GPU و FPGA در یک محیط تأیید مستقر می کند.

در 2-2 ، پرونده های مستقر را اجرا می کند و عملکردهای بارگیری را اندازه گیری می کند.

برای تنظیم منطقه با بارگیری مناسب تر با استفاده از نتایج اندازه گیری عملکرد ، عملکرد بارگیری خودکار به مرحله 1-3 باز می گردد و الگوی دیگری را استخراج می کند.

در 2-3 ، الگوی نهایی را برای مشخص کردن منطقه تخلیه بار تعیین می کند و فایلهای باینری را به محیط تولید برای کاربر مستقر می کند.

در 2-4 ، پس از استقرار پرونده های باینری ، برای نمایش اجراها به کاربران ، موارد آزمون عملکرد از پرونده آزمون DB (بانک اطلاعاتی) استخراج می شود و موارد استخراج شده به طور خودکار توسط جنکینز یا ابزارهای دیگر اجرا می شوند.

در 2-5 ، اطلاعاتی از قبیل قیمت ، عملکرد و غیره بر اساس نتایج آزمون عملکرد به کاربران ارائه می شود و کاربران تصمیم می گیرند که آیا شروع به پرداخت هزینه خدمات IoT کنند.

در اینجا ، ما می توانیم از فن آوری های موجود مانند [26] برای استقرار دسته ای به محیط های تولید و [27] برای تست های اتوماتیک استفاده کنیم.

مراحل 1-1 تا 2-5 در پس زمینه سرویس IoT کاربر انجام می شود.

به عنوان مثال ، آنها قرار است در اولین روز استفاده آزمایشی انجام شوند.

برای کاهش هزینه ها ، ما در نظر داریم بهینه سازی فرآیند اضافه بار GPU / FPGA را در پس زمینه در نظر بگیریم.

هدف اصلی این مقاله بارگذاری GPU است ، و ما بعداً آن را با جزئیات توضیح می دهیم.

گزارش بارگیری FPGA در سایر مقالات را گزارش می کنیم.

ج- پیشنهاد فناوری بارگذاری خودکار GPU با استفاده از الگوریتم ژنتیک:

در این زیر بخش ، ما یک GPU به صورت خودکار بارگذاری منطق برنامه های کاربردی کاربر را به عنوان یک فناوری اساسی Tacit Computing پیشنهاد می کنیم.

بارگیری خودکار GPU یک فرآیند برای تکرار مراحل 1-3 تا 2-2 در بخش قبلی و دریافت کد تخلیه بار در مرحله 2-3 است.

به طور کلی گفته می شود که GPU تأخیر را تضمین نمی کند بلکه برای بهبود کارایی با پردازش موازی مناسب است.

برنامه های مختلف IoT وجود دارد ، اما نمونه های بارز پردازش تصویر برای فیلم های دوربین و پردازش یادگیری ماشین برای مقادیر زیادی از تجزیه و تحلیل داده های حسگر است که دارای بسیاری از فرآیندهای حلقه هستند.

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

با این حال ، همانطور که در بخش 2 شرح داده شده است ، عملکرد بالا نیاز به پردازش موازی یک منطقه مناسب دارد.

به ویژه ، به دلیل انتقال داده های حافظه بین CPU و GPU ، بعضی اوقات عملکردها بهبود نمی یابد مگر اینکه اندازه داده یا تعداد حلقه ها بزرگ باشد.

علاوه بر این ، ترکیبی از بیانیه های حلقه جداگانه که می توانند با پردازش موازی شتاب شوند ، بسته به وضعیت فرآیند حافظه و زمان انتقال داده های حافظه ، بعضی از تنظیمات عملکردی حداکثر نیست.

به عنوان مثال ، وقتی گفته های حلقه # 1 ، # 5 و # 10 با پردازش موازی سریع تر از پردازش CPU در 10 جمله حلقه انجام شود ، یک ترکیب سه موازی از # 1 ، # 5 و # 10 همیشه سریع ترین نیست پیکربندی

یکی از راه های جستجو برای یک منطقه پردازش موازی مناسب ، بهینه سازی موازی یا توالی هر بیانیه حلقه توسط آزمایش های رابین گرد است.

با این حال ، آزمایش های رابین دور نیاز به هزینه و زمان زیادی دارند ، که این امر باعث شروع تاخیر در شروع خدمات خواهد شد و بنابراین مشکلی برای مشاغل IoT است.

بنابراین ، برای استخراج خودکار مناطق بارگیری مناسب از برنامه های کلی که موازی سازی را فرض نمی کنند ، ابتدا پیشنهاد ما این است که تمام عبارات حلقه را بررسی کنیم تا مشخص شود آیا می توان موازی بودن آنها را انجام داد یا خیر و دوم تکرار آزمایش های تأیید عملکرد در محیط تأیید با استفاده از GA برای موازی سازی دستورات حلقه برای جستجوی بالاترین الگوی عملکرد.

با نگهداري و نوترکيب الگوهاي پردازش عملكرد بهتر به عنوان قطعات ژن پس از كاهش آنها به بيان حلقه هاي موازي سازي ، مي توانيم الگوهاي پردازش موازي با كارايي بالا را بطور موثر جستجو كنيم.

GA یک تکنیک بهینه سازی ترکیبی است که تکامل بیولوژیکی را شبیه سازی می کند [28].

جریان GA عبارتند از: Initialization ، ارزیابی ، انتخاب ، Crossover ، جهش و داوری کامل.

ما در روش پیشنهادی از GA ساده استفاده می کنیم.

ساده GA نسخه ساده شده GA است که در آن مقدار ژن 1 یا 0 است ، ژن ها با انتخاب رولت ، متقاطع ژن ها از یک فرد به فرد در یک نقطه انتخاب می شوند و مقدار یک ژن از 1 به 0 و یا برعکس می شود. برعکس با یک نرخ خاص در جهش.

شکل 3 تصویری از عملیات GA را نشان می دهد.

در شروع ، همه دستورالعمل های حلقوی "برای" کد های برنامه ها پس از بررسی تمام عبارات حلقه "برای" برای تعیین اینکه آیا می توانند شکل 3 را بررسی کنند ، مشخص می کنند که آیا می توانند شکل 3 را نشان دهند. آیا تصویر جستجوی ناحیه بارگیری GPU توسط GA موازی است یا خیر.

ما مقدار پردازش ژن را به عنوان 1 برای پردازش موازی GPU و 0 برای پردازش غیر GPU تعیین می کنیم.

به ژن ها شماره های مشخص شده M داده می شود.

در ارزیابی ، کدهای منبع مربوط به ژنها در یک دستگاه تأیید جمع آوری و مستقر می شوند و سپس عملکردهای معیار سنجیده می شوند.

خوبی بودن یک ژن با عملکرد هر کد مطابقت دارد.

در Selection ، ژنهایی که از تناسب بالایی برخوردارند ، بر اساس هر مقدار انتخاب می شوند و ژن هایی با شماره های خاص مشخص شده انتخاب می شوند.

در روش ما ، Selection مبتنی بر انتخاب رولت متناسب با خوبی از تناسب و انتخاب نخبگان یک فرد است که دارای یک ژن است که دارای حداکثر خوبی از تناسب است.

در کراس‌اوور ، با یک میزان متقاطع مشخص Pc ، برخی از ژنها در یک نقطه بین افراد منتخب رد و بدل می شوند و افراد کودک نیز تولید می شوند.

در جهش ، با میزان جهش معین Pm ، هر مقدار ژن یک فرد از 0 به 1 یا 1 به 0 تغییر می یابد.

در داوری کامل ، پس از تکرار تعداد مشخصی از نسل های T برای انجام عملیات GA ، GA تکمیل می شود و ژن که بهترین کیفیت مناسب را دارد پاسخ می دهد.

ما حداكثر كيفيت عملكرد مربوط به ژن را با حداكثر حسن تناسب در محيط هاي توليدي مستقر كرده و آن را در اختيار كاربران قرار مي دهيم.

IV- اجرای:

در این بخش ، ما برای ارزیابی اثربخشی فناوری تخلیه GPU اتوماتیک پیشنهادی ، عملکرد را توضیح می دهیم.

از آنجا که هدف این مقاله ارزیابی اثربخشی بارگذاری خودکار GPU توسط GA است ، ما از کامپایلر موجود PGI برای کنترل GPU برای برنامه های C / C ++ استفاده می کنیم.

زبانهای C / C ++ به طور گسترده در OSS ها و توسعه نرم افزار اختصاصی مورد استفاده قرار می گیرند و برای توسعه بسیاری از برنامه ها استفاده می شوند.

هدف ما محاسبات علمی نیست بلکه برنامه های IoT برای کاربران عمومی است ، بنابراین ما برای ارزیابی اثربخشی برنامه های کلی مانند پردازش تصویر را برای CPU ارزیابی می کنیم.

پردازش GPU توسط کامپایلر PGI کنترل می شود.

کامپایلر PGI برای درک زبانهای OpenCC از زبانهای C / C ++ / Fortran استفاده می شود.

Bytecode برای یک پردازنده گرافیکی می تواند با مشخص کردن قسمتهای قابل پردازش موازی مانند "for" عبارات حلقه "توسط" دستورالعمل OpenACC #pragma acc کرنل ها استخراج شده و بر روی یک GPU اجرا شود.

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

کامپایلر PGI همچنین خطایی را در مشخصات موازی با چند ردیف برای عبارات حلقه در حلقه های لانه ایجاد می کند.

در اینجا ، طرح کلی اجرای را توضیح می دهیم.

ما اجرای توسط Perl 5 را پیاده سازی می کنیم و همانطور که در شکل 4 نشان داده می شود ادامه می یابد.

قبل از همه پردازش در شکل 4 ، ما کدهای C / C ++ را برای بهبود عملکردها و ابزارهای معیار برای سنجش عملکردها آماده می کنیم.

هنگامی که یک برنامه C / C ++ مشخص شده است ، این پیاده سازی کد C / C ++ را تجزیه و تحلیل می کند ، "" را برای "عبارات حلقه تشخیص می دهد و آنها را شمارش می کند.

برنامه های کلی برای CPU برای در نظر گرفتن پردازش موازی اجرا نمی شوند.

بنابراین ، ما ابتدا باید عبارات حلقه ای را که پردازش موازی به خودی خود غیرممکن است ، حذف کنیم.

برای هر عبارت "for" ، اجرای سعی می کند دستورالعمل پردازش موازی #pragma acc kernels را وارد کند و قضاوت کند که آیا خطایی هنگام تدوین رخ داده است یا خیر.

چندین نوع خطای کامپایل وجود دارد.

مثالها شامل روالهای خارجی است که در عبارتهای "برای" ، دستورالعملهای پردازش موازی جمع مشخص شده برای حلقه های مختلف ردیف در حلقه های لانه ، "بیان" "در" برای "حلقه متوقف می شوند فرآیندهای نیمه کاره ، و وابستگی به بیانیه" برای ".

انواع خطاهای کامپایل بسته به کاربردها متفاوت است.

این خطاهای کامپایل از پردازش GPU مستثنا هستند و اجرای آن دستورالعمل های #pragma acc kernels را درج نمی کند.

تصحیح خودکار خطاهای کامپایل دشوار است و تصحیح خطاها ممکن است عملکرد را خیلی بهبود ندهد.

دستورالعمل های #pragma Acc روتین ممکن است از خطاهای تماس های روتین خارجی جلوگیری کند ، اما پردازش GPU از جمله تماس های روتین خارجی ممکن است عملکرد بالایی نداشته باشد زیرا تماس های خارجی ممکن است به عنوان یک تنگنا تبدیل شود.

خطاهای حلقه لانه در این حالت رخ نمی دهند زیرا اجرای هر یک حلقه "برای" را یکی یکی امتحان می کند.

در صورت اظهارات "break" ، تعداد حلقه ها در پردازش موازی باید ثابت شود و این نیاز به برنامه نویسی دارد.

وقتی وابستگی به داده وجود داشته باشد ، پردازش موازی به خودی خود نمی تواند انجام شود.

در اینجا ، اجرای دوباره عبارات "برای" را که باعث اشتباه نمی شوند هنگام انجام پردازش موازی انجام می شود.

اگر علامت حلقه موازی "برای" حساب شده A باشد ، A طول ژن است.

مقدار ژن 1 با دستورالعمل #pragma acc kernels مطابقت دارد ، و 0 مربوط به هیچ بخشنامه نیست.

کدهای برنامه به ژنهای A طول نقشه برداری می شوند.

تعداد مشخصی از ژنهای فردی به عنوان تنظیم اولیه تهیه شده است.

ژن های اولیه به گونه ای ایجاد می شوند که 0 و 1 را بطور تصادفی اختصاص دهند.

این پیاده سازی وقتی مقادیر ژن مربوطه 1 است دستورالعمل های موازی را به عبارات C / C ++ "for" اضافه می کند.

کدهای C / C ++ اضافه شده توسط کامپایلر PGI در یک دستگاه تأیید با استفاده از GPU گردآوری می شود.

اجرای پرونده های باینری کامپایل شده را اجرا می کند و عملکردها را با استفاده از ابزارهای معیار اندازه گیری می کند.

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

محاسبات تکامل توسط GA Simple برای هر نسل از افراد انجام می شود.

اگر فردی که همان شکل 4- نمودار کلی را دارد در یک نسخه قبلی وجود داشته باشد ، تدوین و اندازه گیری عملکرد از دست می رود و مقدار اندازه گیری عملکرد قبلی برای کاهش زمان تنظیم GA اتخاذ می شود.

پس از تعداد مشخصی از عملیات GA ، کد C / C ++ با حداکثر کارایی نتیجه جستجوی منطقه تخلیه بارگیری است.

تعداد فردی ، تعداد تولید ، سرعت متقاطع ، میزان جهش ، خوبی تنظیم تناسب ، الگوریتم انتخاب پارامترها و شرایط GA هستند و ما آنها را در بخش 5 تنظیم می کنیم.

با انجام خودکار پردازش فوق ، روش پیشنهادی ما امکان تخلیه GPU را فراهم می کند ، که به طور معمول به زمان و مهارت زیادی نیاز دارد.

V- ارزیابی:

الف- روش ارزیابی:

1) برنامه های ارزیابی شده:

ما از پردازش تصویر ، دستکاری ماتریس ، هسته آنالیز چندرسانه ای ، محاسبه همبستگی و محاسبه کواریانس برای برنامه های ارزیابی استفاده می کنیم زیرا بسیاری از کاربران از آنها در محیط Open IoT استفاده می کنند.

MRI-Q [29] تصاویر سه بعدی MRI (تصویربرداری با رزونانس مغناطیسی) را پردازش می کند.

اگرچه ما C / C ++ MRI-Q را برای CPU تأیید می کنیم به عنوان نمونه ای از پردازش تصویر برای CPU در این مقاله ، البته انواع مختلفی از پردازش تصویر و کتابخانه ها برای GPU وجود دارد.

در یک محیط IoT Open ، پردازش تصویر اغلب برای نظارت خودکار از فیلم های دوربین ضروری است.

علاوه بر این ، دوربین هایی با GPU مانند دوربین های محور وجود دارد.

در حین اندازه گیری عملکرد ، MRI-Q پردازش تصویر MRI 3D را برای اندازه گیری زمان پردازش با استفاده از داده های آزمون 64 * 64 * 64 انجام می دهد.

دستکاری ماتریس در بسیاری از انواع تجزیه و تحلیل مانند تجزیه و تحلیل یادگیری ماشین استفاده می شود.

در یک محیط IoT Open ، برای انتقال داده از دستگاه IoT از طریق شبکه ، تجزیه و تحلیل اولیه مانند دستکاری ماتریس اغلب در سمت دستگاه انجام می شود تا هزینه شبکه کاهش یابد.

برای معیار تنظیم ، ما از یک ابزار تست برای محاسبه محصول ماتریس 2،048 * 2،048 استفاده می کنیم.

MADNESS (محیط عددی چند منظوره تطبیقی ​​برای شبیه سازی علمی) یک محیط نرم افزاری سطح بالا برای حل معادلات انتگرال و دیفرانسیل در بسیاری از ابعاد مبتنی بر آنالیز چندرسانه ای و بازنمایی جدا شده است [30].

برای تعیین معیار تنظیم ، از یک ابزار آزمایش برای محاسبه داده آزمایش 256 * 256 * 256 استفاده می کنیم.

همبستگی PolyBench [31] و محاسبه کواریانس مقادیر همبستگی و کواریانس را بین مجموعه دادههای دو نوع محاسبه می کند.

در یک محیط IoT Open ، برای انتقال داده های یک دستگاه IoT از طریق شبکه ، تجزیه و تحلیل اولیه مانند همبستگی و کواریانس اغلب در سمت دستگاه انجام می شود تا هزینه شبکه کاهش یابد.

برای تعیین معیار تنظیم ، از یک ابزار آزمایش برای محاسبه داده آزمایشی 2،000 * 2،000 استفاده می کنیم (مجموعه داده بزرگ).

2) شرایط آزمایش:

در آزمایش های ارزیابی ، ما 5 برنامه را برای هر فرد از هر نسل با استفاده از ابزارهای معیار اندازه گیری می کنیم.

ما تجزیه و تحلیل تغییرات عملکرد در طول انتقال نسل GA.

پس از محاسبات تولیدی مشخص ، الگوی کد حداکثر عملکرد در آن زمان نتیجه جستجوی منطقه بارگیری است.

پارامترها و شرایط GA Simple به شرح زیر است.

طول ژن:

عبارات حلقه قابل تنظیم برای "."

16 برای پردازش تصویر ، 12 مورد برای دستکاری ماتریس ، 10 مورد برای هسته تجزیه و تحلیل multiresolution ، 12 برای محاسبه همبستگی و 10 برای محاسبه کوواریانس.

تعداد افراد M:

بیشتر از طول ژن نیست.

16 برای پردازش تصویر ، 12 مورد برای دستکاری ماتریس ، 10 مورد برای هسته تجزیه و تحلیل multiresolution ، 12 برای محاسبه همبستگی و 10 برای محاسبه کوواریانس.

تعداد نسل های T:

بیشتر از طول ژن نیست.

16 برای پردازش تصویر ، 12 مورد برای دستکاری ماتریس ، 10 مورد برای هسته تجزیه و تحلیل multiresolution ، 12 برای محاسبه همبستگی و 10 برای محاسبه کوواریانس.

برازش:

(زمان پردازش) -1 = 2.

وقتی زمان پردازش کوتاه تر می شود ، حسن تناسب بیشتر می شود.

با تنظیم (-1/2) قدرت ، از محدود شدن دامنه جستجو به دلیل خوبی زیاد در مناسب بودن افراد خاص با زمان پردازش کوتاه جلوگیری می کنیم.

اگر اندازه گیری عملکرد در 3 دقیقه به پایان نرسد ، زمان محاسبه صادر می شود و زمان محاسبه 1000 ثانیه برای محاسبه خوبی بودن تنظیم می شود.

مدت زمان پایان دوره بر اساس ویژگی های اندازه گیری عملکرد تعیین می شود.

اگر پردازش فقط توسط CPU ها برای داده های آزمایش در محیط در شکل 5 انجام شود ، پردازش تصویر 6.85 ثانیه طول می کشد ، دستکاری ماتریس 92.27 ثانیه طول می کشد ، هسته آنالیز multiresolution 8.96 ثانیه طول می کشد ، محاسبه همبستگی 16.22 ثانیه طول می کشد و محاسبه کواریانس 16.12 ثانیه طول می کشد.

الگوریتم انتخاب:

انتخاب رولت و انتخاب نخبگان.

انتخاب نخبگان به معنای آن است که یک ژن با حداکثر حسن تناسب باید برای نسل بعدی بدون تلاقی یا جهش محفوظ باشد.

نرخ متقاطع رایانه: 0.9 سرعت جهش Pm: 0.05

3) محیط آزمایش:

ما برای تأیید صحت از ماشینهای فیزیکی با NVIDIA Quadro K5200 استفاده می کنیم.

تعداد هسته CUDA NVIDIA Quadro K5200 2304 است.

ما از PGI compiler community edition v17.10 و CUDA toolkit v9.1 استفاده می کنیم.

شکل 5 مشخصات آزمایش محیط و مشخصات محیط را نشان می دهد.

در اینجا ، یک رایانه توجه داشته باشید مشتری کدهای برنامه C / C ++ را مشخص می کند ، کدها بر روی یک دستگاه تأیید تنظیم می شوند و کدهای ثابت پس از تنظیم GA در یک محیط IoT برای کاربران مستقر می شوند.

شکل 5- محیط آزمایش B- نتایج عملکرد:

5 برنامه برای بهبود تأیید شد.

با توجه به ویژگی های GA ، هر بار در همان تعداد همگرا نمی شود.

به همین دلیل ، ما محاسبه 5 محاسبه GA برای هر برنامه انجام دادیم و نمودار یک آزمایش معمولی را انتخاب کرد که در بین 5 بار محاسبات نه چندان سریع یا نه چندان کند.

شکل 6 حداکثر تغییر عملکرد پردازش تصویر را در هر نسل با انتقال نسل GA نشان می دهد.

محور عمودی نشان می دهد که بارگیری GPU چند برابر سریعتر از استفاده از تنها CPU است که 1 معادل زمان پردازش CPU است.

از شکل 6 ، عملکردها می توانند بعد از 10 نسل بهبود یافته و همگرا شوند ، و بارگیری GPU با استفاده از انتقال نسل GA در حدود 17 برابر سریعتر از کد پردازش CPU (زمان پردازش از 6.85 به 0.41 ثانیه کاهش می یابد).

ميانگين مدت زمان آزمايش هر ارزيابي ژن در مدت زمان 1 دقيقه شامل موارد ختم زمان بود.

بنابراین ، حداکثر زمان GA حدود چند ساعت تخمین زده می شد ، اما GA در واقع یک منطقه بارگیری مناسب را در عرض 1 ساعت استخراج می کرد.

بعد از چند نسل ، افراد مختلفی با همین الگوی وجود داشتند که از سلامتی بالایی برخوردار بودند ، بنابراین ممکن است کامپایل / اندازه گیری برای الگوهای ژنی مشابه رد شود.

شکل 7 تغییر حداکثر عملکرد دستکاری ماتریس در هر نسل با انتقال ژن GA را نشان می دهد.

از شکل 7 ، عملکردها می توانند بعد از 10 نسل بهبود یافته و همگرا شوند و بارگیری GPU با استفاده از انتقال نسل GA در حدود 38 برابر سریعتر از کد پردازش CPU است (زمان پردازش از 92.27 به 2.43 ثانیه کاهش می یابد).

ميانگين زمان آزمايش هر ارزيابي ژن در مدت زمان 2 دقيقه شامل موارد خاتمه يافت.

بنابراین ، حداکثر زمان GA حدود چند ساعت تخمین زده می شد ، اما GA در واقع یک منطقه تخلیه مناسب را در عرض یک ساعت به لطف کامپایل / اندازه گیری که برای الگوهای ژن مشابه رد می شود استخراج کرد.

شکل 8 حداکثر تغییر عملکرد هسته تجزیه و تحلیل multiresolution را نشان می دهد ، شکل 9 محاسبه همبستگی را نشان می دهد و شکل 10 محاسبات کواریانس را در هر نسل با انتقال نسل GA نشان می دهد.

از شکل 8 ، عملکردها می توانند بعد از 5 نسل بهبود یافته و همگرا شوند ، و بارگیری GPU با استفاده از انتقال نسل GA حدود 13 برابر سریعتر از کد پردازش CPU (زمان پردازش از 8.96 به 0.70 ثانیه کاهش می یابد).

ميانگين زمان آزمايش هر ارزيابي ژن در مدت زمان 1 دقيقه شامل موارد خاتمه يافت.

از شکل 9 ، عملکردها می توانند بعد از 8 نسل بهبود یافته و همگرا شوند ، و بارگیری GPU با استفاده از انتقال نسل GA حدود 25 برابر سریعتر از کد پردازش CPU است (زمان پردازش از 22.22 به 0.65 ثانیه کاهش می یابد).

ميانگين زمان آزمايش هر ارزيابي ژن در مدت زمان 1 دقيقه شامل موارد خاتمه يافت.

از شکل 10 ، عملکردها می توانند بعد از 8 نسل بهبود یافته و همگرا شوند و بارگیری GPU با استفاده از انتقال نسل GA حدود 26 برابر سریعتر از کد پردازش CPU است (زمان پردازش از 16.12 به 0.61 ثانیه کوتاه می شود).

ميانگين زمان آزمايش هر ارزيابي ژن در مدت زمان 1 دقيقه شامل موارد خاتمه يافت.

GA به لطف تدوین / اندازه گیری هایی که برای الگوهای ژن مشابه رد می شوند ، یک منطقه بارگیری مناسب را ظرف مدت یک ساعت استخراج کرد.

تعداد کمی از افراد و نسل ها را تعیین می کنیم زیرا فرض می کنیم یک سرویس تولیدی طی یک یا نیم روز شروع می شود.

بنابراین ، بهبود عملکرد بعضی اوقات قبل از شروع سرویس همگرا نمی شود.

با این حال ، ما فکر می کنیم تنظیم حدود 20 نسل عملکردی بالاتر از تنها پردازش CPU بر اساس این نتایج حاصل می کند.

ج- بحث:

اول ، ما در مورد عملکرد هزینه بحث می کنیم.

تابلوهای GPU مانند انویدیا تسلا حدود 1000 دلار قیمت دارند.

بنابراین ، سخت افزار با GPU تقریباً دو برابر سخت افزار تنها با یک CPU هزینه دارد.

به طور کلی در مراکز داده ، هزینه سخت افزاری و توسعه و تأیید سیستم تقریباً 1/3 هزینه کل ، برق و عملیات / تعمیر و نگهداری بیش از 1/3 و سایر هزینه ها مانند سفارشات خدمات 1/3 دیگر است.

در مورد AWS ، یک نمونه GPU با یک GPU حدود 650 دلار در ماه هزینه دارد که همان میزبانی یک سرور اختصاصی عمومی است.

بنابراین ، ما فکر می کنیم که بهبود عملکردها 2 تا 30 بار در برنامه های IoT که زمان زیادی از جمله پردازش تصویر را می برد ، حتی اگر قیمت سخت افزار دو برابر شود ، تأثیر به اندازه کافی مثبت خواهد داشت.

دوم ، ما برای شروع خدمات تولید بحث می کنیم.

براساس این آزمایشات ، هنگامی که برای یک آزمایش فردی حدود 3 دقیقه فرض کنیم ، بار جستجوی منطقه برای 20 نفر و 20 نسل در حداکثر حالت 20 ساعت طول می کشد.

با این حال ، کامپایل و اندازه گیری عملکرد یک فرد که الگوی مشابهی با نمونه قبلی دارد قابل رد شدن است ، بنابراین تخمین می زنیم که می توانیم پردازش GA را طی 7 ساعت انجام دهیم.

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

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

تغییر طول مدت زمان نیز می تواند بر اساس ویژگی مشخص شده برنامه ، زمان تنظیم GA را کاهش دهد (به عنوان مثال ، طول مدت زمان دو برابر بیشتر از یک پردازنده به زمان پردازش تعیین می شود).

البته می توان از افراد بیشتری و نسل های بیشتری برای جستجوی نتایج با کارآیی بالاتر استفاده کرد ، اما ما زمان بیشتری را می گیریم زیرا ما در حداکثر حالت به اندازه گیری عملکرد شماره تولید فردی شماره * نیاز داریم.

از آنجا که این آزمایشات از افراد و نسل معدودی استفاده می کنند ، ما یک Pc سرعت متقاطع بالا را برای جستجوی یک منطقه گسترده و جستجوی پاسخ های درجه خاص نسبتاً سریع تعیین می کنیم.

برای کارایی بالا ، علاوه بر اینکه آیا هر حلقه می تواند موازی باشد یا خیر ، پردازش دسته ای و زمان پردازش داده های GPU مهم هستند.

برای بهبود عملکرد بیشتر ، نه تنها استخراج منطقه تخلیه مناسب بلکه کاهش انتقال داده حافظه بین CPU و GPU مؤثر است.

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

ما پارامترها و بارگذاری ناحیه مورد نظر از GA را مورد بررسی قرار می دهیم تا در یک زمان قابل قبول کوتاه ، نتایج با کارایی بالاتری را جستجو کنیم.

کار ششم:

ووهیب و همکاران. مدیریت منابع و تخصیص مؤثر [32] را روی ابر OpenStack [33] مطالعه کرده است.

روش ما یکی از شبکه های مدیریت منابع گسترده شبکه و فناوری های تخصیص مؤثر از جمله ابر است ، اما بر روی بارگذاری مناسب روی سرورهای سخت افزاری ناهمگن متمرکز است.

ما قبلاً روش های [34] [35] را برای انتخاب سرورهای مناسب از سرورهای سخت افزاری ناهمگن بر اساس درخواست های عملکرد کاربران [36] پیشنهاد کرده ایم ، اما روش پیشنهادی در این مقاله می تواند بخش های منطقی برنامه ها را بطور خودکار بارگذاری کند و به همین دلیل نوین است.

کار [37] همچنین از GA برای جستجوی مناطق بارگیری GPU به صورت خودکار استفاده می کند.

با این حال ، هدف آن برنامه های کاربردی خاصی است که تحقیقات بسیاری برای سرعت بخشیدن به GPU مانند معیار Himeno [38] محاسبه مایعات دارد ، و تعداد بسیار زیادی از تنظیمات مانند محاسبات برای 20 نفر و 200 نسل مورد نیاز است.

هدف ما این فناوری است که در یک زمان کوتاه GA را تکمیل کنیم زیرا ما می خواهیم با تمرکز بر روی عبارات حلقوی قابل محاسبه برای محاسبات GA ، خدمات تولید سریع را با استفاده از دستورالعمل های سریع پردازنده آغاز کنیم ، پس از بررسی اولیه همه اظهارات حلقه "for" قابل توافق هستند.

ما در این مقاله با استفاده از کامپایلر OpenACC PGI برای برنامه های C / C ++ ، فن آوری خود را ارزیابی کردیم.

علاوه بر زبان C / C ++ ، جاوا اغلب برای برنامه های OSS استفاده می شود.

از جاوا 8 ، پردازش موازی با بیان lambda می تواند مشخص شود.

IBM یک کامپایلر JIT را فراهم می کند که پردازش را با عبارات لامبدا به یک GPU خاموش می کند [19].

در مورد جاوا ، ما می توانیم با استفاده از این کامپایلر JIT و یک GA یک منطقه تخلیه مناسب را استخراج کنیم که بررسی می کند که آیا هر جمله حلقه نیاز به پردازش موازی با یک عبارت lambda دارد یا خیر.

برای کنترل FPGA ، ابزارهای توسعه OpenCL برای FPGA توسط Altera و Xilinx ارائه شده است.

به عنوان مثال ، Altera SDK برای OpenCL [39] از یک کامپایلر OpenCL C و OpenCL Runtime Library تشکیل شده است.

برنامه نویسان می توانند منطق و کنترل FPGA را توسط OpenCL شرح دهند و سپس منطق پیکربندی شده را می توان به یک FPGA مشخص بارگیری کرد.

بارگذاری نه تنها بیانیه های حلقه بلکه منطق مختلف برنامه به طور خودکار برای ماشین ها دشوار است زیرا شبیه درک مفهوم کد است.

از طرف دیگر ، FPGA بر اساس دانش برنامه نویسان مانند شتاب FFT تسریع شده است.

بنابراین ، برای استفاده از دانش موجود ، روشی وجود دارد [40] که در آن ارائه دهندگان الگوهای بارگیری مشهور را در یک بانک اطلاعاتی (DB) تهیه می کنند ، و هنگامی که برنامه ها پردازش خوبی مانند FFT دارند ، پردازش تغییر یافته است تا با استفاده از FPGA فراخوانی شود. OpenCL از الگوهای بارگیری از DB.

به طور کلی ، CUDA و OpenCL پردازش موازی درون گره را کنترل می کنند ، و MPI پردازش موازی بین گره یا چند گره را کنترل می کند.

با این حال ، MPI همچنین به مهارت فنی بالایی در پردازش موازی نیاز دارد.

بنابراین ، فناوری پنهان سازی MPI توسعه یافته است که دستگاه های گره های بیرونی را به عنوان دستگاه های محلی مجازی می کند و دستگاه های گره های بیرونی را تنها با OpenCL کنترل می کند [41].

وقتی Tacit Computing مولتی کد ها را برای بارگذاری مقصد انتخاب می کند ، ما قصد داریم از این فناوری پنهان MPI استفاده کنیم.

حتی اگر استخراج منطقه تخلیه مناسب باشد ، ممکن است در صورت عدم استفاده از تراز منابع CPU و دستگاه ها ، عملکردها زیاد نباشد.

به عنوان مثال ، CPU 100 ثانیه و GPU 1 ثانیه هنگام پردازش یک کار طول می کشد ، بنابراین CPU پردازش را کند می کند.

کار [42] تلاش کرد با توزیع وظایف نقشه با همان زمان اجرای CPU و GPU در پردازش MapReduce ، عملکردهای کلی را بهبود بخشد.

با مراجعه به کار آنها [42] ، ما چگونگی استقرار توابع را در مکان های مناسب و مقادیر منبع مطالعه می کنیم تا از تنگناهای سخت افزار جلوگیری شود.

کار [43] Kahawai ، یک سیستم بازی با کیفیت بالا در تلفن های همراه را پیشنهاد می کند.

برای ارائه بازی با کیفیت بالا ، GPU سمت سرور و GPU تلفن همراه با کار گرافیکی همکاری می کنند.

کار [44] همچنین یک سیستم رندر موبایل ButterFly را پیشنهاد می کند.

برخلاف کار [43] ، پردازش گرافیکی با دستگاههای همکار نزدیک برای کاهش تأخیر شبکه همکاری می کند.

Tacit Computing ما با هدف بارگذاری وظایف محاسبات IoT به دستگاههای چند لایه مطابق با کاربردهای برنامه IoT ، بنابراین ، Kahawai و ButterFly را می توان برای بارگذاری مجدد برای لایه ابری و دستگاه اتخاذ کرد.

گزارش های زیادی در مورد استفاده از GPGPU یا FPGA برای دستیابی به عملکرد بالا در محاسبه ماتریس ، محاسبه سیال و پردازش الگوریتم بازی ها وجود دارد.

بارگیری خودکار خودکار برای کامپایلرهای موازی سازی اتوماتیک مانند کامپایلر اینتل معمول است [20].

با این حال ، هیچ کار قبلی وجود ندارد که ترکیبی از تنظیم خودکار یک ناحیه مناسب بارگذاری شده توسط GA ، بارگذاری برنامه های بزرگ عمومی به یک GPU و بارگذاری مجدد به GPU در دستگاه های عمومی و نه در خوشه های HPC برای Open IoT باشد.

کار [45] الگوی بیان را از طریق CUDA به GPU بارگذاری می کند.

برای بارگذاری الگوی بیان ، از تکنیک metaprogramming C ++ و روش کامپایل Just In Time استفاده شده است.

کار [45] الگوی بیان را هدف قرار داده و بارگذاری آن را خودکار می کند.

کار [46] موازی سازی ، بهینه سازی محل داده و شتاب GPU را توسط یک کامپایلر برای بهبود عملکرد جبر نقشه انجام می دهد که آنالیز مکانی فضایی شغلی را محاسبه می کند.

هنگامی که کاربر جبر نقشه پی در پی توسط پایتون را توصیف می کند ، یک کامپایلر آن را پردازش می کند.

کار [46] جبر نقشه را هدف قرار می دهد و یک کامپایلر برای جبر نقشه تبدیل می کند.

روش ما کاربردهای مختلفی را برای استفاده از IoT فرض می کند و قادر به مقابله با مواردی است که مشخص نیست که پردازش توسط GPU مناسب است یا نه ، مگر اینکه در واقع اندازه گیری شود.

فکر می کنیم این یک نکته متفاوت است.

VII- نتیجه گیری:

در این مقاله ، ما از یک پردازنده خودکار GPU (واحد پردازش گرافیکی) به عنوان یک فناوری ابتدایی جدید از یک سکوی Open IoT (اینترنت اشیا) برای استفاده از منابع GPU برای برنامه های کاربردی کاربر در محیط های IoT Open استفاده کرده ایم.

فناوری پیشنهادی ما سه ویژگی دارد.

اولین کار این است که کاربران بدون مهارت های خاص مورد نیاز برای استفاده از CUDA (Compute Architecture Device Unified) را قادر سازیم تا برنامه های خود را با عملکردهای بالا با استفاده از GPU اجرا کنند.

مورد دوم ، بهبود برنامه های کلی برای CPU (واحد پردازش مرکزی) است که در بارگذاری GPU معمولی مورد مطالعه قرار نگرفته است.

سوم این است که GPU ها را نه برای سرورها برای استفاده با کارایی بالا مانند خوشه های HPC (محاسبات با کارایی بالا) بلکه در رایانه های عمومی بارگذاری کنید.

فن آوری پیشنهادی ما بیانیه های حلقه "for" از کدهای منبع برنامه را جستجو می کند و با استفاده از آزمایش و خطا GA (الگوریتم ژنتیک) بر اساس نتایج عملکرد واقعی معیار ، مناطق بارگیری مناسب را جستجو می کند.

برای برنامه های کاربردی C / C ++ ، ما با استفاده از کامپایلر PGI ، فناوری پیشنهادی را برای تأیید اثربخشی آن پیاده سازی کردیم.

ما پیشرفت های عملکرد را برای 5 برنامه ارزیابی کردیم.

پس از تنظیم کوتاه مدت 10-20 نسل GA طی 1 ساعت ، متوجه شدیم که 5 برنامه بیش از 10 برابر سریعتر از زمانی که فقط CPU استفاده می شود ، پردازش شده اند.

به خصوص ، دستکاری ماتریس بیش از 35 بار عملکرد را نشان داد.

فن آوری ما در پس زمینه برنامه های کاربردی IoT واقعی اجرا می شود.

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

در آینده ، ما با اصلاح پارامترهای GA و تنظیم تنظیمات منطقه مورد نظر ، روشهای جستجوی نتایج با کارایی بالاتر را با زمان کوتاه بررسی خواهیم کرد.

علاوه بر این ، ما از OpenCL به عنوان یک زبان متوسط ​​برای بارگیری برای کنترل FPGA (آرایه های قابل برنامه ریزی در زمینه درست) و GPU ها به طور یکنواخت استفاده خواهیم کرد و نحوه تهیه منابع بهینه FPGA و GPU را برای محاسبات تخلیه بار مطالعه می کنیم.