چرا مقایسه یک 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 برای رعایت سلسلهمراتب حافظه، و اکنون موازیسازی چندپردازندهای در سراسر بسیاری هسته یا ماشین مستقل، که نشان میدهد مفاهیم لایهای هر فصل این کتاب چگونه در یک محاسبه واحد و از نظر عملی مهم با هم کار میکنند.