مقدمه ای بر پردازش موازی

مقدمه ای بر پردازش موازی

مثال

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

راه اول - خودم ترجمه کنم

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

راه دوم- از چند نفر کمک بگیرم

چه طور کتاب را بین مثلا ده نفر تقسیم کنم؟ در اینجا دو راه وجود دارد. راه اول این است که یک کپی از کتاب را برای همه ارسال می کنم (انتقال پیام). راه دوم این است که  همه از روی یک کتاب ترجمه را انجام دهند(حافظه مشترک). 

حالا هر نفر در روز چند صفحه باید ترجمه کند؟ کلا 10 نفر هستیم و یک نفر هم مسئول هماهنگی است و کاری انجام نمی دهد. 600 صفحه کتاب تقسیم بر 10 نفر شود به هر نفر 60 صفحه می رسد و طی 6 روز بایستی ترجمه انجام شود لذا هر نفر بایستی 10 صفحه در روز ترجمه کنند. اما بعد از ترجمه چه کاری باید انجام شود ؟ هر شخص ترجمه خودش را به هماهنگ کننده (فرضا خودم مسئول هماهنگی هستم) تحویل می دهد و من خلاصه برداری را انجام می دهم(انتقال اطلاعات).

مقایسه دو حالت ؟

سرعت ما در حالت دوم 10 برابر می شود 

پیچیدگی در حالت دوم افزایش می یابد 

 

پردازش موازی چیست؟ 

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

 

در مثالی که ارائه  دادیم ایا واقعا سرعت ما 10 برابر می شود؟

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

اگر یکی کار خود را سریع تر انجام دهد چه می شود؟

به میزانی که شخص دیگر عقب است از سهم او برداشته و به این شخص می دهیم

توسط یک پردازنده

Int A[100];

Int B[100];

Int C[100];

For (inr i=0;i<100;i++)

Cin >> A[i];

For (int i=0;i<100;i++)

Cin >> B[i];

For (int i=0;i<100;i++)

C[i]=B[i]+A[i];

 

پردازنده اول

پردازنده دوم

Int A[50];

Int B[50];

Int C[50];

For (inr i=0;i<50;i++)

Cin >> A[i];

For (int i=0;i<50;i++)

Cin >> B[i];

For (int i=0;i<50;i++)

C[i]=B[i]+A[i];

 

Int A[50];

Int B[50];

Int C[50];

For (inr i=0;i<50;i++)

Cin >> A[i];

For (int i=0;i<50;i++)

Cin >> B[i];

For (int i=0;i<50;i++)

C[i]=B[i]+A[i];

 

تعاریف اولیه 

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

الگوریتم موازی: به الگوریتمی که برای پردازش موازی طراحی می شود الگوریتم موازی گفته

برنامه موازی:دیدگاه عملی متناسب با واقعیت های موجود سخت افزاری و نرم افزاری از یک الگوریتم موازی است

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

مثال:جمع چند عدد ؟

Const Int n

Int sum=0

For (int i=0;i<n;i++)

}

Cin >>A

Sum=sum+A

{

مراحل پردازش موازی

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

دیدگاه ها
اولین دیدگاه را شما بنویسید | ثبت دیدگاه