خرید بک لینک

سیستم های محاسباتی ناهمگن با بهره گیری از پردازنده مرکزی و کارت گرافیک

قسمت اول

besm-allah.gif

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

سلام خدمت تمامی دوستان ...

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

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

سیستم های محاسباتی ناهمگن

محاسبات علمی نیازمند توان بالای پردازشی می باشد. این نیاز باعث شده است تا سخت افزارها پیوسته توسعه یابند. به مدت بیش از دو دهه صنایع کامپیوتری برنامه ریزی خود را بر اساس قانون مور بنا نهادند. این قانون بیان می کرد که تقریبا هر 18 ماه تعداد ترانزیستورهای واقع بر یک مدار یکپارچه چگال دو برابر می شود در حالیکه هر نسل جدید توان مصرفی قبلی خود ثابت نگه می داشت. پس از سال 2000 ترانزیستور ها به شدت کوچک شدند و تنها با اعمال قوانین فیزیک ابزارهای کوچک طراحی نسل های جدید پردازنده ممکن بود، با این وجود یک مشکل جدی در راه طراحی پردازنده ها وجود داشت. بدون افزایش چشم گیر توان مصرفی و چگالی توان امکان بهبود فرکانس و تعداد ترانزیستور ها ممکن نبود. این موضوع در شکل 1-1 قابل مشاهده است.

Transistor_Count_and_Moore_s_Law_-_2011_

شکل 1-1. تعداد ترانزیستور های هر پردازنده با توجه به تاریخ تولید را نشان میدهد. توجه کنید که مقیاس بندی عمودی به صورت لگاریتمی می باشد.

با این وجود برای برآورده ساختن نیاز به افزایش کارایی سیستم های پردازشی دو تغییر مهم صورت گرفت:

  1. افزایش تعداد هسته های موجود در هر برد به جای افزایش فرکانس پردازنده. این تغییر در ساختار پردازنده ها باعث توسعه سیستم های نرم افزاری جدید برای به کارگیری حداکثری ساختار چندهسته ای جدید پردازنده ها نیز شد. این امر باعث تولد پردازش و برنامه نویسی موازی شد.
  2. توان مصرفی و حرارت ایجاد شده دو فاکتور بسیار مهم در طراحی ساختارهای چند هسته ای جدید آینده شد.

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

در این بازار رقابت جدید شرکت های مختلف تلاش می کنند سخت افزار خود را به وسیله نرم افزارهای عمومی و اختصاصی خود و دیگران تا جایی که ممکن است بهینه کنند. یکی از مهمترین فعالان این عرصه را می توان Khronos Group دانست.

Khronos_Group_logo.png OpenCL_Logo.png

یکی از مهمترین محصولات این کنسرسیوم OpenCL است. در واقع این محصول که با زبان C99 نوشته شده است به شما این قابلیت را میدهد تا برای برنامه خود کدی را بنویسید که بتواند روی زیرسیستم های مختلف اعم از پردازنده های مرکزی، کارت های گرافیکی، پردازنده های سیگنال دیجیتال DSP ، FPGAها و ... اجرا شود و به وسیله رابط های برنامه نویسی نرم افزار (API) خود امکان کنترل و اجرای برنامه ها را برای شما در زیرسیستم ها فراهم می کند. با این حال شاید این محصول بهترین گزینه نباشد، زیرا این محصول برای همه کاربردها بهینه نشده است و بدون بهینه سازی های ثانویه احتمال اجرا نشدن برنامه شما نیز وجود دارد. البته فراموش نکنیم که این محصول توسط شرکت هایی نظیر اپل ، AMD-ATI ، Nvidia و برخی دیگر شرکت ها حمایت می شود و می تواند گزینه بسیار خوبی برای قدم نهادن به دنیای سیستم های ناهمگن باشد.

هدف ما در این نوشتار نیز بررسی و توسعه یک سیستم ناهمگن بر اساس پردازنده مرکزی و استفاده حداکثری از توان پردازنده های گرافیکی می باشد، زیرا امروزه تمامی سیستم های کامپیتری از لپتاپ های شخصی تا بزرگترین ابر کامپیوترها ها نظیر Piz DAINT (هفتمین ابرکامپیوتر بزرگ دنیا ) به کارتهای گرافیکی مجهز هستند. همچنین با توجه به این موضوع که شرکت nvidia با معرفی معماری CUDA ، کارتهای گرافیکی محاسباتی تخصصی و رابط های نرم افزاری اختصاصی خود در این زمینه پیشرو است ما نیز تمامی توجه خود را در این نوشتار به انجام محاسبات بر روی کارت های گرافیکی این شرکت متمرکز می کنیم.

پردازش موازی مبتنی بر کارت گرافیک، از پردازش داده های رنگ تا پردازش عمومی

با ظهور سیستم عامل هایی نظیر ماکروسافت ویندوز در اواخر دهه 80 و اوایل دهه 90 میلادی بازاری برای گونه ای جدید از سخت افزار ها ایجاد شد و کاربران سیستم های کامپیوتری علاقه خود را به خرید سخت افزارهای گرافیکی دو بعدی برای انجام عملیات های تصویر نگاری نشان دادند. در این میان شرکت سیلیکون گرافیک شروع به توسعه پلتفرمی جدید برای پردازش سه بعدی تصویر برای استفاده های گوناگون دولتی ، صنایع نظامی ، محاسبات علمی و فنی نمود و در این راه کتابخانه OpenGL را توسعه داد. با گذشت زمان و در اواسط دهه 90 میلادی با معرفی بازی های سه بعدی (مانند Doom, Duke Nukem و ...) تقاضای کاربران عادی برای پردازنده های قدرتمند گرافیکی رو به افزایش گذاشت و باعث شد تا شرکت هایی نظیر NIVDIA، ATI technologies و 3dfx interactive به رقابت برای فروش کارت های گرافیکی با قیمت مناسب کنند.

معرفی کارت گرافیکی NVIDIA Geforce 256 گامی بلند در عرصه کارت های گرافیکی بود. برای اولین بار محاسبات انتقال و نورپردازی بر روی کارت گرافیکی با استفاده از OpenGL امکان پذیر شده بود. در قدم بعدی در سال 2001 شرکت انویدیا سری جدیدی از کارت های گرافیکی خود را با نام تجاری Geforce 3 series به بازار عرضه کرد. این سری از تراشه های گرافیکی مطابق با استاندارد DirectX 8 شرکت ماکروسافت ساخته شده بود تا همزمان قابلیت برنامه نویسی مراحل ورتکس و پیسکل شیدینگ را داشته باشند و برای اولین بار برنامه نویسان کنترل مستقیمی بر روی برخی پردازش های کارت گرافیک را دارا بودند.

بنابراین برخی از محققان به دنبال انجام محاسبات بر روی کرات های گرافیکی رفتند اما یک مشکل عمده در راه آن ها قرار داشت. تنها راه ارتباط با کارت گرافیک برنامه DirectX شرکت ماکروسافت و یا کتابخانه OpenGL بود که هر دو برای انجام رندرینگ تصویر طراحی شده بودند. در آن زمان پردازنده های گرافیکی با انجام محاسبات منطقی برای هر پیکسل تصویر با مختصات (x,y) یک رنگ را تولید می کردند. تولید این رنگ وابسته به اطلاعات اولیه و محاسباتی بود که کاربر برای رندرینگ برای کارت گرافیکی تعریف می کرد. پس از مدتی پژوهشگران این عرصه دریافتند که اطلاعات ورودی نه تنها رنگ بلکه می تواند هر نوع داده ای باشد. بنابراین پیکسل شیدرها می توانستند توسط کاربران برای انجام محاسبات عددی با نام "رنگ" نیز برنامه نویسی شوند و خروجی "رنگ" آن ها در واقع نتایج محاسبات عددی بود. با این حال که این حقه باعث می شد تا انجام محاسبات بر روی کارت های گرافیکی انجام پذیر باشد دارای پیچیدگی های بسیار زیادی بود که این کار را در عمل غیرممکن می ساخت و در بسیاری موارد حتی نتایج محاسبات اشتباه بود. برخی این محدودیت ها عبارت اند از : نیاز به یادگیری زبان های برنامه نویسی گرافیکی (shading languages) ، مشخص نبودن نحوه انجام محاسبات اعشاری بر روی کارتهای گرافیکی ، نوشتن نتایج در حافظه داخلی رم ، جابجا سازی اطلاعات در حافظه داخلی و ... .

NVIDIA-CUDA.jpg

اما 5 سال بعد در سال 2006 ساختاری کاملا جدید توسط شرکت Nvidia در کارت گرافیکی Geforce 8800 GTXمعرفی شد. این ساختار جدید که CUDA نام داشت سعی در برطرف کردن محدودیت های پیشین محاسبات بر روی کارت گرافیکی داشت و به گونه ای طراحی شده بود تا برنامه نویسی بر روی کارت های گرافیکی را تسهیل کند. این معماری جدید کارت های گرافیکی به همراه نرم افزار CUDA toolkit که شامل API ها و کامپایلر nvcc بود این قابلیت را ایجاد می کرد که بتوان با استفاده از زبان برنامه نویسی C و C++ به همراه برخی از افزونه ها ، برنامه هایی قابل اجرا بر روی کارت گرافیک نوشت.

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

flops.png

ادامه دارد...

کاربرد های نظامی این شکل محاسبات:

http://arxiv.org/abs/1505.08067

تمامی حقوق این نوشتار متعلق به نویسنده است و هرگونه کپی برداری غیرقانونی است.

منابع رو هم بعد از اتمام پایان نامه ارائه خواهم داد بنا به مصلحت های شخصی ... .


برچسب: نویسنده: کاوه محمدزادگان تاريخ: جمعه 10 ارديبهشت 1395 ساعت: 10:06

صفحه بندی