گرافیک کامپیوتری به سبکِ تِرِد گرافیک کامپیوتری به سبکِ تِرِد



شما این تِرِد رو مطالعه کردید آفرین.🍻
اوپس: تصویر 502
جسی ساما 1405/5/18

آناتومی GPU آموزش و یادگیری آناتومی GPU به صورت رایگان

داخل GPU چه خبره؟

توی تِرِد قبلی فهمیدیم که یکی از دلایل اصلی استفاده از GPU اینه که خیلی از محاسبات Graphics قابلیت پردازش موازی دارن.

اما حالا یه سؤال مهم‌تر داریم:

این محاسبات موازی دقیقاً کجای GPU انجام می‌شن؟

اصلاً وقتی یه برنامه به GPU می‌گه:

“این مدل سه‌بعدی رو بگیر و Render کن.”

چه اتفاقی داخل GPU می‌افته؟


برای جواب دادن به این سؤال، اول باید یه تصویر کلی از فرآیند هایی که داخل GPU وجود دارن، داشته باشیم.


ما سه بخش اصلی داریم که به عنوان برنامه نویس گرافیک نیاز داریم باهاشون آشنا بشیم:

  1. Command Processing | پردازش فرمان ها

    اول از همه، GPU باید بدونه چه کاری باید انجام بده.

    برنامه‌ی ما یک سری دستور و دیتا به GPU می‌فرسته و GPU اون‌ها رو برای اجرا آماده می‌کنه.

    مثلاً:

    • این Vertex رو پردازش کن.
    • این Triangle رو Render کن.
    • از این Shader استفاده کن.
  2. GPU Memory | حافظه جی پی یو

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

    اینجاست که GPU Memory وارد ماجرا می‌شه.

    بعداً یک تِرِد کامل رو به حافظه و انتقال داده بین CPU و GPU اختصاص می‌دیم.

  3. Compute Units | واحد های محاسباتی

    خب، بالاخره محاسبات کجا انجام می‌شن؟

    GPU منابع محاسباتی زیادی داره که می‌تونن تعداد زیادی عملیات رو به‌صورت موازی اجرا کنن.

    به‌صورت کلی می‌تونیم این منابع رو Compute Units در نظر بگیریم.

    البته اسم و ساختار دقیق این واحدها بین معماری‌های مختلف فرق می‌کنه، ولی فعلاً همین رو بدونیم که:

    بخش بزرگی از قدرت پردازشی GPU از همین پردازش موازی میاد.

حالا می‌رسیم به بخش مهم‌تر داستان.

وقتی می‌گیم:

“این مدل سه‌بعدی رو Render کن.”

داده‌ی ما یک‌دفعه تبدیل به تصویر نمی‌شه.

از چند مرحله عبور می‌کنه. که هرکدوم یه فرآیندی رو اجرا میکنن. مثل خط تولید کارخونه…

به این مسیر می‌گیم: Graphics Pipeline


در ساده‌ترین حالت می‌تونیم سه مرحله‌ی مهمش رو این‌طور در نظر بگیریم:

  1. Vertex Processing | پردازش رأس‌ها
    اینجا رأس(Vertex) های اشکال ما پردازش می‌شن و موقعیتشون برای مراحل بعدی آماده می‌شه.
  2. Rasterization | رسترایزیشن

    اینجا اشکال(Geometry) ما به قطعه(Fragment) هایی تبدیل میشن که مشخص می‌کنن کدوم قسمت‌های صفحه تحت تأثیر شکل ما قرار گرفتن. تا پیکسل های مربوطه شکل بگیرن.


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

  3. Fragment / Pixel Processing | پردازش فرگمنت‌ها / پیکسل‌ها
    حالا که فرگمنت(Fragment) ها مشخص شدن… در این مرحله مشخص می‌کنیم قطعه(Fragment) ها در نهایت چه نتیجه‌ای در تصویر داشته باشن؛ مثلاً چه رنگی داشته باشن، چه Texture ای روی اون‌ها اعمال بشه و نور چطور روی اون‌ها تأثیر بذاره.

(مراحل قابل برنامه ریزی در GPU، با متن Programmable. و مراحل کاملا فیکس و غیر قابل برنامه ریزی با Fixed مشخص شدن.)

این سه مرحله یک دید کلی از Graphics Pipeline هستن و در ادامه‌ی دوره با جزئیات خیلی بیشتری باهاشون آشنا می‌شیم.


نکته: اگه هیچ ایده ای راجب این اصطلاحاتی که به کار بردیم ندارین، نگران نباشین!
کاملا عادیه!
فعلا فقط هدف اینه با اسمشون آشنا باشید. در آینده کامل درکشون می کنید…


نکته
GPU های واقعی خیلی پیچیده‌تر هستن و معماری هر شرکت هم با دیگری فرق داره ولی نگران نباشید. همه مسائلی که راجبشون صحبت کردیم جز مسائل سطح بالا (High-level) هستن و تو تمام کارت های گرافیک مدرن مشترک ان.

حالا که یک تصویر کلی از GPU و Graphics Pipeline داریم، یه سؤال مهم باقی می‌مونه:

این ورتکس ها، تکستچر ها و بقیه‌ی داده‌ها، کجای GPU قرار داده و نگهداری میشن؟

برای جواب این سؤال، توی تِرِد بعدی می‌ریم سراغ:

GPU Memory


(اگه این تِرِد برات واقعا سنگین بوده به خودت سخت نگیر! الان یکی از موضوعات چالشی رو توی گرافیک کامپیوتری خوندی. درک کاملش زمان میبره. تِرِد بعدی اخرین ترد سخت این بخشه. بعدش میوفتیم تو سر پایینی. دووم بیار!)

شماره تِرِد : شماره 2 از 6

نظرات