وبلاگ اطلاع رسانی درسی حسین غلامعلی نژاد

وبلاگ اطلاع رسانی درسی حسین غلامعلی نژاد

وبلاگ اطلاع رسانی درسی حسین غلامعلی نژاد

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

به ‌یاد می‌آورید روزهایی که مردم به پردازنده کامپیوتر خود افتخار می‌کردند (بازگردید به ‌دورانی که کارت‌های گرافیک 1 مگابایت حافظه و سیستم‌های کامپیوتری حداکثر 16 مگابایت حافظه اصلی داشتند). امروزه بهترین مدل از پردازش‌گرهای مرکزی کامپیوتر در مقایسه با کارت‌های گرافیکی از قیمت پایین‌تری برخوردار هستند.

به‌طور مثال، در حالی ‌که قیمت پردازنده Intel Core i7-5960X هشت‌هسته‌ای با فرکانس کاری 3 گیگاهرتز در بازار داخلی نزدیک به سه میلیون سیصد هزار تومان است، اما کارت گرافیک ASUS GTX TITAN Z همراه با 12 گیگابایت حافظه در محدوده قیمت شش میلیون و هفتصد هزار تومان یا GeForce GTX 980 همراه با سیستم خنک‌کننده آبی آن در محدوده 12 میلیون تومان قرار دارند. حتی عاشقان بازی‌های کامپیوتری امروزه به‌‌سرعت کارت گرافیک خود و نه به CPU دستگاه خود افتخار می‌کنند. اما کارت‌های گرافیک دیگر در تملک بازی‌ها قرار ندارند و آن‌گونه که خواهید خواند، طیف گسترده‌ای از برنامه‌های کاربردی به آن‌ها علاقه‌مند شده‌اند. همین موضوع باعث خط‌دهی دنیای فناوری و بازار به سمت کارت‌های گرافیکی شده است.

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

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

 شکل 1: کدهای برنامه به دو بخش تقسیم می‌شوند. رشته‌ای متوالی از کدها که توسط CPU مورد پردازش قرار می‌گیرند و محاسبات‌ 5 درصد از کدها توسط GPU انجام می‌شود.

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

 شکل 2: پردازنده‌های گرافیکی از هزاران هسته موازی برای پردازش مؤثر وظایف سنگین استفاده می‌کنند.

محاسبات همه‌منظوره روی واحد پردازش گرافیکی
GPGPU (سرنام General-Purpose Computing on Graphics Processing Units) یا همان محاسبات همه‌منظوره روی واحد پردازش گرافیکی از واحد پردازش‌گر گرافیکی و برای انجام محاسبات خود فقط از پردازش‌گر گرافیکی استفاده می‌کند. به‌دلیل این‌که GPU به‌طور خاص برای انجام کارهای گرافیکی طراحی شده است، در نتیجه عملیات برنامه‌نویسی با محدودیت‌هایی روبه‌رو هستند. با توجه به معماری خاص آن‌ها، GPU فقط برای حل مشکلاتی که از پردازش جریانی استفاده می‌کنند، مؤثر خواهند بود، در نتیجه سخت‌افزار آن‌ها تنها به روش خاصی می‌تواند مورد استفاده قرار گیرد. GPU‌ تنها توانایی انجام پردازش روی آرایه‌ها و قطعات مستقل را دارند، اما در مقابل می‌توانند این قطعات مستقل را به‌صورت موازی پردازش کنند.

سرمایه‌گذاری روی یادگیری برنامه‌نویسی گرافیکی، سرمایه‌گذاری برای آینده است. حتی ارزان‌قیمت‌ترین کارت‌های گرافیکی امروزی نیز به شما امکان یادگیری این سبک از برنامه‌نویسی را ارائه می‌کنند.

این تکنیک به‌ویژه زمانی مؤثر خواهد بود که برنامه‌نویسی بخواهد پردازش را روی طیف گسترده‌ای از آرایه‌ها یا بخش‌ها انجام دهد. در این حالت، GPU پردازش‌گر‌های جریانی هستند. پردازش‌گرهایی که توانایی انجام عملیات موازی روی داد‌ه‌های مختلف را در یک لحظه خواهند داشت. برای بهره‌مندی از مدل برنامه‌نویسی گرافیکی روش‌های مختلفی وجود دارد که عمدتاً دو گزینه شناخته شده به کاربران پیشنهاد می‌شود؛ OpenCL و CUDA. در صورتی ‌که امروزه Har‌lan از قدرتی به‌مراتب بالاتر برخوردار است.

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

CUDA
CUDA (سرنام Compute Unified Device Architecture) پلتفرم محاسبات موازی است که رابط‌های برنامه‌نویسی را در اختیار برنامه‌نویسان قرار می‌دهد. کودا در سال 2007 توسط شرکت ا‌ن‌ویدیا معرفی شد و به طراحان نرم‌افزار اجازه می‌دهد تا از توانایی‌های GPU در جهت محاسبات همه‌منظوره روی واحد پردازش گرافیکی استفاده کنند که پیش‌تر به آن اشاره کردیم. پلتفرم کودا یک لایه نرم‌افزاری است که دسترسی مستقیم به مجموعه دستورالعمل‌های مجازی GPU و عناصر محاسبات موازی را می‌دهد. این پلتفرم به ‌گونه‌ای طراحی شده است که با زبان‌های برنامه‌نویسی سی پلا‌س‌پلاس، سی و فرترن کار می‌کند. این قابلیت دسترسی کار را برای متخصصان برنامه‌نویسی موازی برای ‌استفاده از منابع GPU به همان شکلی که از دایرکت‌ایکس یا اپن‌جی‌ال استفاده می‌کنند، هموار کرده است. کودا همچنین از چهارچوب‌های برنامه‌نویسی از قبیل OpenACC و OpenCL پشتیبانی می‌کند. 

Harlan
هارلن توسط دکتر اریک هولک متخصص علوم کامپیوتر و استاد دانشگاه ایندیانا طراحی شده است. هارلن در گروه زبان‌های برنامه‌نویسی سطح بالایی است که برای محاسبات GPU مورد استفاده قرار می‌گیرد. به‌طور معمول، زبان‌های برنامه‌نویسی GPU یک آرایه یک‌بعدی یا دو‌بعدی از داده‌های عددی را ارائه می‌کند که عمدتاً برای محاسبات ساده مورد‌ استفاده قرار می‌گیرد. هارلن از آرایه‌های از پیش ساخته‌ای بهره می‌برد که از انعطاف‌پذیری بیش‌تری برخوردار هستند. اگر شما ماتریکس یا آرایه‌ای را در اختیار داشته باشید، بیش‌تر زبان‌های GPU در ارتباط با آرایه‌های داخلی و اندازه آن‌ها با محدودیت‌هایی همراه هستند. اما در هارلن این محدودیت‌ها وجود ندارد، به‌ طوری که برنامه‌نویسان از انعطاف‌پذیری بیش‌تری برخوردار هستند (شکل 3).

 شکل 3: هارلن از چند دستگاه پشتیبانی می‌کند.

آینده برنامه‌نویسی گرافیکی به کجا خواهد رفت؟ 
هر روزه بر تعداد برنامه‌هایی که از GPU استفاده می‌کنند افزوده می‌شود. در مدت زمان کوتاهی بیش‌تر طراحان و حتی شرکت‌های بزرگ به‌طور فزاینده‌ای به سوی فرآیندهای گرافیکی خواهند آمد (هم‌اکنون نیز شرکت‌های بزرگ برنامه‌های خود را بر مبنای این الگو قرار داده‌اند).  شبیه به کاری که اکنون مرورگرهای وب در حال انجام آن هستند. ما در آینده به‌طور فزاینده برنامه‌هایی را مشاهده خواهیم کرد که دیگر مختص رسم نقاشی‌های فانتزی نخواهد بود. برنامه‌ها به ‌گونه‌ای بازنویسی خواهند شد که از معماری موازی GPU استفاده کنند. اما این‌گونه محاسبات برای چه گروه از افراد جنبه کاربردی خواهد داشت؟ در یک کلام برای همه گروه‌های جامعه! فیزک‌دانان از آن‌ها برای مطالعه اجرام استفاده می‌کنند، شیمی‌دانان از آن‌ها برای مطالعه واکنش‌ها، ستاره‌شناسان برای شبیه‌سازی کهکشان‌ها و زیست‌شناسان برای به دست آوردن آمارهای حیاتی از GPU استفاده خواهند کرد. با توجه به این گستره وسیع از کاربردها شاید من هم در آینده برای گرم کردن دفتر کارم از GPU استفاده کنم! 

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

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

جدول 1: برنامه‌های مبتنی بر شتاب‌دهنده گرافیکی

اندرو لومسداینه، مدیر مرکز تحقیقات CREST، واحدی مستقر در دانشگاه ایندیانا درباره برنامه‌نویسی گرافیکی می‌گوید: «یکی از مشکلاتی که پژوهش‌گران GPU با آن دست به‌ گریبان هستند، در ارتباط با نوشتن برنامه‌هایی است که قرار است روی ماشین‌هایی که از دو پردازنده مختلف استفاده کنند اجرا شوند، به‌ طوری که این برنامه‌ها توانایی انجام موازی کارها را داشته باشند. GPUs بسیار موازی هستند، اما نوع متفاوتی از موازی کاری را نسبت به هسته‌های CPU مورد استفاده قرار می‌دهند. محققان در تلاش هستند تا مکانیسم‌هایی را برای برنامه‌نویسی ماشینی و یک‌پارچه‌سازی این روش‌ها در برنامه‌نویسی به وجود آورند.»

چه تجارت‌هایی از برنامه‌های مبتنی بر شتاب‌دهنده گرافیکی استفاده می‌کنند
امروزه طیف گسترده‌ای از صنایع با بیش از سه هزار برنامه ‌کاربردی بهینه‌سازی شده برای پردازنده‌های گرافیکی در خدمت کاربران قرار دارند. بهینه‌سازی‌های انجام شده روی این برنامه‌ها باعث سرعت بخشیدن به انجام کارها شده است. امروزه برنامه‌‌نویسی گرافیکی در محاسبات مالی، تجزیه و تحلیل‌های علمی داده‌ها، هوش ‌مصنوعی، کارخانجات، حوزه چندرسانه‌ای، صنعت نفت و گاز، شیمی، زیست‌شناسی، تجزیه و تحلیل‌های عددی، فیزیک و حتی امنیت و ایمنی مورد استفاده قرار می‌گیرند. جدول 1 چند نمونه از این برنامه‌های کاربردی ارائه شده در صنایع را نشان می‌دهد. برنامه‌هایی که در جدول بالا مشاهده کردید، تنها بخش بسیار کوچکی از برنامه‌هایی است که امروزه محاسبات خود را بر مبنای شتاب‌دهنده گرافیکی انجام می‌دهند، در حالی که در صنعت نفت و گاز برنامه‌هایی همچون CGG- Inside Earth ،Echelon Stoneridge ،GeoMage: Multifocusing و ... یا در حوزه امنیت برنامه‌هایی همچون  Herta Security BioSurveillance NEXT،BioFinder ،Mi-AccLib (2.0.1 ،Intuvision ،NerVve - Visual Search Solution NVSS)  و ... قرار دارند.

سخن آخر
سرمایه‌گذاری روی یادگیری برنامه‌نویسی گرافیکی، سرمایه‌گذاری برای آینده است. حتی ارزان‌قیمت‌ترین کارت‌های گرافیکی امروزی نیز به شما امکان یادگیری این سبک از برنامه‌نویسی را ارائه می‌کنند.

hosein gholamalinejad

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی