ابر کامپیوتر

محاسبات موازی

[av_section min_height=” min_height_pc=’25’ min_height_px=’500px’ padding=’default’ shadow=’no-border-styling’ bottom_border=’no-border-styling’ bottom_border_diagonal_color=’#333333′ bottom_border_diagonal_direction=” bottom_border_style=” custom_margin=’0px’ custom_margin_sync=’true’ custom_arrow_bg=” id=” color=’main_color’ background=’bg_color’ custom_bg=” background_gradient_color1=” background_gradient_color2=” background_gradient_direction=’vertical’ src=” attachment=” attachment_size=” attach=’scroll’ position=’top left’ repeat=’no-repeat’ video=” video_ratio=’16:9′ overlay_enable=’aviaTBoverlay_enable’ overlay_opacity=’1′ overlay_color=” overlay_pattern='{{AVIA_BASE_URL}}images/background-images/floral-dark.png’ overlay_custom_pattern=” av_element_hidden_in_editor=’0′ av_uid=’av-k082a8yu’ custom_class=”]

[av_one_fifth first min_height=” vertical_alignment=” space=” custom_margin=” margin=’0px’ row_boxshadow=” row_boxshadow_color=” row_boxshadow_width=’10’ link=” linktarget=” link_hover=” title_attr=” alt_attr=” padding=’0px’ highlight=” highlight_size=” border=” border_color=” radius=’0px’ column_boxshadow=” column_boxshadow_color=” column_boxshadow_width=’10’ background=’bg_color’ background_color=” background_gradient_color1=” background_gradient_color2=” background_gradient_direction=’vertical’ src=” background_position=’top left’ background_repeat=’no-repeat’ animation=” mobile_breaking=” mobile_display=” av_uid=’av-3mdkyt’]

[/av_one_fifth][av_three_fifth min_height=” vertical_alignment=’av-align-top’ space=” margin=’0px’ margin_sync=’true’ row_boxshadow_color=” row_boxshadow_width=’10’ link=” linktarget=” link_hover=” title_attr=” alt_attr=” padding=’40px’ padding_sync=’true’ highlight_size=’1.1′ border=’1′ border_color=’#0070e8′ radius=’5px’ radius_sync=’true’ column_boxshadow=’aviaTBcolumn_boxshadow’ column_boxshadow_color=’#0a0708′ column_boxshadow_width=’5′ background=’bg_color’ background_color=’#ffffff’ background_gradient_color1=” background_gradient_color2=” background_gradient_direction=’vertical’ src=” attachment=” attachment_size=” background_position=’top left’ background_repeat=’no-repeat’ animation=” mobile_breaking=” mobile_display=” av_uid=’av-5z588g’ custom_class=”]

[av_textblock size=’16’ av-medium-font-size=” av-small-font-size=” av-mini-font-size=” font_color=’custom’ color=’#ff0044′ id=” custom_class=” template_class=” av_uid=’av-1b8t0wg’ sc_version=’1.0′ admin_preview_bg=”]

محاسبات موازی

پرش به ناوبریپرش به جستجو

محاسبات موازی نوعی محاسبات است که در آن بسیاری از محاسبات یا فرآیندها به طور همزمان انجام می شود. [1] مشکلات بزرگ را اغلب می توان به مسائل کوچکتر تقسیم کرد، که در همان زمان می توان آنها را حل کرد. چندین شکل مختلف از محاسبات موازی وجود دارد: سطح بیت، سطح دستورالعمل ، داده و موازی کاری . موازی‌سازی مدت‌هاست که در محاسبات با کارایی بالا استفاده می‌شود ، اما به دلیل محدودیت‌های فیزیکی که از مقیاس‌بندی فرکانس جلوگیری می‌کند، مورد توجه گسترده‌تری قرار گرفته است. [2]از آنجایی که مصرف انرژی (و در نتیجه تولید گرما) توسط رایانه ها در سال های اخیر به یک نگرانی تبدیل شده است، [3] محاسبات موازی به الگوی غالب در معماری کامپیوتر ، عمدتاً به شکل پردازنده های چند هسته ای تبدیل شده است. [4]

محاسبات موازی ارتباط نزدیکی با محاسبات همزمان دارد – آنها اغلب با هم استفاده می‌شوند، و اغلب با هم ترکیب می‌شوند، اگرچه این دو متمایز هستند: می‌توان موازی‌سازی را بدون همزمانی و همزمانی را بدون موازی‌سازی (مانند چندوظیفه با اشتراک‌گذاری زمانی در یک واحد) داشت. پردازنده مرکزی). [5] [6] در محاسبات موازی، یک کار محاسباتی معمولاً به چند کار فرعی، اغلب بسیار، بسیار مشابه تقسیم می‌شود که می‌توانند به طور مستقل پردازش شوند و نتایج آن‌ها پس از تکمیل، ترکیب می‌شوند. در مقابل، در محاسبات همزمان، فرآیندهای مختلف اغلب به وظایف مرتبط نمی پردازند. همانطور که در محاسبات توزیع شده معمول است، وظایف جداگانه ممکن است ماهیت متنوعی داشته باشند و اغلب در طول اجرا نیاز به ارتباطات بین فرآیندی دارند.

رایانه‌های موازی را می‌توان تقریباً بر اساس سطحی که سخت‌افزار از موازی‌سازی پشتیبانی می‌کند طبقه‌بندی کرد، رایانه‌های چند هسته‌ای و چند پردازنده‌ای دارای عناصر پردازشی متعدد در یک دستگاه واحد هستند، در حالی که خوشه‌ها ، MPP ها و شبکه‌ها از چندین رایانه برای کار بر روی یک دستگاه استفاده می‌کنند. وظیفه. معماری‌های موازی تخصصی کامپیوتر گاهی در کنار پردازنده‌های سنتی برای تسریع وظایف خاص مورد استفاده قرار می‌گیرند.

در برخی موارد موازی‌سازی برای برنامه‌نویس شفاف است، مانند موازی‌سازی سطح بیت یا سطح دستورالعمل، اما الگوریتم‌های موازی صریحا ، به‌ویژه آنهایی که از همزمانی استفاده می‌کنند، نوشتن دشوارتر از الگوریتم‌های متوالی است، [7] زیرا همزمانی چندین الگوریتم جدید معرفی می‌کند. کلاس هایی از اشکالات نرم افزاری بالقوه ، که شرایط مسابقه رایج ترین آنهاست. ارتباط و همگام سازی بین وظایف فرعی مختلف معمولاً برخی از بزرگترین موانع برای دستیابی به عملکرد بهینه برنامه موازی است.

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

پس زمینه 

به طور سنتی، نرم افزار کامپیوتری برای محاسبات سریال نوشته شده است . برای حل یک مسئله، یک الگوریتم به عنوان یک جریان سریالی از دستورالعمل ها ساخته و پیاده سازی می شود. این دستورالعمل ها بر روی یک واحد پردازش مرکزی در یک کامپیوتر اجرا می شوند. فقط یک دستور ممکن است در یک زمان اجرا شود – پس از اتمام آن دستورالعمل، دستور بعدی اجرا می شود. [8]

از سوی دیگر، محاسبات موازی، از چندین عنصر پردازشی به طور همزمان برای حل یک مشکل استفاده می کند. این امر با تقسیم مسئله به بخش‌های مستقل انجام می‌شود تا هر عنصر پردازش بتواند بخشی از الگوریتم خود را به طور همزمان با سایرین اجرا کند. عناصر پردازشی می توانند متنوع باشند و شامل منابعی مانند یک کامپیوتر منفرد با چندین پردازنده، چندین کامپیوتر تحت شبکه، سخت افزار تخصصی یا هر ترکیبی از موارد فوق می باشند. [8] محاسبات موازی تاریخی برای محاسبات علمی و شبیه‌سازی مسائل علمی، به‌ویژه در علوم طبیعی و مهندسی ، مانند هواشناسی ، استفاده می‌شد . این امر منجر به طراحی سخت افزار و نرم افزار موازی و همچنینمحاسبات با کارایی بالا [9]

مقیاس فرکانس دلیل اصلی بهبود عملکرد کامپیوتر از اواسط دهه 1980 تا سال 2004 بود. زمان اجرا یک برنامه برابر است با تعداد دستورالعمل ضرب در میانگین زمان هر دستورالعمل. ثابت نگه داشتن سایر موارد، افزایش فرکانس ساعت، میانگین زمان لازم برای اجرای یک دستورالعمل را کاهش می دهد. بنابراین افزایش فرکانس زمان اجرا را برای همه برنامه های محاسباتی کاهش می دهد. [10] با این حال، توان مصرفی P توسط یک تراشه با معادله P = C × 2 × F ارائه می شود ، که در آن ظرفیت خازنی است.سوئیچ شدن در هر سیکل ساعت (متناسب با تعداد ترانزیستورهایی که ورودی آنها تغییر می کند)، ولتاژ است و F فرکانس پردازنده (سیکل در ثانیه) است. [11] افزایش فرکانس باعث افزایش توان مصرفی در یک پردازنده می شود. افزایش مصرف انرژی پردازنده در نهایت منجر به لغو پردازنده های Tejas و Jayhawk توسط اینتل در 8 می 2004 شد ، که عموماً به عنوان پایان مقیاس فرکانس به عنوان الگوی معماری غالب رایانه ذکر می شود. [12]

برای مقابله با مشکل مصرف برق و گرمای بیش از حد واحد پردازش مرکزی اصلی (CPU یا پردازنده) تولیدکنندگان شروع به تولید پردازنده های کم مصرف با چندین هسته کردند. هسته واحد محاسباتی پردازنده است و در پردازنده‌های چند هسته‌ای هر هسته مستقل است و می‌تواند به طور همزمان به حافظه مشابهی دسترسی داشته باشد. پردازنده های چند هسته ای محاسبات موازی را به رایانه های رومیزی آورده اند . بنابراین موازی سازی برنامه های سریال به یک وظیفه اصلی برنامه نویسی تبدیل شده است. در سال 2012، پردازنده‌های چهار هسته‌ای برای رایانه‌های رومیزی استاندارد شدند ، در حالی که سرورها دارای پردازنده‌های 10 و 12 هسته‌ای هستند. از قانون مورمی توان پیش بینی کرد که تعداد هسته های هر پردازنده هر 18 تا 24 ماه دو برابر می شود. این می تواند به این معنی باشد که بعد از سال 2020 یک پردازنده معمولی ده ها یا صدها هسته خواهد داشت. [13]

یک سیستم عامل می تواند اطمینان حاصل کند که وظایف مختلف و برنامه های کاربر به صورت موازی بر روی هسته های موجود اجرا می شوند. با این حال، برای اینکه یک برنامه نرم‌افزار سریال از معماری چند هسته‌ای استفاده کامل کند، برنامه‌نویس باید کد را بازسازی و موازی‌سازی کند. افزایش سرعت اجرای نرم افزار کاربردی دیگر از طریق مقیاس فرکانس حاصل نمی شود، در عوض برنامه نویسان باید کد نرم افزار خود را موازی کنند تا از قدرت محاسباتی فزاینده معماری های چند هسته ای استفاده کنند. [14]

قانون امدال و قانون گوستافسون 

نمایش گرافیکی قانون امدال . سرعت یک برنامه از موازی سازی به مقداری از برنامه که می تواند موازی شود محدود می شود. به عنوان مثال، اگر بتوان 90% برنامه را موازی کرد، حداکثر سرعت تئوری با استفاده از محاسبات موازی 10 برابر خواهد بود بدون توجه به اینکه چند پردازنده استفاده می شود.

فرض کنید یک کار دارای دو بخش مستقل A و B است. بخش B تقریباً 25٪ از زمان کل محاسبات را می گیرد. با کار بسیار سخت، ممکن است شخص بتواند این قسمت را 5 برابر سریعتر بسازد، اما این تنها زمان کل محاسبات را اندکی کاهش می دهد. در مقابل، ممکن است نیاز باشد که کار کمتری انجام شود تا قسمت A دو برابر سریعتر باشد. این محاسبات را بسیار سریع‌تر از بهینه‌سازی بخش B می‌کند ، حتی اگر سرعت بخش B با نسبت بیشتر باشد (5 برابر در مقابل 2 برابر).

در حالت بهینه، افزایش سرعت حاصل از موازی سازی خطی خواهد بود – دوبرابر کردن تعداد عناصر پردازش باید زمان اجرا را به نصف کاهش دهد و دوبرابر کردن آن برای بار دوم باید دوباره زمان اجرا را به نصف کاهش دهد. با این حال، تعداد بسیار کمی از الگوریتم های موازی به سرعت بهینه دست می یابند. اکثر آنها برای تعداد کمی از عناصر پردازشی دارای یک سرعت تقریباً خطی هستند که برای تعداد زیادی از عناصر پردازشی به یک مقدار ثابت تبدیل می شود.

سرعت بالقوه یک الگوریتم در یک پلت فرم محاسباتی موازی توسط قانون آمدال ارائه شده است [15]

{\displaystyle S_{\text{latency}}(s)={\frac {1}{1-p+{\frac {p}{s}}}},}

جایی که

  • تأخیر سرعت بالقوه در تأخیر اجرای کل کار است.
  • s سرعت تأخیر اجرای بخش قابل موازی سازی وظیفه است.
  • p درصدی از زمان اجرای کل کار مربوط به بخش موازی پذیر کار قبل از موازی سازی است.

از آنجایی که تأخیر S < 1/(1 – p ) است، نشان می دهد که بخش کوچکی از برنامه که نمی تواند موازی شود، سرعت کلی موجود از موازی سازی را محدود می کند. برنامه ای که یک مسئله بزرگ ریاضی یا مهندسی را حل می کند معمولاً از چندین بخش موازی پذیر و چندین بخش غیرقابل موازی سازی (سریالی) تشکیل می شود. اگر بخش غیرقابل موازی سازی یک برنامه 10 درصد از زمان اجرا را تشکیل می دهد ( ص= 0.9)، ما نمی توانیم بیش از 10 برابر افزایش سرعت داشته باشیم، صرف نظر از اینکه چند پردازنده اضافه شده است. این یک حد بالایی برای سودمندی افزودن واحدهای اجرایی موازی بیشتر قرار می دهد. “وقتی نمی توان یک کار را به دلیل محدودیت های متوالی تقسیم کرد، اعمال تلاش بیشتر تأثیری بر برنامه زمانی ندارد. بچه دار شدن نه ماه طول می کشد، مهم نیست که چند زن تعیین شوند.” [16]

یک نمایش گرافیکی از قانون گوستافسون

قانون Amdahl فقط در مواردی اعمال می شود که اندازه مشکل ثابت شده باشد. در عمل، با در دسترس قرار گرفتن منابع محاسباتی بیشتر، آنها تمایل به استفاده از مسائل بزرگتر (مجموعه داده های بزرگتر) دارند، و زمان صرف شده در بخش قابل موازی سازی اغلب بسیار سریعتر از کار ذاتی سریال رشد می کند. [17] در این مورد، قانون گوستافسون ارزیابی کمتر بدبینانه و واقع بینانه تری از عملکرد موازی ارائه می دهد: [18]

{\displaystyle S_{\text{latency}}(s)=1-p+sp.}

هم قانون Amdahl و هم قانون Gustafson فرض می کنند که زمان اجرای قسمت سریال برنامه مستقل از تعداد پردازنده ها است. قانون آمدال فرض می کند که کل مشکل اندازه ثابتی دارد به طوری که کل مقدار کاری که باید به صورت موازی انجام شود نیز مستقل از تعداد پردازنده ها است، در حالی که قانون گوستافسون فرض می کند که مقدار کل کاری که باید به صورت موازی انجام شود به صورت خطی با تعداد پردازنده ها

وابستگی ها 

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

فرض کنید i و j دو بخش برنامه باشند. شرایط برنشتاین [19] زمانی را توصیف می کند که این دو مستقل هستند و می توانند به صورت موازی اجرا شوند. برای i ، بگذارید I همه متغیرهای ورودی و O i متغیرهای خروجی باشند، و به همین ترتیب برای Pj . i و j در صورت ارضای مستقل هستند

{\displaystyle I_{j}\cap O_{i}=\varnothing,}
{\displaystyle I_{i}\cap O_{j}=\varnothing ,}
{\displaystyle O_{i}\cap O_{j}=\varnothing.}

نقض شرط اول یک وابستگی به جریان را ایجاد می کند که مربوط به بخش اول است که نتیجه ای را ایجاد می کند که توسط بخش دوم استفاده می شود. شرط دوم نشان دهنده یک ضد وابستگی است، زمانی که بخش دوم یک متغیر مورد نیاز بخش اول را تولید می کند. شرط سوم و آخر نشان دهنده یک وابستگی خروجی است: وقتی دو بخش در یک مکان می نویسند، نتیجه از آخرین بخش اجرا شده به طور منطقی می آید. [20]

توابع زیر را در نظر بگیرید که چندین نوع وابستگی را نشان می دهند:

1: تابع Dep(a,b)
2: c := a * b
3: d := 3 * c
4: عملکرد پایانی

در این مثال، دستور 3 را نمی توان قبل (یا حتی به موازات) دستور 2 اجرا کرد، زیرا دستور 3 از نتیجه دستور 2 استفاده می کند. شرط 1 را نقض می کند و بنابراین یک وابستگی به جریان را معرفی می کند.

1: تابع NoDep(a, b)
2: c := a * b
3: d := 3 * b
4: e := a + b
5: تابع پایان

در این مثال، هیچ وابستگی بین دستورالعمل ها وجود ندارد، بنابراین همه آنها می توانند به صورت موازی اجرا شوند.

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

شرایط مسابقه، محرومیت متقابل، همگام سازی و کاهش سرعت موازی 

وظایف فرعی در یک برنامه موازی اغلب رشته نامیده می شود . برخی از معماری‌های کامپیوتری موازی از نسخه‌های کوچک‌تر و سبک‌تر thread‌ها به نام فیبر استفاده می‌کنند، در حالی که برخی دیگر از نسخه‌های بزرگ‌تر به نام فرآیندها استفاده می‌کنند. با این حال، “رشته ها” به طور کلی به عنوان یک اصطلاح عمومی برای وظایف فرعی پذیرفته شده است. [21] موضوعات اغلب نیاز به دسترسی هماهنگ به یک شی یا منبع دیگر دارند ، برای مثال زمانی که باید متغیری را که بین آنها به اشتراک گذاشته شده است به روز کنند. بدون همگام سازی، دستورالعمل های بین دو رشته ممکن است به هر ترتیبی در هم آمیخته شوند. برای مثال برنامه زیر را در نظر بگیرید:

موضوع A موضوع B
1A: متغیر V را بخوانید 1B: متغیر V را بخوانید
2A: 1 را به متغیر V اضافه کنید 2B: 1 را به متغیر V اضافه کنید
3A: به متغیر V برگردید 3B: به متغیر V برگردید

اگر دستور 1B بین 1A و 3A اجرا شود، یا اگر دستور 1A بین 1B و 3B اجرا شود، برنامه داده های نادرستی تولید می کند. این به عنوان شرایط مسابقه شناخته می شود . برنامه نویس باید از یک قفل برای ارائه انحراف متقابل استفاده کند . قفل یک ساختار زبان برنامه نویسی است که به یک رشته اجازه می دهد تا کنترل یک متغیر را در دست بگیرد و از خواندن یا نوشتن آن توسط رشته های دیگر جلوگیری کند، تا زمانی که آن متغیر باز شود. رشته ای که قفل را نگه می دارد برای اجرای بخش حیاتی خود (بخشی از یک برنامه که نیاز به دسترسی انحصاری به برخی متغیرها دارد) و باز کردن قفل داده ها پس از اتمام آزاد است. بنابراین، برای تضمین اجرای صحیح برنامه، می توان برنامه فوق را برای استفاده از قفل بازنویسی کرد:

موضوع A موضوع B
1A: متغیر قفل V 1B: متغیر قفل V
2A: متغیر V را بخوانید 2B: متغیر V را بخوانید
3A: 1 را به متغیر V اضافه کنید 3B: 1 را به متغیر V اضافه کنید
4A: به متغیر V برگردید 4B: به متغیر V برگردید
5A: متغیر V را باز کنید 5B: متغیر V را باز کنید

یک رشته با موفقیت متغیر V را قفل می کند، در حالی که رشته دیگر قفل می شود  تا زمانی که قفل V دوباره باز نشود ادامه پیدا نمی کند. این امر اجرای صحیح برنامه را تضمین می کند. قفل ها ممکن است برای اطمینان از اجرای صحیح برنامه در زمانی که رشته ها باید دسترسی به منابع را سریالی کنند ضروری باشد، اما استفاده از آنها می تواند یک برنامه را تا حد زیادی کند کند و ممکن است بر قابلیت اطمینان آن تأثیر بگذارد . [22]

قفل کردن چندین متغیر با استفاده از قفل های غیر اتمی ، امکان بن بست برنامه را معرفی می کند . یک قفل اتمی چندین متغیر را به طور همزمان قفل می کند. اگر نتواند همه آنها را قفل کند، هیچ کدام را قفل نمی کند. اگر دو thread هر کدام نیاز به قفل کردن همان دو متغیر با استفاده از قفل های غیر اتمی داشته باشند، ممکن است یک رشته یکی از آنها را قفل کند و رشته دوم متغیر دوم را قفل کند. در چنین حالتی، هیچ یک از موضوعات نمی تواند کامل شود و بن بست نتیجه می گیرد. [23]

بسیاری از برنامه های موازی نیاز دارند که وظایف فرعی آنها به صورت همزمان عمل کنند . این مستلزم استفاده از یک مانع است. موانع معمولاً با استفاده از قفل یا سمافور اجرا می شوند. [24] یک دسته از الگوریتم ها، که به عنوان الگوریتم های بدون قفل و بدون انتظار شناخته می شوند، به طور کلی از استفاده از قفل ها و موانع جلوگیری می کنند. با این حال، اجرای این رویکرد به طور کلی دشوار است و به ساختارهای داده به درستی طراحی شده نیاز دارد. [25]

همه موازی سازی ها منجر به افزایش سرعت نمی شود. به طور کلی، از آنجایی که یک کار به رشته‌های بیشتر و بیشتری تقسیم می‌شود، آن رشته‌ها بخش فزاینده‌ای از زمان خود را صرف برقراری ارتباط با یکدیگر یا انتظار یکدیگر برای دسترسی به منابع می‌کنند. [26] [27] هنگامی که سربار ناشی از اختلاف منابع یا ارتباطات بر زمان صرف شده برای محاسبات دیگر غالب شود، موازی سازی بیشتر (یعنی تقسیم حجم کار بر روی رشته های بیشتر) به جای کاهش مدت زمان مورد نیاز برای اتمام، افزایش می یابد. این مشکل که به عنوان کاهش سرعت موازی شناخته می شود ، [28] می تواند در برخی موارد با تجزیه و تحلیل نرم افزار و طراحی مجدد بهبود یابد. [29]

موازی سازی ریزدانه، درشت دانه و شرم آور 

برنامه‌ها اغلب بر اساس تعداد دفعاتی که وظایف فرعی آنها نیاز به همگام‌سازی یا برقراری ارتباط با یکدیگر دارند، طبقه‌بندی می‌شوند. اگر یک برنامه کاربردی موازی ریز دانه را نشان می دهد اگر وظایف فرعی آن باید چندین بار در ثانیه ارتباط برقرار کنند. اگر آنها بارها در ثانیه ارتباط برقرار نکنند، توازی درشت دانه از خود نشان می دهد، و اگر به ندرت یا هرگز مجبور به برقراری ارتباط نباشند ، موازی کاری شرم آور نشان می دهد. برنامه های موازی شرم آور ساده ترین برای موازی سازی در نظر گرفته می شوند.

طبقه بندی فلین 

مایکل جی فلین یکی از اولین سیستم‌های طبقه‌بندی را برای کامپیوترها و برنامه‌های موازی (و ترتیبی) ایجاد کرد که اکنون به عنوان طبقه‌بندی فلین شناخته می‌شود . فلین برنامه‌ها و رایانه‌ها را بر اساس اینکه آیا آنها با استفاده از یک مجموعه واحد یا چندین مجموعه از دستورالعمل‌ها کار می‌کنند و اینکه آیا این دستورالعمل‌ها از یک مجموعه واحد یا چندین مجموعه داده استفاده می‌کنند یا نه، طبقه‌بندی کرد.

طبقه بندی تک دستور العمل-تک داده (SISD) معادل یک برنامه کاملاً متوالی است. طبقه بندی تک دستور العمل-چند داده (SIMD) مشابه انجام عملیات مشابه به طور مکرر بر روی یک مجموعه داده بزرگ است. این معمولا در برنامه های پردازش سیگنال انجام می شود . چند دستور العمل تک داده (MISD) یک طبقه بندی به ندرت استفاده می شود. در حالی که معماری‌های کامپیوتری برای مقابله با این موضوع ابداع شد (مانند آرایه‌های سیستولیک )، تعداد کمی از برنامه‌های کاربردی که متناسب با این کلاس بودند، عملی شدند. برنامه های چند دستور العمل چندگانه (MIMD) رایج ترین نوع برنامه های موازی هستند.

به گفته دیوید ای . شاید به دلیل قابل درک بودن آن – پرکاربردترین طرح. [31]

انواع توازی

توازی سطح بیت 

Taiwania 3 of Taiwan ، یک دستگاه ابررایانه موازی که به تحقیقات COVID-19 پیوست .

از ظهور فناوری ساخت تراشه‌های رایانه‌ای در مقیاس بسیار بزرگ (VLSI) در دهه 1970 تا حدود سال 1986، افزایش سرعت در معماری رایانه با دو برابر کردن اندازه کلمات رایانه انجام شد – مقدار اطلاعاتی که پردازنده می‌تواند در هر چرخه دستکاری کند. [32] افزایش اندازه کلمه تعداد دستوراتی را که پردازنده باید اجرا کند تا بر روی متغیرهایی که اندازه آنها بزرگتر از طول کلمه است اجرا کند، کاهش می دهد. به عنوان مثال، در جایی که یک پردازنده 8 بیتی باید دو عدد صحیح 16 بیتی اضافه کند، پردازنده باید ابتدا 8 بیت مرتبه پایین تر را از هر عدد صحیح با استفاده از دستورالعمل جمع استاندارد اضافه کند، سپس 8 بیت مرتبه بالاتر را با استفاده از یک افزودنی اضافه کند. – حمل دستورالعمل وبیت حمل از جمع مرتبه پایین تر. بنابراین، یک پردازنده 8 بیتی برای تکمیل یک عملیات واحد به دو دستورالعمل نیاز دارد، جایی که یک پردازنده 16 بیتی می تواند عملیات را با یک دستورالعمل کامل کند.

از لحاظ تاریخی، ریزپردازنده های 4 بیتی با ریزپردازنده های 8 بیتی، سپس 16 بیتی و سپس 32 بیتی جایگزین شدند. این روند عموماً با معرفی پردازنده های 32 بیتی به پایان رسید که برای دو دهه یک استاندارد در محاسبات همه منظوره بوده است. تا اوایل دهه 2000، با ظهور معماری های x86-64 ، پردازنده های 64 بیتی رایج نشدند .

موازی سازی سطح دستورالعمل 

یک پردازنده متعارف بدون خط لوله . برای تکمیل یک دستورالعمل پنج چرخه ساعت طول می کشد و بنابراین پردازنده می تواند عملکرد زیر مقیاسی را صادر کند ( IPC = 0.2 < 1 ).

یک برنامه کامپیوتری، در اصل، جریانی از دستورالعمل ها است که توسط یک پردازنده اجرا می شود. بدون موازی سازی در سطح دستورالعمل، یک پردازنده تنها می تواند کمتر از یک دستورالعمل در هر سیکل ساعت صادر کند ( IPC < 1 ). این پردازنده ها به پردازنده های زیر مقیاسی معروف هستند . این دستورالعمل ها را می توان مجدداً مرتب کرد و در گروه هایی ترکیب کرد که سپس بدون تغییر در نتیجه برنامه به صورت موازی اجرا می شوند. این به عنوان موازی سازی در سطح دستورالعمل شناخته می شود. از اواسط دهه 1980 تا اواسط دهه 1990، پیشرفت در موازی سازی در سطح دستور العمل بر معماری کامپیوتر غالب بود. [33]

یک پردازنده پنج مرحله ای متعارف خط لوله . در بهترین حالت، یک چرخه ساعت طول می کشد تا یک دستورالعمل کامل شود و بنابراین پردازنده می تواند عملکرد اسکالر را صادر کند ( IPC = 1 ).

همه پردازنده های مدرن دارای خطوط لوله دستورالعمل چند مرحله ای هستند . هر مرحله در خط لوله مربوط به عمل متفاوتی است که پردازنده بر روی آن دستورالعمل در آن مرحله انجام می دهد. یک پردازنده با خط لوله مرحله N می تواند تا N دستورالعمل مختلف در مراحل مختلف تکمیل داشته باشد و بنابراین می تواند یک دستورالعمل در هر سیکل ساعت صادر کند ( IPC = 1 ). این پردازنده ها به پردازنده های اسکالر معروف هستند . مثال متعارف یک پردازنده خط لوله، یک پردازنده RISC است که دارای پنج مرحله است: واکشی دستورالعمل (IF)، رمزگشایی دستورالعمل (ID)، اجرا (EX)، دسترسی به حافظه (MEM) و ثبت بازگشت (WB). پردازنده پنتیوم 4 دارای خط لوله 35 مرحله ای بود.[34]

یک پردازشگر خط لوله پنج مرحله ای متعارف با دو واحد اجرایی. در بهترین حالت، برای تکمیل دو دستورالعمل یک سیکل ساعت طول می‌کشد و بنابراین پردازنده می‌تواند عملکرد فوق‌اسکالار را صادر کند ( IPC = 2 > 1 ).

اکثر پردازنده های مدرن نیز دارای چندین واحد اجرایی هستند. آنها معمولاً این ویژگی را با خط لوله ترکیب می کنند و بنابراین می توانند بیش از یک دستورالعمل در هر سیکل ساعت صادر کنند ( IPC > 1 ). این پردازنده ها به پردازنده های فوق اسکالر معروف هستند . پردازنده‌های Superscalar با پردازنده‌های چند هسته‌ای تفاوت دارند، زیرا چندین واحد اجرایی، کل پردازنده نیستند (یعنی واحدهای پردازش). دستورالعمل ها را تنها در صورتی می توان با هم گروه بندی کرد که وابستگی داده ای بین آنها وجود نداشته باشد. Scoreboarding و الگوریتم Tomasulo (که شبیه به Scoreboarding است اما از تغییر نام رجیستر استفاده می کند.) دو تا از متداول ترین تکنیک ها برای اجرای خارج از نظم اجرای و موازی سازی در سطح دستورالعمل هستند.

موازی کاری 

موازی کاری مشخصه یک برنامه موازی است که “محاسبات کاملاً متفاوتی را می توان بر روی مجموعه داده های یکسان یا متفاوت انجام داد”. [35] این در تضاد با موازی سازی داده ها است، که در آن محاسبه یکسان بر روی مجموعه های مشابه یا متفاوتی از داده ها انجام می شود. موازی کاری شامل تجزیه یک وظیفه به وظایف فرعی و سپس تخصیص هر کار فرعی به یک پردازنده برای اجرا است. سپس پردازنده ها این وظایف فرعی را همزمان و اغلب به صورت مشترک اجرا می کنند. موازی کاری معمولاً با اندازه یک مسئله مقیاس نمی شود. [36]

توازی سطح ابرکلمه 

موازی سازی سطح ابرکلمه یک تکنیک برداری است که مبتنی بر باز کردن حلقه و بردارسازی بلوک پایه است. متمایز از الگوریتم‌های برداری حلقه است زیرا می‌تواند از موازی‌سازی کدهای درون خطی ، مانند دستکاری مختصات، کانال‌های رنگی یا در حلقه‌هایی که با دست باز می‌شوند، بهره‌برداری کند. [37]

سخت افزار

حافظه و ارتباطات 

حافظه اصلی در یک کامپیوتر موازی یا حافظه مشترک (مشترک بین تمام عناصر پردازش در یک فضای آدرس واحد )، یا حافظه توزیع شده (که در آن هر عنصر پردازش فضای آدرس محلی خود را دارد) است. [38] حافظه توزیع شده به این واقعیت اشاره دارد که حافظه به طور منطقی توزیع شده است، اما اغلب به این معنی است که به طور فیزیکی نیز توزیع شده است. حافظه مشترک توزیع شده و مجازی سازی حافظه این دو رویکرد را با هم ترکیب می کنند، جایی که عنصر پردازش دارای حافظه محلی و دسترسی به حافظه در پردازنده های غیر محلی است. دسترسی به حافظه محلی معمولا سریعتر از دسترسی به حافظه غیر محلی است. در ابر رایانه هافضای حافظه مشترک توزیع شده را می توان با استفاده از مدل برنامه نویسی مانند PGAS پیاده سازی کرد . این مدل به فرآیندهای یک گره محاسباتی اجازه می دهد تا به طور شفاف به حافظه راه دور یک گره محاسباتی دیگر دسترسی داشته باشند. تمام گره‌های محاسباتی از طریق اتصال پرسرعت مانند Infiniband به یک سیستم حافظه مشترک خارجی متصل می‌شوند ، این سیستم حافظه مشترک خارجی به عنوان buffer انفجاری شناخته می‌شود ، که معمولاً از آرایه‌هایی از حافظه غیر فرار ساخته می‌شود که به صورت فیزیکی در چندین I/ توزیع شده است. ای گره ها

یک نمای منطقی از معماری دسترسی غیریکنواخت حافظه (NUMA). پردازنده‌های یک دایرکتوری می‌توانند با تاخیر کمتری نسبت به حافظه آن دایرکتوری دسترسی پیدا کنند.

معماری‌های رایانه‌ای که در آن‌ها می‌توان به هر عنصر حافظه اصلی با تأخیر و پهنای باند مساوی دسترسی داشت ، به عنوان سیستم‌های دسترسی به حافظه یکنواخت (UMA) شناخته می‌شود. به طور معمول، تنها با یک سیستم حافظه مشترک ، که در آن حافظه به صورت فیزیکی توزیع نمی شود، می توان به آن دست یافت. سیستمی که این ویژگی را ندارد به عنوان معماری دسترسی به حافظه غیریکنواخت (NUMA) شناخته می شود. سیستم های حافظه توزیع شده دسترسی به حافظه غیر یکنواخت دارند.

سیستم‌های رایانه‌ای از حافظه‌های کش استفاده می‌کنند – حافظه‌های کوچک و سریعی که در نزدیکی پردازنده قرار دارند و کپی‌های موقتی از مقادیر حافظه را ذخیره می‌کنند. سیستم های کامپیوتری موازی با کش هایی که ممکن است مقدار یکسان را در بیش از یک مکان ذخیره کنند، با احتمال اجرای نادرست برنامه مشکل دارند. این کامپیوترها به یک سیستم انسجام کش نیاز دارند که مقادیر ذخیره شده را ردیابی می کند و به صورت استراتژیک آنها را پاک می کند، بنابراین اجرای صحیح برنامه را تضمین می کند. جاسوسی اتوبوسیکی از متداول‌ترین روش‌ها برای ردیابی مقادیری است که به آن‌ها دسترسی دارند (و بنابراین باید پاک شوند). طراحی سیستم های انسجام کش بزرگ و با کارایی بالا یک مشکل بسیار دشوار در معماری کامپیوتر است. در نتیجه، معماری های کامپیوتر حافظه مشترک به اندازه سیستم های حافظه توزیع شده مقیاس نمی شوند. [38]

ارتباط پردازنده-پردازنده و پردازنده-حافظه را می توان به روش های مختلف در سخت افزار پیاده سازی کرد، از جمله از طریق حافظه مشترک (چه چند پورت یا چندگانه )، یک سوئیچ crossbar ، یک گذرگاه مشترک یا یک شبکه بهم پیوسته از تعداد بی شماری از توپولوژی ها از جمله ستاره ، حلقه ، درخت . , hypercube , fat hypercube (یک ابر مکعب با بیش از یک پردازنده در یک گره) یا مش n بعدی .

رایانه‌های موازی مبتنی بر شبکه‌های به هم پیوسته نیاز به نوعی مسیریابی دارند تا بتوانند پیام‌ها را بین گره‌هایی که مستقیماً متصل نیستند، ارسال کنند. رسانه ای که برای ارتباط بین پردازنده ها استفاده می شود احتمالاً در ماشین های چند پردازنده ای بزرگ سلسله مراتبی است.

کلاس های کامپیوترهای موازی 

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

محاسبات چند هسته ای 

یک پردازنده چند هسته ای، پردازنده ای است که شامل چندین واحد پردازش (به نام هسته ها) روی یک تراشه است. این پردازنده با یک پردازنده فوق اسکالر که شامل چندین واحد اجرایی است و می تواند چندین دستورالعمل را در هر چرخه ساعت از یک جریان دستورالعمل (رشته) صادر کند، متفاوت است. در مقابل، یک پردازنده چند هسته ای می تواند چندین دستورالعمل را در هر چرخه ساعت از چندین جریان دستورالعمل صادر کند. ریزپردازنده سلولی IBM که برای استفاده در Sony PlayStation 3 طراحی شده است ، یک پردازنده چند هسته ای برجسته است. هر هسته در یک پردازنده چند هسته ای به طور بالقوه می تواند فوق مقیاس نیز باشد – یعنی در هر چرخه ساعت، هر هسته می تواند چندین دستورالعمل را از یک رشته صادر کند.

چند رشته ای همزمان (که Hyper-Threading اینتل شناخته شده ترین آن است) شکل اولیه شبه چند هسته گرایی بود. پردازنده‌ای که قادر به چند رشته‌ای همزمان است، شامل واحدهای اجرایی متعدد در یک واحد پردازشی می‌شود – یعنی معماری فوق‌اسکالر دارد – و می‌تواند چندین دستورالعمل را در هر چرخه ساعت از رشته‌های متعدد صادر کند. از سوی دیگر، چند رشته ای زمانی شامل یک واحد اجرای واحد در یک واحد پردازشی می شود و می تواند یک دستور را در یک زمان از چندین رشته صادر کند.

چند پردازش متقارن 

چند پردازنده متقارن (SMP) یک سیستم کامپیوتری با چندین پردازنده یکسان است که حافظه را به اشتراک گذاشته و از طریق یک گذرگاه به هم متصل می شوند . [39] مشاجره باس مانع از مقیاس پذیری معماری اتوبوس می شود. در نتیجه، SMP ها معمولاً بیش از 32 پردازنده را شامل نمی شوند. [40] به دلیل اندازه کوچک پردازنده ها و کاهش قابل توجه نیاز به پهنای باند گذرگاه که توسط کش های بزرگ به دست می آید، چنین چند پردازنده های متقارن بسیار مقرون به صرفه هستند، مشروط بر اینکه پهنای باند حافظه کافی وجود داشته باشد. [39]

محاسبات توزیع شده ویرایش ]

کامپیوتر توزیع شده (همچنین به عنوان چند پردازنده حافظه توزیع شده شناخته می شود) یک سیستم کامپیوتری حافظه توزیع شده است که در آن عناصر پردازش توسط یک شبکه به هم متصل می شوند. کامپیوترهای توزیع شده بسیار مقیاس پذیر هستند. اصطلاحات ” محاسبات همزمان “، “محاسبات موازی” و “محاسبات توزیع شده” همپوشانی زیادی دارند و هیچ تمایز واضحی بین آنها وجود ندارد. [41] همان سیستم را می توان هم به عنوان «موازی» و هم «توزیع» توصیف کرد. پردازنده ها در یک سیستم توزیع شده معمولی به طور همزمان به صورت موازی کار می کنند. [42]

محاسبات خوشه ای ویرایش ]

خوشه گروهی از کامپیوترهای متصل به هم هستند که از نزدیک با هم کار می کنند، به طوری که از برخی جهات می توان آنها را به عنوان یک کامپیوتر واحد در نظر گرفت. [43] خوشه ها از چندین ماشین مستقل تشکیل شده اند که توسط یک شبکه به هم متصل شده اند. در حالی که ماشین‌های موجود در یک خوشه لازم نیست متقارن باشند، اگر متقارن نباشند، تعادل بار دشوارتر است. متداول ترین نوع خوشه، خوشه Beowulf است ، که خوشه ای است که بر روی چندین کامپیوتر تجاری خارج از قفسه یکسان متصل به یک شبکه محلی اترنت TCP/IP پیاده سازی شده است . [44] فن آوری Beowulf در اصل توسط توماس استرلینگ و دونالد بکر توسعه داده شد . 87 درصد از تمام ابررایانه‌های Top500 خوشه‌ای هستند. [45] بقیه پردازشگرهای موازی عظیم هستند که در زیر توضیح داده شده است.

از آنجایی که سیستم‌های محاسباتی شبکه (که در زیر توضیح داده شده است) می‌توانند به راحتی مشکلات موازی شرم‌آور را مدیریت کنند، خوشه‌های مدرن معمولاً برای رسیدگی به مشکلات دشوارتر طراحی می‌شوند – مشکلاتی که به گره‌ها نیاز دارند تا نتایج میانی را اغلب با یکدیگر به اشتراک بگذارند. این نیاز به پهنای باند بالا و مهمتر از آن، یک شبکه ارتباطی با تأخیر کم دارد. بسیاری از ابررایانه‌های تاریخی و فعلی از سخت‌افزار شبکه سفارشی‌سازی شده با کارایی بالا استفاده می‌کنند که به طور خاص برای محاسبات خوشه‌ای طراحی شده است، مانند شبکه Cray Gemini. [46] از سال 2014، اکثر ابرکامپیوترهای فعلی از سخت افزارهای استاندارد شبکه، اغلب Myrinet ، InfiniBand یا Gigabit Ethernet استفاده می کنند .

محاسبات موازی عظیم ویرایش ]

کابینتی از ابرکامپیوتر موازی انبوه Blue Gene/ L IBM

یک پردازنده انبوه موازی (MPP) یک کامپیوتر منفرد با تعداد زیادی پردازنده شبکه است. MPP ها بسیاری از ویژگی های مشابه خوشه ها را دارند، اما MPP ها دارای شبکه های اتصال تخصصی هستند (در حالی که خوشه ها از سخت افزار کالا برای شبکه استفاده می کنند). MPP ها همچنین معمولاً بزرگتر از خوشه ها هستند و معمولاً «بسیار بیشتر» از 100 پردازنده دارند. [47] در MPP، “هر CPU حاوی حافظه و نسخه ای از سیستم عامل و برنامه است. هر زیرسیستم از طریق یک اتصال پرسرعت با سایرین ارتباط برقرار می کند.” [48]

Blue Gene/L شرکت IBM ، پنجمین ابرکامپیوتر سریع جهان بر اساس رتبه بندی TOP500 ژوئن 2009 ، MPP است.

محاسبات شبکه ای ویرایش ]

محاسبات شبکه ای پر توزیع ترین شکل محاسبات موازی است. از کامپیوترهایی که از طریق اینترنت در ارتباط هستند برای کار بر روی یک مشکل استفاده می کند. به دلیل پهنای باند کم و تأخیر بسیار زیاد موجود در اینترنت، محاسبات توزیع شده معمولاً فقط با مشکلات موازی شرم آور سروکار دارد. بسیاری از برنامه های محاسباتی توزیع شده ایجاد شده اند که SETI@home و Folding@home شناخته شده ترین نمونه های آن هستند. [49]

اکثر برنامه‌های محاسباتی شبکه از میان‌افزار (نرم‌افزاری که بین سیستم عامل و برنامه برای مدیریت منابع شبکه و استاندارد کردن رابط نرم‌افزار قرار می‌گیرد) استفاده می‌کنند. رایج ترین میان افزار محاسباتی توزیع شده، زیرساخت باز برکلی برای محاسبات شبکه (BOINC) است. اغلب، نرم‌افزار محاسباتی توزیع‌شده از «چرخه‌های یدکی» استفاده می‌کند و محاسبات را در مواقعی که رایانه در حالت بیکار است انجام می‌دهد.

کامپیوترهای موازی تخصصی ویرایش ]

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

محاسبات قابل تنظیم مجدد با آرایه های دروازه قابل برنامه ریزی میدانی ویرایش ]

محاسبات قابل تنظیم مجدد استفاده از یک آرایه دروازه قابل برنامه ریزی میدانی (FPGA) به عنوان یک پردازشگر مشترک برای یک کامپیوتر همه منظوره است. یک FPGA در اصل یک تراشه کامپیوتری است که می تواند خود را برای یک کار مشخص دوباره سیم کشی کند.

FPGA ها را می توان با زبان های توصیف سخت افزاری مانند VHDL [50] یا Verilog برنامه ریزی کرد. [51] با این حال، برنامه نویسی در این زبان ها می تواند خسته کننده باشد. چندین فروشنده زبان‌های C به HDL را ایجاد کرده‌اند که سعی در تقلید نحو و معنای زبان برنامه‌نویسی C دارند که اکثر برنامه‌نویسان با آن آشنا هستند. شناخته شده ترین زبان های C به HDL Mitrion-C ، Impulse C ، DIME-C و Handel-C هستند. برای این منظور می توان از زیر مجموعه های خاص SystemC مبتنی بر C++ نیز استفاده کرد.

تصمیم AMD برای باز کردن فناوری HyperTransport خود برای فروشندگان شخص ثالث به فناوری توانمند برای محاسبات قابل تنظیم مجدد با عملکرد بالا تبدیل شده است. [52] به گفته مایکل R. D’Amour، مدیر عملیات شرکت DRC Computer Corporation ، “زمانی که ما برای اولین بار وارد AMD شدیم، آنها ما را ” دزدان سوکت ” نامیدند . حالا ما را شریک خود می‌خوانند». [52]

محاسبات همه منظوره بر روی واحدهای پردازش گرافیکی (GPGPU) ویرایش ]

کارت GPGPU تسلا انویدیا

محاسبات همه منظوره بر روی واحدهای پردازش گرافیکی (GPGPU) یک روند نسبتاً جدید در تحقیقات مهندسی کامپیوتر است. پردازنده‌های گرافیکی، پردازنده‌های مشترکی هستند که به شدت برای پردازش گرافیکی کامپیوتری بهینه‌سازی شده‌اند . [53] پردازش گرافیک کامپیوتری میدانی است که تحت تسلط عملیات موازی داده ها – به ویژه عملیات ماتریس جبر خطی است .

در روزهای اولیه، برنامه‌های GPGPU از APIهای گرافیکی معمولی برای اجرای برنامه‌ها استفاده می‌کردند. با این حال، چندین زبان و پلتفرم برنامه نویسی جدید برای انجام محاسبات عمومی بر روی GPU با محیط های برنامه نویسی منتشرکننده Nvidia و AMD به ترتیب با CUDA و Stream SDK ساخته شده اند. سایر زبان های برنامه نویسی GPU عبارتند از BrookGPU ، PeakStream و RapidMind . انویدیا همچنین محصولات خاصی را برای محاسبات در سری تسلا خود منتشر کرده است . کنسرسیوم فناوری Khronos Group OpenCL را منتشر کرده استمشخصات، که چارچوبی برای نوشتن برنامه هایی است که در پلتفرم های متشکل از CPU و GPU اجرا می شوند. AMD ، Apple ، Intel ، Nvidia و دیگران از OpenCL پشتیبانی می کنند.

مدارهای مجتمع ویژه برنامه ویرایش ]

چندین رویکرد مدار مجتمع ویژه برنامه کاربردی (ASIC) برای برخورد با کاربردهای موازی ابداع شده است. [54] [55] [56]

از آنجایی که یک ASIC (طبق تعریف) مختص یک برنامه خاص است، می توان آن را به طور کامل برای آن برنامه بهینه کرد. در نتیجه، برای یک برنامه خاص، یک ASIC تمایل دارد از یک کامپیوتر همه منظوره بهتر عمل کند. با این حال، ASIC ها توسط فتولیتوگرافی UV ایجاد می شوند . این فرآیند به مجموعه ای از ماسک نیاز دارد که می تواند بسیار گران باشد. یک مجموعه ماسک می تواند بیش از یک میلیون دلار آمریکا قیمت داشته باشد. [57] (هرچه ترانزیستورهای مورد نیاز برای تراشه کوچکتر باشد، ماسک گرانتر خواهد بود.) در همین حال، افزایش عملکرد در محاسبات همه منظوره در طول زمان (همانطور که توسط قانون مور توضیح داده شده است ) تمایل دارد که این دستاوردها را تنها در یک یا یک بار از بین ببرد. دو نسل تراشه [52]هزینه اولیه بالا و تمایل به سبقت گرفتن توسط محاسبات همه منظوره مبتنی بر قانون مور، ASIC ها را برای اکثر برنامه های محاسباتی موازی غیرممکن کرده است. با این حال، برخی از آنها ساخته شده است. یک مثال ماشین PFLOPS RIKEN MDGRAPE-3 است که از ASIC های سفارشی برای شبیه سازی دینامیک مولکولی استفاده می کند.

پردازشگرهای برداری ویرایش ]

Cray-1 یک پردازنده برداری است

یک پردازنده برداری یک CPU یا سیستم کامپیوتری است که می تواند همان دستورالعمل را روی مجموعه های بزرگی از داده ها اجرا کند. پردازنده های برداری دارای عملیات سطح بالایی هستند که روی آرایه های خطی اعداد یا بردارها کار می کنند. یک نمونه عملیات برداری A = B × C است که در آن A ، B و C هر یک بردارهای 64 عنصری از اعداد ممیز شناور 64 بیتی هستند . [58] آنها ارتباط نزدیکی با طبقه بندی SIMD فلین دارند. [58]

کامپیوترهای کری در دهه 1970 و 1980 به دلیل کامپیوترهای پردازش برداری خود معروف شدند. با این حال، پردازنده های برداری – هم به عنوان CPU و هم به عنوان سیستم های کامپیوتری کامل – به طور کلی ناپدید شده اند. مجموعه دستورالعمل‌های پردازنده مدرن شامل دستورالعمل‌های پردازش برداری هستند ، مانند AltiVec Freescale Semiconductor و SSE .

نرم افزار ویرایش ]

زبان های برنامه نویسی موازی ویرایش ]

زبان های برنامه نویسی همزمان ، کتابخانه ها ، API ها و مدل های برنامه نویسی موازی (مانند اسکلت های الگوریتمی ) برای برنامه نویسی کامپیوترهای موازی ایجاد شده اند. اینها را می توان به طور کلی بر اساس فرضیاتی که در مورد معماری حافظه اساسی انجام می دهند به کلاس هایی تقسیم کرد – حافظه مشترک، حافظه توزیع شده یا حافظه توزیع شده مشترک. زبان های برنامه نویسی حافظه مشترک با دستکاری متغیرهای حافظه مشترک با یکدیگر ارتباط برقرار می کنند. حافظه توزیع شده از ارسال پیام استفاده می کند . POSIX Threads و OpenMP دو مورد از پرکاربردترین APIهای حافظه مشترک هستند، در حالی که Message Passing Interface(MPI) پرکاربردترین API سیستم ارسال پیام است. [59] یکی از مفاهیمی که در برنامه نویسی برنامه های موازی استفاده می شود، مفهوم آینده است ، که در آن بخشی از یک برنامه قول می دهد که داده های مورد نیاز را به بخش دیگری از برنامه در زمان آینده ارائه دهد.

CAPS entreprise و Pathscale همچنین تلاش خود را برای تبدیل دستورالعمل های برنامه نویسی موازی چند هسته ای ترکیبی (HMPP) به استانداردی باز به نام OpenHMPP هماهنگ می کنند . مدل برنامه نویسی مبتنی بر دستور العمل OpenHMPP یک نحو برای تخلیه موثر محاسبات روی شتاب دهنده های سخت افزاری و بهینه سازی حرکت داده ها به/از حافظه سخت افزاری ارائه می دهد. دستورالعمل های OpenHMPP فراخوانی روش از راه دور (RPC) را در یک دستگاه شتاب دهنده (مثلاً GPU) یا به طور کلی مجموعه ای از هسته ها توصیف می کنند. دستورالعمل ها به C یا Fortran اشاره می کنندکدهایی برای توصیف دو مجموعه از عملکردها: بارگذاری رویه ها (کدلت های مشخص شده) بر روی یک دستگاه راه دور و بهینه سازی انتقال داده ها بین حافظه اصلی CPU و حافظه شتاب دهنده.

ظهور پردازنده‌های گرافیکی مصرف‌کننده منجر به پشتیبانی از هسته‌های محاسباتی شده است، چه در APIهای گرافیکی (که به عنوان سایه‌زن محاسباتی شناخته می‌شوند )، در APIهای اختصاصی (مانند OpenCL )، یا در برنامه‌های افزودنی زبان دیگر.

موازی سازی خودکار ویرایش ]

موازی سازی خودکار یک برنامه متوالی توسط یک کامپایلر ، ” جام مقدس” محاسبات موازی است، به ویژه با محدودیت فرکانس پردازنده که در بالا ذکر شد. علیرغم دهه ها کار محققان کامپایلر، موازی سازی خودکار موفقیت محدودی داشته است. [60]

زبان‌های برنامه‌نویسی موازی اصلی یا به طور صریح موازی یا (در بهترین حالت) تا حدی ضمنی باقی می‌مانند که در آن برنامه‌نویس دستورالعمل‌هایی را برای موازی‌سازی به کامپایلر می‌دهد . چند زبان برنامه نویسی موازی کاملاً ضمنی وجود دارد – SISAL ، Parallel Haskell ، SequenceL ، System C (برای FPGA )، Mitrion-C ، VHDL ، و Verilog .

بازرسی برنامه ویرایش ]

با افزایش پیچیدگی یک سیستم کامپیوتری، میانگین زمان بین خرابی ها معمولا کاهش می یابد. بررسی برنامه کاربردی تکنیکی است که به موجب آن سیستم کامپیوتری یک “عکس فوری” از برنامه می گیرد – رکوردی از تمام تخصیص منابع فعلی و حالت های متغیر، شبیه به یک کمپرسی اصلی -. این اطلاعات را می توان برای بازیابی برنامه در صورت خرابی رایانه استفاده کرد. بازرسی برنامه به این معنی است که برنامه باید تنها از آخرین بازرسی خود به جای شروع مجدد راه اندازی شود. در حالی که چک پوینت مزایایی را در موقعیت‌های مختلف فراهم می‌کند، به ویژه در سیستم‌های موازی با تعداد زیادی پردازنده که در محاسبات با کارایی بالا استفاده می‌شوند ، مفید است. [61]

روش های الگوریتمی ویرایش ]

همانطور که کامپیوترهای موازی بزرگتر و سریعتر می شوند، اکنون می توانیم مشکلاتی را حل کنیم که قبلاً زمان زیادی برای اجرای آنها نیاز بود. رشته‌هایی مانند بیوانفورماتیک (برای تا کردن پروتئین و تجزیه و تحلیل توالی ) و اقتصاد (برای مالی ریاضی ) از محاسبات موازی استفاده کرده‌اند. انواع رایج مشکلات در برنامه های محاسباتی موازی عبارتند از: [62]

تحمل خطا ویرایش ]

محاسبات موازی همچنین می‌تواند برای طراحی سیستم‌های کامپیوتری مقاوم به خطا ، به‌ویژه از طریق سیستم‌های lockstep که همان عملیات را به صورت موازی انجام می‌دهند، اعمال شود. این کار افزونگی را در صورت خرابی یکی از مؤلفه‌ها فراهم می‌کند و همچنین امکان تشخیص خودکار خطا و تصحیح خطا را در صورت متفاوت بودن نتایج فراهم می‌کند. از این روش ها می توان برای کمک به جلوگیری از ناراحتی های تک رویدادی ناشی از خطاهای گذرا استفاده کرد. [63] اگرچه ممکن است اقدامات اضافی در سیستم‌های تعبیه‌شده یا تخصصی مورد نیاز باشد، این روش می‌تواند یک رویکرد مقرون‌به‌صرفه برای دستیابی به افزونگی n مدولار در سیستم‌های تجاری خارج از قفسه ارائه کند.

:
[/av_textblock]

[/av_three_fifth][av_one_fifth min_height=” vertical_alignment=” space=” custom_margin=” margin=’0px’ row_boxshadow=” row_boxshadow_color=” row_boxshadow_width=’10’ link=” linktarget=” link_hover=” title_attr=” alt_attr=” padding=’0px’ highlight=” highlight_size=” border=” border_color=” radius=’0px’ column_boxshadow=” column_boxshadow_color=” column_boxshadow_width=’10’ background=’bg_color’ background_color=” background_gradient_color1=” background_gradient_color2=” background_gradient_direction=’vertical’ src=” background_position=’top left’ background_repeat=’no-repeat’ animation=” mobile_breaking=” mobile_display=” av_uid=’av-1yg37p’]

[/av_one_fifth][/av_section]

بازگشت به لیست