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

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

ضرب ماتریس موازیمدل Rooflineبنچمارک CPU در مقابل GPU

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

چرا مقایسه یک CPU و یک GPU ساده نیست

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

مدل Roofline

Roofline Model دقیقاً همین نوع مقایسه متوازن را فراهم می‌کند، و کارایی قابل‌دستیابی را در برابر Arithmetic Intensity یک بار کاری، یعنی نسبت عملیات‌های محاسباتی انجام‌شده به‌ازای هر بایت داده جابه‌جاشده از حافظه، ترسیم می‌کند.

دو سقف کارایی:
1. توان عملیاتی محاسباتی اوج
   (محدود توسط ALU های موجود و سرعت ساعت)
2. پهنای باند حافظه اوج
   (محدود توسط اینکه چقدر سریع داده می‌تواند از حافظه جابه‌جا شود)

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

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

مقایسه Intel Core i7 960 و NVIDIA Tesla GPU

به‌کارگیری مدل roofline روی سخت‌افزار واقعی، مانند Intel Core i7 960 و یک NVIDIA Tesla GPU، نشان می‌دهد هیچ پردازنده‌ای به‌طور جهانی برتر نیست. تعداد عظیم هسته‌های ساده GPU، که پیش‌تر در این مجموعه بحث شد، به آن سقف توان عملیاتی محاسباتی اوج بسیار بالاتری می‌دهد، که آن را برای بارهای کاری با شدت محاسباتی بالا و موازی‌سازی داده فراوان انتخاب بهتری می‌کند، در حالی که طراحی پیچیده‌تر هر-هسته CPU، شامل اجرای out-of-order و پیش‌بینی شاخه که پیش‌تر در این مجموعه بحث شد، آن را برای بارهای کاری با شدت محاسباتی پایین‌تر یا شاخه‌زنی قابل‌توجه و وابستگی‌های پی‌درپی مناسب‌تر می‌کند.

به‌کارگیری این مفاهیم: ضرب ماتریس در سراسر چند پردازنده

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

پی‌درپی: یک پردازنده تمام ردیف‌های
ماتریس نتیجه را محاسبه می‌کند

موازی در سراسر پردازنده‌ها: هر پردازنده
یک زیرمجموعه مجزا از ردیف‌ها را محاسبه می‌کند،
همه به‌طور هم‌زمان روی ماتریس‌های مشترک کار می‌کنند

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

چرا این ترکیب تکنیک‌ها اهمیت دارد

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

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

مقالات مرتبط

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه