ravegoat
15-11-09, 07:41
محاسبات موازی به دسته ای از فرآیند ها اطلاق می شود که هر کدام بخشی از پردازش یک مسئله ی محاسباتی را بر عهده می گیرند. روند کاری این فرآیند ها در نهایت منجر به حل مسئله می شود.
تصمیم ما در این قسمت به کارگیری محاسبات موازی برای رسیدن به هدف است. هر پروسه ی حسابی می تواند به طور مستقل تحت یک هسته ی پردازنده اجرا شود. دستورالعمل های MultiThreading در فناوری .Net تا حدی مدیریت این کار را بر عهده می گیرند. اما موضوع بحث ما غیر این است. ما قصد داریم هسته های پردازشی (از نوع نرم افزاری) را روی رایانه های مختلف قرار دهیم. رایانه ها بایستی در یک شبکه باشند تا هسته ها بتوانند با هم تعامل داشته باشند. این عمل از جهتی شبیه به محاسبات ابری (Cloud Computing) است.
نکته:
محاسبات موازی با پردازش موازی در GPU متفاوت است. GPU یا واحد پردازنده گرافیکی می تواند یک دستورالعمل را همزمان بر روی n داده اجرا کند. بهره گیری از این قابلیت GPU در قالب برنامه نویسی CUDA و امثالهم مطرح می شود که ما از شرح آن صرف نظر می کنیم. واحد پردازشی ما در این موضوع CPU است و الزامی وجود ندارد CPU ها که در یک شبکه قرار دارند، دستور های مشابهی را اجرا نمایند.
روش کلی:
نرم افزار برای پیاده سازی محاسبات موازی می تواند داری دو بخش باشد: هسته ی اصلی و هسته ی محاسباتی.
هسته ی اصلی داده های مسئله ها را از طریق شبکه به هسته های محاسباتی می دهد. هسته های محاسباتی داده ها را پردازش می کنند و نتایج را از راه شبکه، در اختیار هسته ی اصلی می گذارند. هسته ی اصلی اطلاعات دریافتی را تحلیل می کند و جواب مسئله را گزارش می دهد. به عبارتی دیگر در شبکه هر رایانه بخشی از پردازش را انجام می دهد گویی که پردازنده ها با هم ادغام شده اند.
توجه داشته باشید این روش زمانی بهینه است که نرخ تعامل اطلاعاتی در شبکه بین هسته های نرم افزار کم تر از بار پردازشی باشد.
مثال:
مسئله: به دست آوردن اعداد اول در بازه 1 تا 10 میلیون
تعداد رایانه ها در شبکه: 10 سیستم + یک سرور
ابتدا هسته ی اصلی را روی سرور اجرا می کنیم. هسته های پردازشی را روی کلاینت ها نصب می کنیم. آدرس IP کلاینت ها را به هسته ی اصلی می دهیم. حالا هسته ی اصلی وظیفه دارد پردازش کلی را بین 10 سیستم تقسیم کند. بدین ترتیب هسته ی پردازشی اول اعداد اول بین 1 تا یک میلیون را به دست مي آورد ، هسته ی دوم اعداد اول بین یک میلیون تا دو میلیون را و به همین ترتیب تا هسته ی دهم. هر هسته پس از پایان کارش، لیست اعداد اول به دست آمده را در قالب Array به هسته ی اصلی می فرستد. در نهایت هسته ی اصلی با مرتب کردن نتایج (Sort)، آن ها را گزارش می کند.
در پست آینده برای مثال بالا یک الگوریتم در VB.Net طراحی می کنیم. به علاوه طراحی ماژول هماهنگ با محاسبات موازی در VB.Net نیز آموزش داده می شود.
دوستان می توانند نظرات یا سوالات خود را در این جا بیان کنند.:1. (26):
آرمین:11():
تصمیم ما در این قسمت به کارگیری محاسبات موازی برای رسیدن به هدف است. هر پروسه ی حسابی می تواند به طور مستقل تحت یک هسته ی پردازنده اجرا شود. دستورالعمل های MultiThreading در فناوری .Net تا حدی مدیریت این کار را بر عهده می گیرند. اما موضوع بحث ما غیر این است. ما قصد داریم هسته های پردازشی (از نوع نرم افزاری) را روی رایانه های مختلف قرار دهیم. رایانه ها بایستی در یک شبکه باشند تا هسته ها بتوانند با هم تعامل داشته باشند. این عمل از جهتی شبیه به محاسبات ابری (Cloud Computing) است.
نکته:
محاسبات موازی با پردازش موازی در GPU متفاوت است. GPU یا واحد پردازنده گرافیکی می تواند یک دستورالعمل را همزمان بر روی n داده اجرا کند. بهره گیری از این قابلیت GPU در قالب برنامه نویسی CUDA و امثالهم مطرح می شود که ما از شرح آن صرف نظر می کنیم. واحد پردازشی ما در این موضوع CPU است و الزامی وجود ندارد CPU ها که در یک شبکه قرار دارند، دستور های مشابهی را اجرا نمایند.
روش کلی:
نرم افزار برای پیاده سازی محاسبات موازی می تواند داری دو بخش باشد: هسته ی اصلی و هسته ی محاسباتی.
هسته ی اصلی داده های مسئله ها را از طریق شبکه به هسته های محاسباتی می دهد. هسته های محاسباتی داده ها را پردازش می کنند و نتایج را از راه شبکه، در اختیار هسته ی اصلی می گذارند. هسته ی اصلی اطلاعات دریافتی را تحلیل می کند و جواب مسئله را گزارش می دهد. به عبارتی دیگر در شبکه هر رایانه بخشی از پردازش را انجام می دهد گویی که پردازنده ها با هم ادغام شده اند.
توجه داشته باشید این روش زمانی بهینه است که نرخ تعامل اطلاعاتی در شبکه بین هسته های نرم افزار کم تر از بار پردازشی باشد.
مثال:
مسئله: به دست آوردن اعداد اول در بازه 1 تا 10 میلیون
تعداد رایانه ها در شبکه: 10 سیستم + یک سرور
ابتدا هسته ی اصلی را روی سرور اجرا می کنیم. هسته های پردازشی را روی کلاینت ها نصب می کنیم. آدرس IP کلاینت ها را به هسته ی اصلی می دهیم. حالا هسته ی اصلی وظیفه دارد پردازش کلی را بین 10 سیستم تقسیم کند. بدین ترتیب هسته ی پردازشی اول اعداد اول بین 1 تا یک میلیون را به دست مي آورد ، هسته ی دوم اعداد اول بین یک میلیون تا دو میلیون را و به همین ترتیب تا هسته ی دهم. هر هسته پس از پایان کارش، لیست اعداد اول به دست آمده را در قالب Array به هسته ی اصلی می فرستد. در نهایت هسته ی اصلی با مرتب کردن نتایج (Sort)، آن ها را گزارش می کند.
در پست آینده برای مثال بالا یک الگوریتم در VB.Net طراحی می کنیم. به علاوه طراحی ماژول هماهنگ با محاسبات موازی در VB.Net نیز آموزش داده می شود.
دوستان می توانند نظرات یا سوالات خود را در این جا بیان کنند.:1. (26):
آرمین:11():