مصاحبه ای با دکتر شاه بهرامی مولف کتاب جدید پردازش موازی با GPU

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

- پردازش موازی به چه منظور استفاده می شود و همچنین چگونه مورد استفاده  قرار می گیرد.

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

با گسترش روزافزون استفاده از سیستم های کامپيوتری براي کار‌هاي کاربردی و تحقيقاتي در دانشگاه‌ها و مراكز تحقيقاتي و شركت‌هاي تجاري،  نياز به پردازش سريع‌تر افزايش يافته و به يك نياز اساسي تبديل ‌شده است. به عنوان مثال کاربردهای مانند پیش بینی شرایط آب و هوا، برنامه های مهندسی و ریاضی، برنامه های زمین شناسی و زلزله شناسی و جمع آوری و پردازش داده های عظیم، موتورهای جستجو، پردازش تصاویر و سیستم های چند رسانه ای، بازیابی داده ها، مدل سازی برنامه های مالی و اقتصادی، برنامه های طراحی مهندسی و معماری، مسیریابی در شبکه های اینترنتی و غیره کاربردهای هستند که نیاز به پردازش سریع دارند. امروزه پردازش موازي نقش بسيار جدي در مرتفع‌‌سازي اين نيازها ايفا مي‌كند. چرا که پلتفرمهای سخت افزاری چند و بسیار هسته ای، که قابلیت استخراج انواع موازی سازیها ی برنامه ها را که دارند، به بازار عرضه شده اند.    

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

 Single Instruction and Multiple Data (SIMD)، Open Multi-Processing (OpenMP) ، Open Computing Language (OpenCL)، Message Passing Interface (MPI)، Compute Unified Device Architecture (CUDA)

و غیره تهیه شده اند.

 

  • چرا در این کتاب تاکید خاصی بر روی GPU شده است

 

در میان انواع مدلهای برنامه نویسی موازی، مدل  CUDA که توسط شرکت Nvidia  بر روی پلتفرم واحد پردازشگر گرافیکی (Graphics Processing Unit)  پیاده سازی شده است از اهمیت خاصی برخوردار است. معماری واحد پردازشگر گرافیکی (GPU)، قابلیت موازی‌سازی بالایی را با استفاده از اجرای نخ های مختلف بر روی تعداد زیاد هسته های پردازشگر فراهم می‌کند و سرعت آن بسیار بیشتر از واحد پردازشگر مرکزی (CPU) است. با توجه به توان پردازشی بالای GPU در کاربردهای غیرگرافیکی، شاخه‌ی جدیدی در علوم کامپیوتر به نام محاسبات با اهداف همه‌منظوره بر روی واحد GPU ایجاد شده است. هدف فعالان این عرصه، بهره‌گیری از GPU به عنوان یک کمک‌پردازنده محاسباتی در برنامه‌های غیر گرافیکی و برنامه‌های عمومی است. پردازنده‌های گرافیکی جدید، از چندین پردازنده با کارایی بالا تشکیل شده‌اند که قادر به انجام محاسبات بسیار سنگین هستند.

 

- کتاب پردازش موازی در چه سطحی تدریس می شود و چه بخش هایی را دارا می باشد  

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

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

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

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

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

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

فصل چهارم: مدل‌های برنامه‌نویسی موازی، در این فصل انواع مدل‌های برنامه‌نویسی موازی تشریح می‌شود و برای درک بهتر آنها، چگونگی موازی‌سازی الگوریتم ضرب ماتریس‌ها در هر کدام از این مدل‌ها بیان می‌شود.

فصل پنجم: معماری GPU، این فصل به شرح جزئیات سخت‌افزار و معماری دستگاه‌های CUDA می‌پردازد. برای دستیابی به کارایی بالا در برنامه‌نویسی CUDA، اطلاعات کاملی راجع به معماری GPU مورد نیاز است.

فصل ششم: مفهوم موازی‌سازی از منظر GPU، این فصل مقدمه‌ای بر مفاهیم برنامه‌نویسی موازی از جمله تفاوت میان برنامه‌های سریال و موازی و چگونگی حل مسائل به روش‌های متفاوت است. در واقع این فصل به برنامه‌نویسانی که به صورت سریال برنامه‌نویسی می‌کنند کمک می‌کند که درک ابتدایی از مفاهیمی که در فصل‌های بعدی در این کتاب بدان پرداخته می‌شود، به دست آورند. 

فصل هفتم: راه‌اندازی CUDA، در این فصل فرایند نصب CUDA SDK تحت سیستم‌عامل ویندوز شرح داده می‌شود.

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

فصل نهم: مدیریت حافظه توسط CUDA، درک تفاوت انواع حافظه و چگونگی بکارگیری آنها توسط CUDA به عنوان بزرگترین عامل تأثیرگذار بر روی کارایی، موضوع این فصل است. توضیحات همراه با مثال‌هایی از چگونگی کارکرد انواع مختلف با جزئیات کافی تشریح می‌شود.

فصل دهم: برنامه‌نویسی CUDA C/C++، در این فصل به چگونگی همکاری بین CPU و GPU پیرامون مثال‌های مختلف پرداخته می‌شود.

 

با تشکر از شما

1396-09-04