چندپردازنده‌های حافظه مشترک: تراشه‌های چندهسته‌ای واقعاً چگونه همکاری می‌کنند

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

چندپردازنده حافظه مشترکUMA و NUMAهماهنگی چندهسته‌ای

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۱۵ شهریور ۱۴۰۵

مدل غالب: چندپردازنده‌سازی حافظه مشترک

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

چرا حافظه مشترک برنامه‌نویسی را ساده می‌کند

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

Uniform Memory Access (UMA)

در یک طرح UMA (Uniform Memory Access)، هر هسته همان تأخیر دسترسی به هر مکانی در حافظه اصلی را تجربه می‌کند، صرف‌نظر از اینکه کدام هسته خاص درخواست را می‌دهد. این طرح از نظر مفهومی ساده است، اما مقیاس‌دهی آن به تعداد بسیار زیادی هسته دشوار می‌شود، چون همه هسته‌ها برای دسترسی به همان مسیرهای حافظه مشترک رقابت می‌کنند.

Non-Uniform Memory Access (NUMA)

یک طرح NUMA (Non-Uniform Memory Access) این مسئله مقیاس‌دهی را با تقسیم فیزیکی حافظه به مناطق، که هرکدام نزدیک‌تر به یک گروه خاص از هسته‌ها قرار دارند، حل می‌کند. یک هسته می‌تواند حافظه در منطقه نزدیک خودش را سریع‌تر از حافظه واقع نزدیک به گروه دیگری از هسته‌ها دسترسی کند، حتی اگر کل فضای حافظه همچنان به‌عنوان یک فضای آدرس یکپارچه واحد برای نرم‌افزار ظاهر شود.

UMA:
همه هسته‌ها ↔ یک حافظه مشترک واحد،
همان تأخیر صرف‌نظر از اینکه کدام هسته دسترسی می‌کند

NUMA:
گروه هسته A ↔ حافظه محلی A (دسترسی سریع)
گروه هسته B ↔ حافظه محلی B (دسترسی سریع)
گروه هسته A ↔ حافظه B (دسترسی بین‌منطقه‌ای، کندتر)

طرح‌های NUMA به تعداد بسیار بزرگ‌تری از هسته‌ها نسبت به UMA مقیاس می‌یابند، به قیمت نیاز نرم‌افزار، و گاهی صراحتاً برنامه‌نویس، به آگاهی از اینکه کدام منطقه حافظه برای بهترین کارایی "نزدیک‌تر" است.

هماهنگی کار در سراسر هسته‌ها

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

چرا درک این تمایز اهمیت دارد

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

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

تصورات غلط رایج درباره محاسبات موازی و درس‌های نهایی کتاب

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

ادامه

واقعیت‌های عملی: بنچمارک CPU در مقابل GPU و ضرب ماتریس چندپردازنده‌ای

مقایسه منصفانه یک CPU و یک GPU نیازمند مدلی است که هم توان عملیاتی محاسباتی و هم محدودیت‌های پهنای باند حافظه را با هم در نظر بگیرد. این مقاله مدل roofline مورد استفاده برای مقایسه سخت‌افزار واقعی مانند Intel Core i7 و NVIDIA Tesla GPU را معرفی می‌کند، سپس نشان می‌دهد ضرب ماتریس چگونه در سراسر چند پردازنده تسریع می‌شود، به‌عنوان کاربرد عملی نهایی مفاهیم موازی این فصل.

ادامه

بنچمارک کردن چندپردازنده‌ها و مدل‌سازی کارایی موازی

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

ادامه

شبکه‌سازی کلاستر: ارتباط با دنیای بیرون

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

ادامه

کلاسترها، کامپیوترهای در مقیاس انبار، و توپولوژی‌های شبکه

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

ادامه

مقدمه‌ای بر GPU: موازی‌سازی عظیم برای بارهای کاری سنگین از نظر داده

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

ادامه