**مدل برنامه‌نویسی موازی** (به انگلیسی: Parallel programming model) مفهومی است که عبارت‌های برنامه‌های موازی را قادر می‌سازد ترجمه و اجرا شوند. ارزش یک مدل برنامه‌نویسی معمولاً بر اساس فراگیری آن (اینکه چند مسئلۀ متفاوت می‌توانند توسط آن بیان شوند و با چند معماری مختلف می‌توان آن‌ها را اجرا کرد) تعیین می‌شود. ایجاد یک مدل برنامه‌نویسی می‌تواند چندین حالت بگیرد مانند الهام گرفتن کتابخانه‌ها از زبان‌های متوالی قدیمی، ضمیمه‌های زبان یا مدل‌های اجرایی کاملاً جدید.

اجماع بر روی یک مدل برنامه‌نویسی مهم است چرا که نرم‌افزار را قادر می‌سازد تا در آن بیان شده و در معماری‌های متفاوت ترابرپذیر باشند. از معماری فون نویمان با معماری‌های متوالی‌اش در این مدل کمک گرفته شده‌است تا *پلی* کارآمد را بین نرم‌افزار و سخت‌افزار فراهم کند؛ بدین معنی که زبان‌های برنامه‌نویسی سطح بالا می‌توانند در آن به صورت کارآمد ترجمه شده و توسط سخت‌افزار اجرا گردند.

طبقه‌بندی و الگوهای اصلی
------------------------

طبقه‌بندی‌های مدل‌های برنامه‌نویسی موازی را می‌توان به دو محدودۀ کلی تقسیم کرد: تعامل فرایند و تجزیۀ مسئله.

### تعامل فرایند

تعامل فرایند مربوط به مکانیزمی می‌یاشد که فرایندهای موازی در آن می‌توانند با یکدیگر در ارتباط باشند. معمول‌ترین حالت‌های تعامل، حافظۀ مشترک و گذر پیام هستند، اما موازی‌سازی مطلق نیز وجود دارد.

#### حافظۀ مشترک

مقالهٔ اصلی: حافظه مشترک
در مدل حافظۀ مشترک، وظایف موازی یک فضای آدرس جهانی را به اشتراک می‌گذارند و به صورت غیرهمزمان آن را خوانده و می‌نویسند. این مدل به مکانیزم‌های محافظتی چون قفل‌ها، نشان‌برها و مبصرانی احتیاج دارد تا دسترسی همزمان را کنترل کند. حافظۀ مشترک می‌تواند در سیستم‌های با حافظۀ توزیع‌شده و حافظه دسترسی غیریکپارچه (نوما) شبیه‌سازی گردند.

مقالهٔ اصلی: انتقال پیام
در مدل انتقال پیام، وظایف موازی داده‌ها را به کمک گذر پیام با یکدیگر عوض می‌کنند. این ارتباطات می‌توانند همزمان یا غیرهمزمان باشند. رسمی‌سازی انتقال پیام فرایند ارتباطات متوالی (سی‌اس‌پی) کانال‌های ارتباطی را به خدمت گرفته‌است تا فرایندها را به یکدیگر "مرتبط" سازد؛ و با این کار باعث ایجاد شدن چندین زبان مهم همچون جویس، اوکام و ارلنگ شد.

#### موازی‌سازی تلویحی

مقالهٔ اصلی: موازی‌سازی تلویحی
در مدل موازی‌سازی مطلق، هیچ یک از فعل و انفعالات فرایند برای برنامه‌نویس قابل مشاهده نیست و به جای آن مترجم یا ران‌تایم برای اجرای آن مسئول است. این مدل بین زبان‌های با دامنۀ اختصاصی متداول‌تر می‌باشد.

### تجزیۀ مسئله

هر برنامۀ موازی از فرایندهای در حال اجرا به صورت همزمان تشکیل شده‌است، تجزیۀ مسئله به راهی مربوط است که در آن این فرایندها فرموله شده‌اند. این طبقه‌بندی ممکن است به اسکلت‌های الگوریتمی یا موازی‌سازی‌های برنامه‌نویسی موازی اشاره کند.

#### موازی‌سازی وظیفه

مقالهٔ اصلی: موازی‌سازی وظیفه
یک مدل موازی‌سازی وظیفه بر روی فرایند یا ریسه‌های اجرا تمرکز دارد. این فرایندها معمولاً از لحاظ رفتاری مجزا خواهند بود، که بر نیاز به ارتباطات تأکید می‌کند. موازی‌سازی وظیفه یک راه طبیعی برای توصیف ارتباطات گذر پیام می‌باشد. این مدل معمولاً به ام‌آی‌ام‌دی/ام‌پی‌ام‌دی و ام‌آی‌اس‌دی تقسیم می‌شود.

#### موازی‌سازی داده

مقالهٔ اصلی: موازی‌سازی داده
یک مدل موازی‌سازی داده بر روی عملیات‌های روی داده که معمولاً به صورت ساختاری آرایه هستند، تمرکز دارد. مجموعه‌ای از وظایف بر روی این داده‌ها عملیات‌هایی را انجام می‌دهند اما به صورت مستقل و در بخشی جدا. در یک سیستم با حافظۀ مشترک، داده برای همگی قابل دسترس خواهد بود، اما در سیستم حافظۀ حافظۀ توزیع شده بین حافظه‌ها تقسیم شده و به‌طور محلی بر رویشان کار خواهد شد. مدل موازی‌سازی داده معمولاً به اس‌آی‌ام‌دی/اس‌پی‌ام‌دی تقسیم می‌شود.

منابع
-----

1. ↑  Leslie G. Valiant, A bridging model for parallel computation, Commun. ACM, volume 33, issue 8, August, 1990, pages 103--111

* مشارکت‌کنندگان ویکی‌پدیا. «Parallel programming model». در *دانشنامهٔ ویکی‌پدیای انگلیسی*.

| * ن
* ب
* و
رایانش موازی |
| --- |
| عمومی | 
* رایانش ابری
* ابررایانه
* خوشه کامپیوتری
* رایانش توزیع‌شده
* رایانش مشبک

 |  |
| سطوح | 
* بیت
* دستوری
* داده
* وظیفه

 |
| ریسه‌ها | 
* Superthreading
* فراریسمانی

 |
| نظریه | 
* قانون امدال
* قانون گوستافسون
* کارایی هزینه
* استاندارد کرپ-فلت
* کاهش‌سرعت
* افزایش‌سرعت

 |
| عناصر | 
* فرآیند
* ریسه
* فیبر
* PRAM
* Instruction window

 |
| هماهنگی | 
* چندپردازشی
* چندریسمانی
* Memory coherency
* انسجام حافظه نهان
* Cache invalidation
* Barrier
* همزمانی
* حالت‌برداری برنامه‌ای

 |
| برنامه‌نویسی | 
* مدل‌ها
	+ موازی‌سازی تلویحی
	+ موازی‌سازی آشکار
	+ هم‌روندی
* طبقه‌بندی فلین
	+ اس‌آی‌اس‌دی
	+ اس‌آی‌ام‌دی
	+ ام‌آی‌اس‌دی
	+ ام‌آی‌ام‌دی
		- اس‌پی‌ام‌دی
* الگوریتم‌های چندریسمانی
* الگوریتم‌های غیرمسدودکننده

 |
| سخت‌افزار | 
* چندپردازشگر
	+ متقارن
	+ نامتقارن
* حافظه
	+ نوما
	+ کوما
	+ توزیع‌شده
	+ مشترک
	+ مشترک توزیع‌شده
* چندریسمانی همزمان
* ام‌پی‌پی
* سوپراسکالر
* پردازنده برداری
* ابررایانه
* *بیوولف*

 |
| رابط‌های برنامه‌نویسی | 
* Ateji PX
* ریسه‌های پازیکس
* OpenMP
* OpenHMPP
* OpenACC
* PVM
* MPI
* UPC
* Intel Threading Building Blocks
* بوست (کتابخانه‌های سی++)
* Global Arrays
* Charm++
* Cilk
* Co-array Fortran
* اپن‌سی‌ال
* کودا
* Dryad

 |
| مشکلات | 
* Embarrassingly parallel
* Software lockout
* مقیاس‌پذیری
* وضعیت رقابتی
* بن‌بست (علوم رایانه)
* بن‌بست
* الگوریتم قطعی
* Parallel slowdown

 |
| 
* **رده**
* **داده**

 |