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

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

معماری GPUموازی‌سازی عظیم دادهاجرای رشته GPU

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

چرا GPU ها این‌قدر با CPU متفاوت به‌نظر می‌رسند

یک CPU، همان‌طور که در سراسر بیشتر این مجموعه پوشش داده شد، برای اجرای تعداد کمی جریان دستوری پیچیده و مستقل با بیشترین سرعت ممکن بهینه‌شده، با استفاده از تکنیک‌هایی مانند اجرای out-of-order و پیش‌بینی شاخه که پیش‌تر بحث شد. یک GPU (Graphics Processing Unit) رویکردی تقریباً مخالف را اتخاذ می‌کند: پیچیدگی هر جریان اجرای منفرد را فدا می‌کند در ازای اجرای تعداد عظیمی رشته ساده و هم‌زمان.

منشأ: رندر گرافیک به‌عنوان موازی‌سازی عظیم داده

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

مدل اجرای GPU: رشته‌های سازمان‌یافته در گروه‌ها

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

رویکرد CPU: تعداد کمی هسته پیچیده،
هرکدام اجراکننده یک جریان دستوری متفاوت و مستقل

رویکرد GPU: هزاران هسته ساده،
گروه‌های بزرگ که همان دستور را
به‌طور هم‌زمان روی داده متفاوت اجرا می‌کنند

چرا این طراحی انعطاف‌پذیری را با توان عملیاتی مبادله می‌کند

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

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

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

چرا GPU ها به مرکز محاسبات مدرن تبدیل شده‌اند

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

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

مقالات مرتبط

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه

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

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

ادامه