موضوع مقاله: رایانش موازی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # رایانش موازی | مقدمه: چندین فرم مختلف رایانش موازی از جمله سطح بیت، سطح دستورالعمل، داده‌ها و موازی‌کاری وجود دارند. | ## بخش 1: رایانش موازی | موازی‌سازی مدت‌ها است که در رایانش دارای عملکرد بالا (ابر رایانه) مورد استفاده قرار می‌گیرد. آنها اغلب با هم مورد استفاده قرار می‌گیرند و اگرچه این دو متمایز هستند اغلب با هم ادغام می‌شوند. در مقابل، در رایانش همروند، فرایندهای مختلف غالباً وظایف مرتبط را رفع و رجوع نمی‌کنند؛ اگر هم این کار را بکنند، همان‌طور که در رایانش توزیع شده معمول است، وظایف جداگانه ممکن است ماهیت متنوعی داشته باشند و اغلب هنگام اجرا به برخی از ارتباطات بین فرآیندی نیاز دارند. برای تسریع در انجام کارهای خاص، گاهی اوقات از معماری‌های رایانه‌ای موازی خاص در کنار پردازنده‌های سنتی استفاده می‌شود. در بعضی موارد، موازی‌سازی برای برنامه‌نویس شفاف است، مانند موازی‌سازی در سطح بیت یا در سطح دستورالعمل، اما نوشتن الگوریتم‌های صریحاً موازی، به ویژه آنهایی که از همروندی استفاده می‌کنند، دشوارتر از موارد متوالی است، زیرا همروندی باعث بوجود آمدن چندین کلاس جدید از اشکالات نرم‌افزاری بالقوه می‌شود، که شرایط مسابقه‌ای شایع‌ترین آن‌ها است. ارتباط و همگام سازی بین زیر-وظایف مختلف معمولاً از بزرگ‌ترین موانع دستیابی به عملکرد بهینه در برنامهٔ موازی است. در قانون آمدال، یک حداکثر مجاز نظری برای افزایش سرعت یک برنامه واحد در نتیجه موازی‌سازی وجود دارد. برای حل یک مسئله، الگوریتمی به شکل یک جریان متوالی از دستورالعمل‌ها ساخته و اجرا می‌شود. فقط یک دستورالعمل می‌تواند در هر زمان اجرا شود - پس از پایان آن دستورالعمل، دستور بعدی اجرا می‌شود. از طرف دیگر، رایانش موازی از چندین عنصر پردازش گر به‌طور همزمان برای حل یک مسئله استفاده می‌کند. این امر با تقسیم مسئله به قسمت‌های مستقل حاصل می‌شود تا هر عنصر پردازش گر بتواند سهمی از الگوریتم را همزمان با بقیه اجرا کند. از نظر تاریخی رایانش موازی برای محاسبات علمی و شبیه‌سازی مسئله‌های علمی، به ویژه در علوم طبیعی و مهندسی، مانند هواشناسی استفاده می‌شد. این امر منجر به طراحی سخت‌افزار و نرم‌افزار موازی و همچنین رایانش با کارایی بالا شد. زمان اجرای یک برنامه برابر است با تعداد دستورالعمل‌ها ضربدر متوسط زمان برای هر دستورالعمل. با ثابت نگه داشتن همه عوامل دیگر، افزایش بسامد ساعت باعث کاهش میانگین زمان اجرای دستورالعمل می‌شود؛ بنابراین افزایش بسامد باعث کاهش زمان اجرا برای همه برنامه‌های غالبا-محاسباتی (compute-bound) می‌شود. با این حال، مصرف برق (P) یک تراشه با معادلهٔ زیر محاسبه می‌شود: P = C × V 2 × F که در آن، C ظرفیتی است که در هر چرخهٔ ساعت سوئیچ می‌شود (متناسب با تعداد ترانزیستورهایی که ورودی‌های آنها تغییر می‌کند)، V ولتاژ و F بسامد پردازنده (تعداد چرخه در ثانیه) است. افزایش مصرف انرژی پردازنده در نهایت منجر به لغو پردازنده‌های Tejas و Jayhawk اینتل در ۸ مه ۲۰۰۴ شد، که به‌طور کلی به عنوان پایان افزایش بسامد به عنوان الگوی غالب معماری رایانه ذکر می‌شود. برای مقابله با مشکل مصرف برق و گرم شدن بیش از حد واحد پردازش مرکزی اصلی (CPU یا پردازنده)، تولیدکنندگان شروع به تولید پردازنده‌های چندهسته‌ای کارامد از نظر مصرف انرژی کردند. هسته واحد محاسباتی پردازنده است و در پردازنده‌های چندهسته‌ای هر هسته مستقل است و هسته‌ها می‌توانند به‌طور همزمان به یک حافظه دسترسی داشته باشد. پردازنده‌های چندهسته‌ای رایانش موازی را به رایانه‌های خانگی آورده‌اند؛ بنابراین موازی‌سازی برنامه‌های سریالی تبدیل به کار اصلی برنامه‌نویسی شده‌است. در سال ۲۰۱۲ پردازنده‌های چهار هسته‌ای در رایانه‌های خانگی معمول شدند، در حالی که سرورها دارای ۱۰ یا ۱۲ هستهٔ پردازنده بودند. از قانون مور می‌توان پیش‌بینی کرد که تعداد هسته‌ها در هر پردازنده هر ۱۸–۲۴ ماه دو برابر شود. این می‌تواند به این معنی باشد که پس از سال ۲۰۲۰ یک پردازنده معمولی ده‌ها یا صدها هسته دارد. یک سیستم عامل باید اطمینان حاصل کند که وظایف مختلف و برنامه‌های کاربر به‌طور موازی بر روی هسته‌های موجود اجرا می‌شوند. با این وجود، برای اینکه یک برنامه نرم‌افزاری سریالی از معماری چندهسته‌ای کاملاً بهره ببرد، برنامه‌نویس باید ساختار کد آن را تغییر دهد و این را موازی‌سازی کند. سرعت بخشیدن به زمان اجرای نرم‌افزار اپلیکیشن دیگر از طریق افزایش بسامد امکان‌پذیر نیست، و در عوض برنامه نویسان برای استفاده از قدرت محاسباتی فزاینده معماری‌های چندهسته‌ای، باید کد نرم‌افزار خود را موازی‌سازی کنند. افزایش سرعت برنامه ناشی از موازی‌سازی به میزان قابلیت موازی‌سازی شدن برنامه بستگی دارد. برای نمونه، اگر ۹۰٪ از برنامه را بتوان موازی‌سازی کرد، حداکثر افزایش سرعت نظری با استفاده از رایانش موازی، هرچقدر هم که تعداد پردازنده‌ها افزایش یابند، ۱۰ برابر خواهد بود. در حالت مطلوب، افزایش سرعت از طریق موازی‌سازی خطی خواهد بود - دو برابر شدن تعداد عناصر پردازش گر باید زمان اجرا را به نصف کاهش دهد و اگر تعداد عناصر پردازشگر برای بار دوم دو برابر شود، باز هم باید زمان اجرا نصف شود. با این حال، تعداد بسیار کمی از الگوریتم‌های موازی افزایش سرعت بهینه را به دست می‌آورند. بیشتر آنها برای تعداد کمی از عناصر پردازش گر افزایش سرعت تقریباً خطی دارند که برای تعداد زیاد به یک مقدار ثابت می‌رسد و صاف می‌شود. با تلاش خیلی زیاد، ممکن است بتوانید این قسمت را ۵ برابر سریعتر کنید، اما این کار فقط باعث می‌شود تا زمان کل محاسبه اندکی کم شود. این کار باعث افزایش سرعت بیشتری در کل کار در مقایسه با بهینه‌سازی قسمت B می‌شود، با اینکه افزایش سرعت قسمت B بیشتر از A بوده‌است (۵ برابر در برابر ۲ برابر). افزایش سرعت بالقوه یک الگوریتم در یک سیستم رایانش موازی توسط قانون آمدال بدست می‌آید: که در آن: Slatency، افزایش سرعت بالقوه در تأخیر اجرای کل کار است؛ s افزایش سرعت در تأخیر اجرای قسمت قابل موازی‌سازی کار است. p درصدی از زمان کل اجرای برنامه است که متعلق به بخشی از برنامه است که قابل موازی‌سازی است. از آنجا که ، این نشان می‌دهد که قسمت کوچکی از برنامه که نمی‌تواند موازی‌سازی شود، افزایش سرعت(speedup) کلی حاصل از موازی‌سازی را محدود می‌کند. برنامه‌ای که یک مسئله بزرگ ریاضی یا مهندسی را حل می‌کند، معمولاً از چندین قسمت قابل موازی‌سازی و چند قسمت غیرقابل موازی (متوالی) تشکیل می‌شود. اگر قسمت غیرقابل موازی‌سازی یک برنامه ۱۰٪ از کل زمان اجرا را تشکیل دهد (۰٫۹ = p)، هر قدر تعداد پردازنده‌ها را افزایش دهیم، نمی‌توانیم بیش از ۱۰ برابر افزایش سرعت داشته باشیم. این امر موجب یک محدودیت حداکثری در رابطه با سودمندی افزودن واحدهای اجرایی موازی بیشتر می‌شود. «وقتی یک کار به دلیل محدودیت‌های ناشی از توالی قابل تقسیم نیست، اعمال تلاش بیشتر هیچ تأثیری در زمان‌بندی آن ندارد. در این حالت، قانون گوستافسون ارزیابی کمتر بدبینانه و بیشتر واقع بینانه از کارایی موازی‌سازی ارائه می‌دهد: هر دو قانون آمدال و گوستافسون فرض می‌کنند که زمان اجرای قسمت متوالی برنامه مستقل از تعداد پردازنده‌ها است. | ## بخش 2: رایانش موازی | قانون آمدال فرض می‌کند که کل مسئله دارای اندازه ثابت است به طوری که کل کار انجام شده به‌طور موازی نیز مستقل از تعداد پردازنده‌ها است، در حالی که قانون گوستافسون فرض می‌کند که کل کار انجام شده به صورت موازی ارتباط خطی با تعداد پردازنده‌ها دارد. هیچ برنامه‌ای نمی‌تواند سریعتر از طولانی‌ترین زنجیره محاسبات وابسته (معروف به مسیر بحرانی) اجرا شود، زیرا محاسباتی که به محاسبات قبلی در زنجیره بستگی دارند باید به ترتیب اجرا شوند. با این حال، بیشتر الگوریتم‌ها صرفاً از یک زنجیره طولانی محاسبات وابسته تشکیل نشده‌اند. شرایط برنشتاین زمانی را توصیف می‌کند که این دو مستقل باشند و بتوانند به‌طور موازی اجرا شوند. دو قسمت Pi و Pj در صورت برآورده کردن شرایط زیر مستقل هستند: نقض شرط اول وابستگی جریان را ایجاد می‌کند، به این معنی که نخستین بخش نتیجه‌ای تولید می‌کند که توسط بخش دوم استفاده می‌شود. شرط دوم نشان دهندهٔ ضد وابستگی است، بدین معنی که قطعه دوم متغیر مورد نیاز بخش اول را تولید می‌کند. شرط سوم و نهایی وابستگی خروجی را نشان می‌دهد: وقتی دو بخش در یک مکان بنویسند، نتیجهٔ نهایی مربوط به آخرین قسمت اجرا شده از نظر منطقی است. برای این کار، برخی از ابزارهای اعمال نظم بین دسترسی‌ها لازم است؛ مانند سمافورها، موانع یا سایر روش‌های همگام سازی. شرایط مسابقه، انحصار متقابل، همگام سازی و کند شدن موازی وظایف فرعی(subtask) در یک برنامه موازی را اغلب رشته می‌نامند. برخی از معماری‌های موازی رایانه‌ای از نوعی رشته‌های کوچکتر و سبک که به عنوان فیبر معروف هستند استفاده می‌کنند، در حالی که برخی دیگر از رشته‌های بزرگتر به نام پردازش استفاده می‌کنند. با این حال، «رشته‌ها» به‌طور کلی به عنوان یک اصطلاح عمومی برای وظایف فرعی استفاده می‌شود. رشته‌ها اغلب به دسترسی همزمان به یک شی یا منبع دیگر احتیاج دارند؛ برای نمونه وقتی که آنها باید متغیری را که بین آنها به اشتراک گذاشته شده‌است به روز کنند. بدون همگام سازی، دستورالعمل‌های بین دو رشته به هر ترتیب ممکن است در لابلای هم قرار گیرند. قفل یک ساختار زبان برنامه‌نویسی است که به یک رشته اجازه می‌دهد تا کنترل یک متغیر را بدست گرفته و تا زمانی که قفل آن متغیر باز شود از خواندن یا نوشتن در آن توسط سایر رشته‌ها جلوگیری کند. قفل کردن متغیرهای متعدد با استفاده از قفل‌های غیر یکجا ممکن است موجب بن‌بست در برنامه شود. اگر دو رشته بخواهند با استفاده از قفل‌های غیر یکجا دو متغیر مشترک را قفل کنند، ممکن است که یک ریسه یکی از آنها را قفل کند و ریسه دوم متغیر دیگر را قفل کند. یک کلاس از الگوریتم‌ها، که تحت عنوان الگوریتم‌های بدون قفل و بدون انتظار شناخته می‌شوند، درکنار هم، از استفاده از قفل و موانع جلوگیری می‌کنند. با این حال، اجرای این روش به‌طور کلی دشوار است و نیاز به ساختارهای داده‌ای دارد که به درستی طراحی شده باشند. این مشکل که به کند شدن موازی شناخته می‌شود، در برخی موارد با تجزیه و تحلیل و طراحی دوباره نرم‌افزار قابل بهبود است. تاریخچه دهه ۱۹۵۰ ایده استفاده از موازی‌سازی چنددستور، چندداده یا به اختصار (:en:MIMD) به سال ۱۹۵۴ بر می‌گردد، جایی که نخستین کامپیوتر تجاری محاسبات اعداد ممیز شناور توسط جن آمدال در شرکت آی بی ام با نام ۷۰۴ تولید شد. همچنین در همین سال دو تن از پژوهشگران شرکت آی بی ام به نام‌های جان کوک و دنییل اسلوتنیک، ایده استفاده از موازی‌سازی در محاسبات عددی را برای نخستین بار مطرح کردند. دهه ۱۹۶۰ در سال ۱۹۶۲ شرکت باروز، کامپیوتر دی ۸۲۵ که دارای ۴ پردازنده و توانایی دسترسی به ۱۶ ماژول حافظه از طریق سوییچ چلیپایی بود را معرفی کرد. در سال ۱۹۶۷، آمدال و اسلوتنیک در کنفرانس پردازش اطلاعات در آمریکا، قانون آمدال را معرفی کردند که محدودیت افزایش سرعت در برابر موازی‌سازی را مطرح می‌کند. در سال ۱۹۶۹ شرکت هانی ول، سیستم چندپردازنده‌ای را معرفی کرد که دارای ۸ پردازنده به صورت موازی بود. دهه ۱۹۸۰ نخستین کامپیوتر مدرن یک دستور، چند داده یا به اختصار (:en:SIMD) در سال ۱۹۸۷ با نام ماشین متفکر توسط دنی هیلز و شرلی هندلر بازسازی شد. دهه ۱۹۹۰ در دهه ۱۹۹۰ تولید کامپیوترهای یک دستور، چندداده روند رو به رشدی پیدا کردند، در سال ۱۹۹۵ شرکت سان‌میکروسیستم UltraSPARC را معرفی کرد. همچنین شرکت اینتل در سال ۱۹۹۶ نخستین کامپیوتر رو میزی دارای سیستم یک‌دستور، چندداده برای سیستم‌های ۳۲ بیتی معرفی کرد. همچنین در این دهه معماری (:en:OpenMP) در سال ۱۹۹۷ برای برنامه‌نویسی سیستم‌های موازی با زبان فرترن معرفی گردید، و در سال ۱۹۹۸ نیز نسخه C/C++ این معماری معرفی شد. سال ۲۰۰۰ تا کنون از سال ۲۰۰۰ تا کنون نسخه‌های بهبود یافته‌ای از OpenMP ارائه شده‌است. ارتباط بین پردازش‌ها پردازش‌ها در برنامه‌نویسی موازی برای انجام محاسبات خود نیاز به برقراری ارتباط با یکدیگر دارند، که روش‌های زیر برای این کار می‌باشند: حافظه اشتراکی (:en: Shared Memory) تبادل پیام (:en: Message Passing) مدل ضمنی حافظه اشتراکی در حافظه اشتراکی، وظایف موازی برای برقراری ارتباط با یکدیگر از یک فضای آدرس اشتراکی که توانایی نوشتن و خواندن غیرهمزمان را دارد استفاده می‌کنند. در این حالت برای کنترل دسترسی‌های همزمان وظایف به این آدرس‌ها نیاز به مکانیزم‌هایی مانند قفل‌ها، سمافورها و مانیتورها است. تبادل پیام در این روش، وظایف موازی داده‌های مورد نیاز را از طریق پیام برای یکدیگر ارسال می‌کنند، که این ارتباطات می‌توانند همزمان یا غیرهمزمان باشند. اصول برنامه‌نویسی موازی یافتن موازات کافی در برنامه (قانون آمدال) طبق قانون آمدال در برنامه‌نویسی موازی، باید طوری برنامه را به دو قسمت موازی و سریال تقسیم کرد، که مقدار سرباری که به سیستم به دلیل تقسیم وظایف میان نخ‌ها/پردازنده‌ها تحمیل می‌شود از مقدار سودی که به دلیل موازی کردن برنامه بدست می‌آوریم کمتر باشد. دانه‌دانه کردن هنگام تقسیم وظایف، باید به اندازه قسمتی از برنامه که قرار است به صورت موازی اجرا شود توجه داشت. به این صورت که در صورت زیاد بودن تعداد آنها و کوچک بودن این قسمت‌ها سربار بسیار زیادی به سیستم تحمیل خواهد شد، و در صورتی که اندازه این قسمت‌ها بسیار بزرگ باشد، در آن صورت این قسمت‌ها تقریباً به صورت سریال اجرا می‌شود که افزایش سرعتی در این حالت نخواهیم داشت. محلی سازی سرعت دسترسی به حافظه‌های دارای حجم بالا کم بوده، و سرعت دسترسی به حافظه‌های دارای حجم پایین زیاد است. با توجه به این امر، برنامه‌نویس باید طوری عمل کند که الگوریتم‌های موجود در برنامه باید بیشتر کار خود را روی داده‌های موجود در حافظه محلی انجام دهند. عدم تعادل بار عدم تعادل بار به حالتی گفته می‌شود که در آن بعضی از پردازنده‌ها در برخی زمان‌ها به دلایل زیر کاری را انجام نمی‌دهند: موزات ناکافی. همگام سازی بسیاری از الگوریتم‌هایی که برای اجرای موازی فرمان‌های، موازی‌سازی می‌شوند، الگوریتم‌هایی هستند که پردازش‌های موازی حاصل از آن‌ها بدون نیاز به ارتباط با دیگر پردازش‌ها، به محاسبات خود پرداخته و آن را ادامه می‌دهند. اما الگوریتم‌های دیگری نیز وجود دارند که در آن‌ها هر پردازنده محاسبات تکراری یکسانی را روی یک جزء متمایز داده‌ای انجام می‌دهد، اما پردازنده‌ها باید در انتهای هر تکرار با یکدیگر همگام شوند و نتایج میانی خود را در اختیار دیگر پردازنده‌ها قرار دهند. یک روش مورد استفاده برای همگام‌سازی استفاده از حصاربند است که در این روش پردازش‌های اولیه که دستورالعمل حصاربندی را اجرا می‌کنند تا زمانی که تمام پردازش‌های دیگر وارد این نقطه شوند، در انتظار باقی می‌مانند. | ## بخش 3: رایانش موازی | برای جلوگیری از به وجود آمدن این شرایط می‌توان از قفل‌های سخت‌افزاری یا نرم‌افزاری استفاده کرد. ابزارهای برنامه‌نویسی موازی با استفاده از ابزارها، برنامه‌نویس می‌تواند خود به طراحی روند اجرای موازی برنامه بپردازد و برای اموری مانند متغیرهای اشتراکی، وابستگی ورودی و خروجی رشته‌های موازی، ارتباط میان رشته‌های پردازشی یا پردازه‌ها و تجزیه‌پذیری بنیادی راه‌حل مسئله مورد نظر تصمیم بگیرد و شیوه توزیع شدن محاسبه، متغیرها و اشیا را طراحی کند. در Pthreads نخ‌ها از یک فضای آدرس دهی مشترک استفاده می‌کنند که کنترل و همگام‌سازی دسترسی نخ‌ها به این حافظه بر عهده برنامه‌نویس است. Pthreads برای برنامه‌های که دارای ویژگی‌های زیر هستند، می‌تواند مناسب باشد: چند وظیفه به صورت همزمان، قابلیت اجرای پردازش روی داده‌های برنامه را داشته باشند. البته تولیدکنندگان کامپایلر برای زبان‌های دیگر از جمله جاوا نیز امکان نوشتن برنامه با رابط OpenMP را فراهم کرده‌اند. باید توجه داشت، OpenMP تضمین نمی‌کند که از حافظه اشتراکی استفاده بهینه خواهد کرد. همچنین مواردی مانند وابستگی داده‌ها، شرایط مسابقه یا بن‌بست‌ها باید توسط خود برنامه‌نویس در کد برنامه کنترل شود وOpenMP عموماً نمی‌تواند کاری دربارهٔ آن‌ها انجام دهد. همزمان سازی ورودی و خروجی هنگام دسترسی موازی و چک کردن ترتیب اجرای کد برنامه نیز از جمله وظایف برنامه‌نویس است و از عهده OpenMP خارج است. به‌این ترتیب، برنامه‌نویس باید ساختار کد و الگوریتم خود را کاملاً کنترل کرده و اطمینان حاصل کند که موارد ذکر شده در اجرای برنامه رخ نخواهد داد. دلایل و مزایای استفاده از OpenMP سختی استفاده از کتابخانه‌های مربوط به نخ‌ها، رابط‌هایی مانند Pthreads دارای تعداد زیادی فراخوانی کتابخانه‌ای برای مقدار دهی اولیه، همگام سازی، ساخت نخ و دیگر کارها دارند. سادگی انجام موازی‌سازی برنامه سریال با برچسب زنی کد برنامه که موازات را نشان می‌دهد. ابزارهای برنامه‌نویسی سیستم‌های دارای حافظه توزیع‌یافته رابط عبور پیام متداول‌ترین شیوه برنامه‌نویسی موازی استفاده از MPI است. رابط عبور پیام، ویژگی‌های یک واسط برنامه‌نویسی کاربردی کلی برای برنامه‌نویسی موازی را برای سیستم‌های دارای حافظه توزیع‌یافته مانند کلاسترهای تیغه‌ای و مجموعه آن‌ها تعیین می‌کند و به خودی خود یک ابزار نیست، بلکه یک طرح ویژگی‌ها و یک پروتکل ارتباطی به‌شمار می‌رود و همان‌گونه که از نامش پیداست، شیوه صحبت کردن سیستم‌های موازی با هم را تعیین می‌کنند. مهم‌ترین مزیت روش رابط عبور پیام به سایر روش‌های عبور پیام، قابل حمل بودن و سرعت بالای آن است. سرعت بالای این روش به این دلیل است که هنگام اجرا بر روی هر سخت‌افزاری برای آن سخت‌افزار بهینه می‌شود. مزیت بزرگ دیگر این روش، توانایی فراخوانی توابع آن با زبان‌های C++، C، فورترن، جاوا، C# و پایتون است. زبان‌های برنامه‌نویسی موازی زبان‌های برنامه‌نویسی همزمان، کتابخانه‌ها، رابط‌های برنامه کاربردی، و مدل‌های برنامه‌نویسی موازی (مانند اسکلت الگوریتمی) برای برنامه‌نویسی موازی کامپیوترها ایجاد شده‌است. این به‌طور کلی به چند کلاس بر مبنای حافظه معماری مشترک، حافظه توزیع شده و حافظه توزیع شده مشترک تقسیم می‌شود. زبان‌های برنامه‌نویسی حافظه مشترک با دستکاری متغیرهای حافظه مشترک ارتباط برقرار کنید. لیندا لیندا به دسته‌ای از زبان‌های برنامه‌نویسی موازی تعلق دارد که در آن‌ها تقسیم کارهای درون برنامه به رشته‌ها و فرستادن رشته‌ها به پردازنده‌ها باید به‌طور صریح در متن کد مشخص شود، اما ارتباط میان رشته‌های ایجادشده بر عهده برنامه‌نویس نیست. لیندا به خودی خود یک زبان قابل استفاده مستقیم نیست و به اصطلاح یک زبان هماهنگ‌سازی خوانده می‌شود. پیاده‌سازی‌هایی از آن برای بسیاری از زبان‌های برنامه‌نویسی و اسکریپت‌نویسی متداول، از جمله جاوا، C و C++، پایتون و روبی ارائه شده‌است. خصلت اصلی لیندا آن است که به جای مدل ارتباط نقطه به نقطه که در بیشتر رهیافت‌های برنامه‌نویسی موازی دنبال می‌شود، مفهومی به نام فضای چندگانه را ارائه می‌کند که بستر اصلی موازی‌سازی در مدل این زبان است. فضای چندگانه یک مخزن عمومی داده‌ها است که داده‌ها را می‌توان در آن ذخیره و سپس از آن بازیابی کرد. ارلنگ ارلنگ یک زبان زمان اجرا است که از ابتدا با هدف مستقیم ایجاد برنامه‌های موازی بی‌درنگ با آستانه تحمل خطای بالا و تا حد زیادی با در نظر داشتن سیستم‌های مخابراتی نوشته‌شده‌است. ارتباط میان پردازش‌ها در ارلنگ صریح است و همانند OpenMP باید توسط برنامه‌نویس تعیین شود، اما بر خلافOpenMP، ارلنگ از تبادل پیام برای ارتباط میان روندها استفاده می‌شود. ارلنگ زبانی مبتنی بر تابع‌ها است، به این مفهوم که پردازش داده‌ها در یک برنامه ارلنگ در قالب محاسبه تابع‌های ریاضی صورت می‌پذیرد و تقریباً همه چیز با تعریف کردن تابع‌ها انجام می‍شود. موازی‌سازی پردازش در ارلنگ با تعریف کردن روندهایی که اشتراکی با هم ندارند، انجام می‌شود. چارم++ چارم++، زبانی مبتنی بر C++ است که با هدف آسان کردن برنامه‌نویسی موازی و با ارائه قابلیت‌های برنامه‌نویسی موازی در سطح بالایی از انتزاع ارائه شده‌است. مبنای موازی‌سازی برنامه در چارم++، بر تجزیه‌کردن برنامه به‌شماری شیء به نام Chare است. Chareها در زمان اجرای برنامه با یک سیستم زمان اجرای پویا به پردازنده‌های مختلف متناظر می‌شوند که چارم++، امکان تغییر دادن این تناظر هنگام اجرای برنامه را فراهم می‌آورد. امکان برنامه‌نویسی با شیوه‌ای مبتنی بر رابط عبوری پیام، نیز با ارائه یک پیاده‌سازی از آن به نام رابط عبوری تطبیقی پیام به اختصار AMPI در لایه‌ای روی چارم++، فراهم شده‌است. مبنای برنامه‌نویسی در UPC بر پایه اشتراک داده میان پردازنده‌های مختلف است، به گونه‌ای که همه پردازنده‌ها به تمام متغیرها در برنامه دسترسی دارند، اما هر متغیر در اصل به یک پردازنده مشخص تعلق دارد. موازی‌سازی برنامه هنگام آغاز اجرا شدن آن تعیین می‌شود و در طول اجرا تغییر نمی‌کند، زیرا تناظر میان متغیرها با پردازنده‌ها را در میانه اجرای برنامه نمی‌توان تغییر داد. برای نوشتن برنامه‌های پردازش موازی به این‌گونه، UPC چهار دسته ساختار به ابزارهای عادی C می‌افزاید: یک مدل صریح اجرای موازی. شیوه‌هایی برای همگام‌سازی متغیرها مدلی برای بررسی سازگاری درونی حافظه اشتراکی و شیوه‌هایی برای مدیریت حافظه. کاربردهای پردازش موازی پیش‌بینی وضعیت اب و هوایی: استفاده از مدل‌های ریاضی از اقیانوس و جو و گرفتن مشاهدات فعلی آب‌وهوا و پردازش این داده‌ها با مدل‌های رایانه‌ای برای پیش‌بینی وضعیت آینده آب و هوا. مسائل اقتصادی جامعه: پردازش موازی برای مدل‌سازی اقتصاد یک جهان یا ملت استفاده می‌شود. سیستم برنامه‌ها که شامل دستگاه‌های محاسبه خوشه‌ای هستند، برای پیاده‌سازی الگوریتم‌های موازی در راستای بهینه‌سازی در چنین مدل‌های اقتصادی استفاده می‌شود.هوش مصنوعی و اتوماسیون: هوش مصنوعی یا هوش ماشینی (به انگلیسی: Artificial Intelligence)هوشی که یک ماشین در شرایط مختلف از خود نشان می‌دهد، گفته می‌شود. برای نمونه در ۴ عمل ۱)پردازش تصویر ۲)پردازش زبان‌های طبیعی ۳) تشخیص الگوها ۴)سیستم‌های خبره ف پردازش موازی کاربرد دارد. | ## جمع‌بندی | برای نمونه برای اسکن بدن انسان و اسکن مغز انسان، در بازسازی MRI برای تشخیص مهره‌ها استفاده می‌شود.