ارزیابی الگوریتمها

Download Report

Transcript ارزیابی الگوریتمها

‫‪Chapter 1‬‬
‫ارزیابی الگوریتم ها‬
‫معیار ارزیابی الگوریتم ها‪:‬‬
‫‪ .1‬حافظه مصرفی الگوریتم‬
‫‪ .2‬زمان مصرفی الگوریتم‬
‫‪ .3‬هزینه الگوریتم یا ‪Cost‬‬
‫‪2 of 57‬‬
‫حافظه مصرفي‪:‬‬
‫شمردن حافظه استفاده شده یا متغیرهای مصرفی ‪.‬‬
‫(این مالک مهم نیست)‬
‫‪3 of 57‬‬
‫زمان مصرفي )‪: T(n‬‬
‫شمارش دستورات طوری که هر دستور از هر نوعی یک واحد زمان‪.‬‬
‫بایستی ‪ step‬ها شمارش شود‪:‬‬
‫‪( Basic step .1‬مراحل عادی)‬
‫‪ (Computing step .2‬انجام اعمال محاسباتی و منطقی)‬
‫‪ ( Routing step .3‬پاسکاری داده بروی پردازنده ها)‬
‫‪4 of 57‬‬
‫هزينه‪:‬‬
‫)‪Cost=p(n).t(n‬‬
‫تعداد پردازنده ها = )‪p(n‬‬
‫زمان مصرفی = )‪T(n‬‬
‫درالگوریتم های سنتی‪P(n)=1‬است پس)‪.Cost=t(n‬‬
‫‪Cost seq <= Cost par‬‬
‫‪θ <= Cost par‬‬
‫‪5 of 57‬‬
‫تسریع‪:‬‬
‫هدف الگوریتم های موازی‪:‬‬
‫کاهش زمان مصرفی یا ‪ speed up‬میباشد‪.‬‬
‫زمان‪worse‬سریعترین الگوریتم ‪seq‬‬
‫زمان‪worse‬سریعترین الگوریتم ‪par‬‬
‫‪Tseq‬‬
‫‪S ‬‬
‫‪Tpar‬‬
‫‪6 of 57‬‬
‫= ‪Speead up‬‬
‫مثال‪:‬‬
‫‪ search‬در یک آرایه نا مرتب ‪ n‬خانه ای‪.‬‬
‫در حالت موازی ‪ n‬داده بین ‪ N‬پردازنده تقسیم میشود‪.‬‬
‫‪P=N‬‬
‫)‪Cost seq=1*O(n‬‬
‫)‪Cost par=N*O(n/N)=O(n‬‬
‫‪7 of 57‬‬
‫كارایی ‪:Efficiency‬‬
‫‪Cost‬یک الگوریتم در حالت‪seq‬‬
‫‪*100%‬‬
‫‪ Cost‬یک الگوریتم در حالت‪par‬‬
‫‪8 of 57‬‬
‫=‪E‬‬
‫كارایی ‪:EFFICIENY‬‬
‫در حالت ایده آل توقع داریم تسریع ما با افزایش تعداد ‪ p‬ها به‪ n‬با ‪ n‬برا‬
‫بر میشود ‪.‬‬
‫‪E = N/N*100%= 100%‬‬
‫پس اگر ‪ s=N‬باشد داریم ‪.‬‬
‫‪par‬‬
‫‪= Cost‬‬
‫‪seq‬‬
‫پس در حالت ایده ال )‪(s=N‬‬
‫‪S=N‬‬
‫تسریع همیشه زیر خط ‪ S=N‬قرار دارد ‪.‬‬
‫‪9 of 57‬‬
‫‪Cost‬‬
‫قانون امدال ‪: amdal‬‬
‫• امکانی وجود ندارد که یک الگوریتم با ‪ N‬پردازنده شروع کند و به‬
‫پایان برسد ‪.‬‬
‫• هر الگوریتمی با یک پردازنده شروع بکار میکند ‪.‬‬
‫درهمه نمودارها در این قسمت کارایی را از دست میدهیم‬
‫‪N‬‬
‫‪N‬‬
‫‪1‬‬
‫‪T‬‬
‫سنکرونیزاسیون‬
‫‪10 of 57‬‬
‫‪...‬قانون امدال ‪:‬‬
‫در همه فضاهای خالی کارایی را از دست میدهیم‬
‫’‪f‬‬
‫’‪parallel  f <<f‬‬
‫‪f‬‬
‫’‪sequential  f ∾ f‬‬
‫‪11 of 57‬‬
‫‪...‬قانون امدال ‪:‬‬
‫‪12 of 57‬‬
‫‪...‬قانون امدال ‪:‬‬
‫• امدال گفت ‪ s=N‬ایده آل است اما چون هر الگوریتمی با‬
‫یک پردازنده شروع بکار میکند پس مقداری کارایی از‬
‫دست میدهیم پس حداکثر ‪ S=N‬است و کارایی همیشه‬
‫کمتر از خط ‪ s=N‬است ‪.‬‬
‫• بعبارت دیگر امدال گفت هر الگوریتمی باید به حالت‬
‫سلایر شروع شود تا در حالت موازی ادامه پیدا کند ‪.‬‬
‫• حال باید یک حد پایین نیز برای الگوریتم های موازی‬
‫مشخص کنیم‪.‬‬
‫‪13 of 57‬‬
‫قانون مینسكی ‪: minsky‬‬
‫‪S  log2N‬‬
‫حداقل سریع ‪‬‬
‫پس باید الگوریتم موازی در فضای هاشور خورده زیر باشد‪:‬‬
‫‪s=N‬‬
‫‪S  log2N‬‬
‫‪14 of 57‬‬
‫‪...‬قانون مینسكی ‪:‬‬
‫عوامل تاثیر گذار بر تسریع از نظر مینیسکی‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫پهنای باند ‪ IO‬و حافظه‬
‫وابستگی داده ای‬
‫وابستگی دستورالعمل‬
‫زمان سنکرونیزاسیون‬
‫زمان سربار‬
‫چگونگی شکستن مساله‬
‫چطور نکات باال را دخالت دهیم؟‬
‫‪15 of 57‬‬
‫قانون ‪: worlton‬‬
‫تعداد ‪ task‬ها باید حداقل شود‪ .‬فرض کنید‪:‬‬
‫‪= N‬تعداد ‪ task‬ها‬
‫‪=t‬متوسط زمان پردازش هر ‪task‬‬
‫‪ =p‬تعداد پردازندها‬
‫‪ =ts‬زمان سنکرونیزاسیون‬
‫‪ =to‬زمان سربار‬
‫حال‪:‬‬
‫‪Tseq = N.t‬‬
‫)‪Tpar = ts +[N/p](t+to‬‬
‫)‪ (t+to‬زمان اجرای هر ‪task‬‬
‫]‪:[N/p‬تعداد ‪Step‬ها‬
‫‪16 of 57‬‬
‫‪21 of 57‬‬
‫قانون مينسكي ‪: minsky‬‬
‫پس تسریع برابر است با‪:‬‬
‫طرفین را بر ‪ N.t‬تقسیم میکنیم ‪:‬‬
‫‪N .t‬‬
‫‪S ‬‬
‫‪N‬‬
‫‪ts ‬‬
‫) ‪(t  to‬‬
‫‪P‬‬
‫‪1‬‬
‫‪1‬‬
‫‪to‬‬
‫‪‬‬
‫) ‪(1 ‬‬
‫‪P‬‬
‫‪t‬‬
‫برای اینکه تسریع حداکثر شود بایستی‪:‬‬
‫‪17 of 57‬‬
‫‪s‬‬
‫‪ts‬‬
‫‪N .t‬‬
‫‪S ‬‬
‫قانون ‪: worlton‬‬
‫‪ -1‬کاهش زمان ‪. to,ts‬‬
‫‪ -2‬افزایش ‪. t‬‬
‫‪ -3‬افزایش ‪. p‬‬
‫‪ -4‬افزایش ‪. N‬‬
‫افزایش تعداد پردازندها بخاطر اینکه کارایی را نابود میکند مناسب نیست‪:‬‬
‫‪P‬‬
‫‪∞ : E=S / P‬‬
‫‪0‬‬
‫با افزایش ‪ )N→ ∞( N‬در فرمول اول داریم ‪:‬‬
‫‪N‬‬
‫∞ ‪∞ : S=∞ /‬‬
‫رفع ابهام‪:‬‬
‫‪P‬‬
‫‪to‬‬
‫‪1‬‬
‫‪t‬‬
‫‪S ‬‬
‫‪t‬‬
‫‪1‬‬
‫)‪(t  to‬‬
‫‪P‬‬
‫‪18 of 57‬‬
‫‪N ‬‬
‫‪0‬‬
‫‪lim‬‬
‫مثال‪:‬‬
‫برای یک مساله با مفروضات زیر ‪ S,E‬را محاسبه کنبد ‪.‬‬
‫‪3‬‬
‫‪2‬‬
‫(‪T seq= )n / 3( – )n / 3‬‬
‫‪2‬‬
‫‪T par=(n - 1) (n / 2) / P‬‬
‫پس الگوریتم یک الگوریتم کارا است‪.‬‬
‫‪19 of 57‬‬
‫مثال‪:‬‬
‫در این مساله تسریع و کارایی چقدر است؟‬
‫‪20 of 57‬‬
‫‪...‬مثال‪:‬‬
‫‪21 of 57‬‬
‫وابستگي ‪:‬‬
‫وابستگی سه دسته است‪:‬‬
‫‪22 of 57‬‬
‫‪...‬وابستگی ‪:‬‬
‫‪23 of 57‬‬
‫‪...‬وابستگي ‪:‬‬
‫نكته ‪ :‬اگر در وابستگي داده ای حلقه رخ داده باشد به بن بست‬
‫رسیده ایم و باید بصورت ‪ seq‬پیاﺪه سازی کنیم‪.‬‬
‫• اگرهمه گره ها به یک سمت باشد و حلقه ای وجود نداشته‬
‫باشد گراف ما گراف آبشاری خواهد بود‪.‬‬
‫‪24 of 57‬‬
‫مثال‪:1‬‬
‫برای برنا مه روبرو یک گراف وابستگی رسم کنید‪.‬‬
‫‪25 of 57‬‬
‫مثال‪:2‬‬
‫نکته ‪ :‬زمانیکه در حلقه متغیرهای اسکالر (مانند ‪ )j‬داریم ممکن است وابستگی های دیگری‬
‫ایجاد کند‪.‬‬
‫‪26 of 57‬‬
‫مثال‪:3‬‬
‫بین ‪s2‬و ‪s3‬حلقه ایجاد شده است و این حلقه باعث کاهش موازي سازي میشود‪.‬‬
‫‪27 of 57‬‬
‫مثال‪:4‬‬
‫‪28 of 57‬‬
‫مثال‪:5‬‬
‫‪29 of 57‬‬
‫مثال‪:6‬‬
‫‪30 of 57‬‬
‫‪...‬وابستگی ‪:‬‬
‫در کل‪:‬‬
‫‪ -1‬هر وقت‪ :‬اندیس حلقه منفی بود ارتباط با مرحله بعدی و‬
‫اندیس حلقه مثبت بود ارتباط با مرحله قبلی‪.‬‬
‫‪ -2‬متغیر های اسکالر باعث ایجاد وابستگی بین تکرارهای مختلف‪.‬‬
‫‪ -3‬در حلقه های ‪ doall‬متغیر های برداری باعث ایجاد وابستگی نمیشوند‪.‬‬
‫‪ -4‬در حلقه های ‪ doacross‬متغیر های برداری نیزباعث ایجاد وابستگی می‬
‫شوند‪.‬‬
‫نکته‪ :‬وابستگی ‪ data flow‬به ذات برنامه مربوط است‪.‬‬
‫نکته‪ :‬وابستگی های ‪ anti data‬و ‪ output‬معموالً بخاطر رعایت نشدن برنا‬
‫مه نویسی موازی رخ میدهد‪.‬‬
‫‪31 of 57‬‬
: ‫حذف وابستگی ها‬
:‫سه روش برای حذف وابستگی ها وجود دارد‬
Variable Renaming .1
Scaler Expantion .2
Node Spliting .3
32 of 57
: Variable Renaming -1
:‫مثال‬
S3:AA=A*D
 ‫ انجام میدهیم‬Renaming ‫ یک‬A‫ روی‬S3 ‫در قانون‬
33 of 57
‫‪: Scaler Expantion -2‬‬
‫هدفش حذف وابستگی های ناشی از متغیر های اسکالر می باشد پس یک‬
‫متغیر اسکالر را به یک متغیر برداری تغیر میدهد‪.‬‬
‫مثال‪:‬‬
‫‪FOR I=1 to 100 do‬‬
‫‪S1: b=B(I)-2‬‬
‫)‪S2: C=C’(I)-B(I‬‬
‫‪S3: A(I)=b+C‬‬
‫‪END.‬‬
‫)‪bb’(I‬‬
‫تغییرات مقابل را اعمال و برنامه را بازنویسی میکنیم‪:‬‬
‫)‪CC(I‬‬
‫‪34 of 57‬‬
:Scaler Expantion…
FOR I=1 to 100 do
S1: b’(I)=B(I)-2
S2: C(I)=C’(I)-B(I)
S3: A(I)=b’(I)+C(I)
END.
35 of 57
‫‪: Node Spliting -3‬‬
‫وابستگی بین متغیرهای برداری در حلقه های ‪ doacross‬را حذف‬
‫میکند‪ .‬برای این منظور متغیر برداری را با یک متغیر برداری دیگر‬
‫‪ rename‬میکند تا اندیس های انها یکسان شود و تبدیل به یک حلقه‬
‫‪ doall‬گردد‪.‬‬
‫مثال‪:‬‬
‫‪FOR I=1 to 100 do‬‬
‫)‪S1: A(I)=B(I)-C(I‬‬
‫‪S2: D(I)=A(I)+2‬‬
‫)‪S3: F(I)=D(I)+A(I+1‬‬
‫‪END.‬‬
‫‪36 of 57‬‬
‫…‪:Node Spliting‬‬
‫برنامه را بازنویسی میکنیم‪:‬‬
‫‪FOR I=1 to 100 do‬‬
‫)‪S0: AA(I)=A(I+1‬‬
‫)‪S1: A(I)=B(I)-C(I‬‬
‫‪S2: D(I)=A(I)+2‬‬
‫)‪S3: F(I)=D(I)+A(I+1‬‬
‫‪END.‬‬
‫خط ‪ S0‬را در هر کجا بگذاریم باز هم گراف ما آبشاری خواهد بود‪.‬‬
‫‪37of 57‬‬
‫وابستگي كنترل يا دستورالعمل‪:‬‬
‫این وابستگی در سطوح مختلف مطرح میشود ‪:‬‬
‫‪ .1‬در سطح بالک‬
‫‪ .2‬در سطح ‪ :1 : statement‬درون جمله‬
‫‪ .3‬در سطح ‪bit‬‬
‫مثال‪:‬‬
‫‪38 of 57‬‬
‫‪ :2‬بین جمالت‪.‬‬
‫كاهش وابستگی‪:‬‬
‫• کامپایلر با در نظر گرفتن قوانینی مانند قوانین ‪Brent‬م‬
‫یتواند حداکثر توازی سازی را انجام دهد‪.‬‬
‫• همچنین قوانینی مانند ‪ recursive doubling‬برای‬
‫تبدیل درخت محاسبه نامتقارن به متقارن جهت ایجاد حد‬
‫اکثر توازی سازی وجود دارد‪.‬‬
‫• اکثر مشکالت در الگوریتم موازی به وابستگی داده بر‬
‫میگردد‪.‬‬
‫‪39 of 57‬‬
‫قوانین ‪:Brent‬‬
‫در سال ‪ 1970‬برنت سه قاعده مطرح کرد که این قوانین مربوط‬
‫به درون جمله است وهدف این قواعد کاهش عمق درخت محا‬
‫سبه است‪.‬‬
‫این سه قانون عبارتند از‪:‬‬
‫‪ .1‬اشتراک پذیری‬
‫‪ .2‬جابجایی‬
‫‪ .3‬توزیع پذیری‬
‫‪40 of 57‬‬
‫…قوانین ‪:Brent‬‬
‫‪.1‬قانون اشتراک پذیری (‪: )Associativity‬‬
‫‪ .2‬قانون جابجایی (‪:) Commutativity‬‬
‫‪.3‬قانون توزیع پذیری(‪:) Distributivity‬‬
‫‪41 of 57‬‬
‫‪:RECURSIVE DOUBLING‬‬
‫کامپایلرها برای اینکه بتواند با حداقل تعداد عملیات کار را انجام دهند و‬
‫وابستگی بین جمالت حداقل شود اینکار را انجام میدهد‪.‬‬
‫مثال‪:‬‬
‫درختی با عمق ‪n-1‬‬
‫درختی کامال متقارن باعمق ‪log n‬‬
‫‪42 of 57‬‬
:)PCMA(‫چهار چوب طراحی یك الگوریتم موازي‬
Partitioning .1
Communication .2
Agglomeration .3
Mapping .4
43 of 57
‫‪ P‬یا (‪: )Partitioning‬‬
‫در این مرحله مساله را به تعدادی زیر مساله یا ‪ task‬خرد می‬
‫کنیم و هیچ توجهی به تعداد پردازنده ها و توپولوژی نداریم‪.‬‬
‫‪44 of 57‬‬
‫‪ C‬یا (‪: )Communication‬‬
‫وظیفه این مرحله استخراج انواع ارتباط میان ‪ task‬ها است‬
‫که از طریق داده یا پردازنده فراهم میشود‪.‬‬
‫رابطه های مختلف برای اینکار داریم ‪:‬‬
‫‪45 of 57‬‬
‫…‪:) local/ global -1( C‬‬
‫مثال‪:‬‬
‫اگر برای محاسبه ي خانه ای از آرایه فقط از خانه های اطراف‬
‫آن استفاده کنیم ‪ local‬واگر از تمام آرایه استفاده کنیم ‪global‬‬
‫است ‪.‬‬
‫‪n‬‬
‫)‪( global‬‬
‫‪a‬‬
‫‪i, j‬‬
‫‪j 0‬‬
‫‪ai , j  i 0‬‬
‫‪n‬‬
‫‪46 of 57‬‬
‫…‪:) structural /non structural -2( C‬‬
‫اگر بر اساس یک روش قانونمند ‪ task‬ها به پردازنده ها‬
‫‪ Assign‬شوند ‪ stractural‬است و اگر فاقد قانون و‬
‫قواعد باشد به ان ارتباط ‪ non structural‬می گویند ‪.‬‬
‫بر اساس قاعده ای که از ذات مساله بدست می آید می فهمیم که‬
‫‪ task‬ها با قاعده یا بی قاعده به پردازنده ‪ assign‬شوند ‪.‬‬
‫یکسری ‪ task‬که وارد پردازنده ای می شوند با هم مرتبط اند و‬
‫عامل ارتباط آنها پردازنده است‪.‬‬
‫‪47 of 57‬‬
‫…‪:) static / dynamic -3( C‬‬
‫در حالت ‪ static‬به صورت ثابت به یک پردازنده ‪ assign‬م‬
‫یشود و تا اخر روی ان پردازنده باقی می ماند‪.‬‬
‫در حالت ‪ dynamic‬یک ‪ task‬میتواند با تعدادی ‪ task‬در ا‬
‫رتباط باشد‪.‬‬
‫یک شکل توسعه یافته حالت ‪ dynamic‬تغیر توپولوژی است‬
‫که یک ‪ task‬دائما ً بین پردازنده ها تغییر می کند‪.‬‬
‫‪48 of 57‬‬
‫‪ A‬یا (‪: )Agglomoration‬‬
‫بعد از اینکه وابستگی ها را ایجاد کردیم این مرحله به ما می گوید‬
‫که چه ‪ task‬های باید در کنارهم قرار بگیرد‪.‬‬
‫هدف ‪ A‬عبارتست از‪:‬‬
‫‪ : locality-1‬یعنی داشتن حداقل ارتباطات( ‪ task‬هایی که با هم‬
‫کارمیکنند را روی یک پردازنده بگذاریم)‪.‬‬
‫‪ : load balance-2‬طوری نباشد که ‪ n-1‬تا ‪ task‬در یک‬
‫طرف و یك ‪ task‬در طرف دیگر باشد‪.‬‬
‫• ‪ A‬یک مطالعه ‪ trade off‬بین آنها ایجاد می کند‪.‬‬
‫• در این مرحله از توپولوژی اثری نیست‪.‬‬
‫‪49 of 57‬‬
‫‪ M‬یا (‪: )Mapping‬‬
‫کار این مرحله مشخص نمودن چگونگی انتساب به توپولوژی‬
‫یا چگونگی انتخاب مجموعه ‪ task‬ها به پردازنده های یک‬
‫توپولوژی میباشد‪.‬‬
‫‪50 of 57‬‬
‫پارامتر هاي یك الگوریتم موازي‪:‬‬
‫در یك الگوریتم موازي باید ‪ 4‬پارامتر اصلي زیر ‪meet‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪Concorrency‬‬
‫‪Scalability‬‬
‫‪Modularity‬‬
‫‪Locality‬‬
‫‪51 of 57‬‬
‫شود ‪:‬‬
‫‪: Concorrency -1‬‬
‫• باید حداکثر همروندی را داشته باشیم ‪.‬‬
‫• یک حالت مطلوب ‪ concorrency‬همان ‪parallelim‬‬
‫میباشد‪.‬‬
‫‪52 of 57‬‬
‫‪: Scalability -2‬‬
‫• الگوریتم به تعداد پردازنده ها مربوط نباشد یا الگوریتم‬
‫محدود به پردازنده ها نباشد ‪.‬‬
‫• بعبارت دیگر الگوریتم بتواند خود را با تعداد پردازنده‬
‫ها تطبیق دهد‪.‬‬
‫‪53 of 57‬‬
‫‪: Modularity -3‬‬
‫• گروه ‪ task‬هایی که میخواهند بصورت‪concorence‬‬
‫اجرا شوند(انجام شوند) حداقل وابستگی را داشته باشند‪.‬‬
‫• به عبارت دیگر حداقل وابستگی بین ‪ task‬هایی که با ه‬
‫م به صورت همروندی اجرا میشوند وجود داشته باشد‪.‬‬
‫‪54 of 57‬‬
‫‪: Locality -4‬‬
‫• هر پردازنده از داده ‪ local‬خودش استفاده کند‪.‬‬
‫• چون افزایش تعداد دسترسیها به حافظه مشترک ممکن‬
‫است باعث کاهش کارایی شود( مثالً ‪.) EREW‬‬
‫‪55 of 57‬‬
56 of 57
‫پایان‬
‫‪57 of 57‬‬