محاسبات موازی - بخش سوم

مفاهیم و اصطلاحات محاسبات و برنامه نویسی موازی

معماری ون نیومن
   برای بیش از 40 سال ، تمام کامپیوتر ها از یک مدل به نام کامپیوتر ون نیومن پیروی کرده اند. که پس از ریاضیدان مجارستانی به نام جان ون نیومن، نامگذاری شده است.
   یک کامپیوتر ون نیومن از مفهوم برنامه ذخیره شده استفاده می کند. CPU یک برنامه ذخیره شده را اجرا می کند که یک سری عملیات خواندن و نوشتن روی حافظه را مشخص می کند.


   طراحی پایه :
      حافظه برای ذخیره سازی هم برنامه و هم دستور العمل ها استفاده می شود.
      دستور العمل های برنامه ، داده های کد شده ای هستند که به کامپیوتر می گوید چه کاری انجام دهد.
      داده بسادگی اطلاعاتی است که توسط برنامه استفاده می شود.
      یک واحد مرکزی پردازش ( CPU ) دستور العمل ها و داده ها را از حافظه می گیرد ، دستور العمل ها را رمز گشایی ( decode ) می کند و سپس آنها را پی در پی اجرا می کند.

طبقه بندی کلاسیک Flynn
   راه های مختلفی برای دسته بندی کامپیوتر های موازی وجود دارد. یکی از پر استفاده ترین این طبقه بندی ها که از سال 1966 تاکنون استفاده می شود طبقه بندی Flynn نام دارد. (Flynn's Taxonomy )
   طبقه بندی Flynn ، معماری کامپیوتر های چند پردازنده ای را بر اساس اینکه تا چه حدی می توانند به دو بعد مجزای دستور العمل ها  ( Instruction ) و داده ها ( Data ) دسته بندی شوند ، متمایز می کند. هر یک از این دو بعد ، تنها می توانند یکی از این دو وضعیت ممکن را داشته باشند : یگانه و تک ( Single ) یا چندگانه ( Multiple ).

   در زیر 4 طبقه بندی ممکن را بر اساس Flynn می بینید.

S I S D  :   Single Instruction, Single Data
S I M D :   Single Instruction, Multiple Data
M I S D :   Multiple Instruction, Single Data
M I M D :  Multiple Instruction, Multiple Data


تک دستور العمل ، تک داده ( SISD ) :

   یک کامپیوتر سریالی ( غیر موازی )
   تک دستور العمل : تنها یک مسیر دستور العمل ، توسط CPU در طی یک سیکل کلاک اجرا می شود.
   تک داده : تنها یک مسیر داده به عنوان ورودی در طی یک سیکل کلاک استفاده می شود.
   اجرای قطعی
   این قدیمی ترین و رایج ترین فرم یک کامپیوتر تاکنون است.
   مثال : اغلب PC ها ، پایانه های کامپیوتری و مین فریم های تک CPU


تک دستور العمل ، چندین داده ( SIMD ) :

   مدلی از یک کامپیوتر موازی
   تک دستور العمل : تمام واحد های پردازشی ، یک دستور العمل را در طی هر سیکل کلاک داده شده  ؛ اجرا می کنند.
   چندین داده : هر واحد پردازشی ، می تواند بر روی یک عنصر داده ای متفاوت عمل کند.
   این مدل از ماشین یک دستور العمل توزیع کننده ، شبکه داخلی با پهنای باند بسیار بالا و یک آرایه بسیار بزرگ از واحد های دستور العمل با ظرفیت کم ، را داراست.
   این مورد برای مسائل خاص که با سطح بالایی از نظم مشخص می شوند همچون پردازش تصویر عالی می باشد.
   اجرای قطعی و همزمان
   در دو نوع مختلف : آرایه های پردازنده ( Processor Arrays ) و کانال های برداری  ( Vector Pipelines  )
   مثال :

  Processor Arrays: Connection Machine CM-2, Maspar MP-1, MP-2
Vector Pipelines: IBM 9000, Cray C90, Fujitsu VP, NEC SX-2, Hitachi S820



چندین دستور العمل ، تک داده ( SIMD ) :

   یک تک مسیر داده ، چند واحد پردازشی را تغذیه می کند.
   هر واحد پردازشی بر روی داده ها ، مستقل و از طریق مسیر های دستور العمل مستقل عمل می کند.
   تعداد کمی از نمونه های واقعی این کلاس از کامپیوتر های موازی هنوز وجود دارد. یکی از آن ها کامپیوتر آزمایشی Carnegie-Mellon C.mmp  محصول 1971 می باشد.
   برخی کاربرد های ممکن :
      فیلتر های چند فرکانسی که بر روی تک مسیر سیگنال عمل می کنند.
      چندین الگوریتم رمز نویسی که برای شکستن رمز تک پیام کد شده استفاده می شوند.


چندین دستور العمل ، چندین داده ( MIMD ) :

   در حال حاضر متداول ترین نوع کامپیوتر های موازی هستند. اکثر کامپیوتر های مدرن در این دسته قرار می گیرند.
   چندین دستور العمل : هر پردازنده ممکن است مسیر دستور العمل متفاوتی را اجرا کند.
   چندین داده : هر پردازنده ممکن است با مسیر داده ای متفاوتی کار کند.
   اجرا می تواند همزمان و یا غیر همزمان باشد ، قطعی یا غیر قطعی.
   مثال : اکثر ابر کامپیوتر های امروزی ، کامپیوتر های موازی شبکه ای " Grids " و کامپیوتر های SMP چند پردازنده ای - شامل برخی از انواع PC ها.


برخی اصطلاحات رایج محاسبات موازی
همچون هر چیز دیگر ، محاسبات موازی زبان فنی مخصوص به خود را دارد. برخی از اصطلاحات پر کاربرد مرتبط با محاسبات موازی را در زیر می بینید.

Task
   یک بخش گسسته منطقی از عمل محساباتی. یک Task نوعا یک برنامه یا سری دستور العمل های شبیه برنامه است که توسط یک CPU اجرا می شود.

Parallel Task
   یک Task که می تواند توسط چندین پردازنده به صورت امن اجرا شود ( منجر به تولید نتایج صحیح ).

Serial Execution
   اجرای یک برنامه به صورت ترتیبی و سریالی ، یک دستور در آن واحد. چیزی که بر روی یک ماشین تک پردازنده روی می دهد. هر چند ، واقعا تمام Parallel Task ها بخش هایی از یک برنامه موازی خواهند داشت که باید سریالی اجرا شود.

Paralle Execution
   اجرای یک برنامه با بیش از یک Task ، که هر Task می تواند دستور یکسان یا متفاوتی را همزمان انجام دهد.

Shared Memory
   از یک دیدگاه شدیدا سخت افزاری ، یک معماری کامپیوتر را توصیف می کند که تمام پردازنده ها دسترسی مستقیم ( معمولا تحت باس یا گذرگاه ) به حافظه فیزیکی دارند. در مفهوم برنامه نویسی ، مدلی را توصیف می کند که تمام Parallel Task تصویری ( Picture ) یکسان از حافظه دارند و می توانند مستقیما مکان های روی حافظه را آدرس دهی کنند و به آن ها  بدون توجه به اینکه حافظه فیزیکی واقعا کجا قرار دارد ، دسترسی داشته باشند.

Distributed Memory
   در سخت افزار ، به دسترسی به حافظه تحت شبکه برای حافظه فیزیکی اشاره دارد که رایج نیست. به عنوان یک مدل برنامه نویسی ، Task ها می توانند به صورت منطقی حافظه ماشین محلی را ببینند ( See ) و باید از ارتباطاتی برای دسترسی به حافظه بر روی دیگر ماشین ها که دیگر Task ها اجرا می شوند ، استفاده کنند.

Communications
   Parallel Task ها نوعا نیاز به تبادل داده ها دارند. راه های زیادی وجود دارد که این عمل روی دهد همچون یک گذرگاه Shared Memory و یا بر روی یک شبکه ، به هر حال عمل واقعی تبادل داده بدون توجه به روش مورد استفاده ، عموما به Comminucations اشاره دارد .

Synchronization
   هماهنگی بلادرنگ Parallel Task ها ، اغلب با Communications مرتبط است و معمولا با ایجاد یک نقطه Synchronization ( همزمانی ) درون برنامه تکمیل میشود. این نقطه جایی است که ممکن است یک Task بیش از این جلو نرود تا زمانی که یک Task یا Task های دیگر  به نقطه یکسان یا از نظر منطقی برابر با آن Task نرسند.

Granularity
   در محاسبات موازی ، Granularity یک میزان کیفی از نسبت محسابات به ارتباطات است ( The Ratio of Computation to Communication ).
      Coarse : نسبتا مقادیر زیاد کار محاسباتی که بین رویداد های ارتباطی انجام شده است.
      Fine : نسبتا مقادیر کم کار محاسباتی که بین رویداد های ارتباطی انجام شده است.

Observed Speedup
   Observed Speedup ( افزایش سرعت مشاهده شده ) برای یک کد که موازی شده است ، به صورت زیر تعریف می شود :
حاصل تقسیم   wall-clock time of serial execution   بر   wall-clock time of parallel execution .
یعنی اگر زمان اجرای سریالی برنامه را بر زمان اجرای موازی آن تقسیم کنیم ؛ حاصل نشان دهنده " افزایش سرعت مشاهده شده " می باشد. روش فوق یکی از پر کاربرد ترین شاخص های کارایی برنامه موازی می باشد.

Parallel Overhead
   مقدار زمان مورد نیاز برای هماهنگ سازی Parallel Task  ها ، در مقابل انجام کار مفید. Parallel Overhead می تواند فاکتور های زیر را دارا باشد :
      زمان راه اندازی Task
      همزمان سازی - Synchronizations
      ارتباطات داده ها
      پردازش نرم افزار اعمال شده توسط کامپیالر های موازی ، کتابخانه ها ، ابزار ها ، سیستم عامل و ...

Massively Parallel
   به سخت افزاری اشاره دارد که شامل سیستم موازی داده شده است - پردازندها های زیادی دارد. معنی زیاد در اینجا فزاینده و افزایشی است ، که اکنون BG/L ( ابر کامپیوتر بلوجین که قویترین ابر کامپیوتر حال حاضر دنیاست ) این تعداد را تا 6 رقم به جلو برده است.

Scalability
   به توانایی سیستم ( سخت افزار و / یا نرم افزار )  های موازی برای نمایش یک افزایش متناسب در تسریع موازی ( Parallel Speedup ) با افزایش پردازنده های بیشتر اشاره دارد. فاکتور هایی در Scalability  ( مقیاس پذیری ) نقش دارند :
      سخت افزار - به خصوص پهنای باند حافظه و CPU و ارتباطات شبکه
      الگوریتم برنامه
      Parallel Overhead مرتبط
      ویژگی های خاص برنامه نویسی و برنامه شما

در مقاله بعدی به انواع مدل های حافظه می پردازیم.