محصول به سبد خرید افزوده شد!
زمان مطالعه : 784 دقیقه

کارت گرافیک چیست؟ GPU چیست ؟ راهنمای جامع شناخت پردازنده گرافیکی

انتشار : 4 مرداد , 1404
آخرین بروزرسانی : 12 مرداد , 1405
کارت گرافیک GPU چیست؟


دانشنامه سخت‌افزار استوک‌شاپ

کارت گرافیک چیست؟ آشنایی کامل با GPU و کاربردهای آن

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


تعریف ساده GPU


گرافیک مجتمع و مجزا


آشنایی با VRAM

خلاصه مقاله کارت گرافیک


کارت گرافیک در یک نگاه

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

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

فهرست مطالب

کارت گرافیک چیست؟

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

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

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

پردازش تصویر

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

تولید فریم

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

محاسبات موازی

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


آیا کارت گرافیک همیشه یک قطعه جداگانه است؟

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

GPU چیست؟

GPU مخفف عبارت
Graphics Processing Unit
و به معنی «پردازنده گرافیکی» است. این پردازنده برای انجام
تعداد زیادی محاسبه مشابه به‌صورت هم‌زمان طراحی شده است و
نقش اصلی را در پردازش تصویر، تولید فریم، رندر سه‌بعدی و
بسیاری از محاسبات موازی بر عهده دارد.

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

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


موازی


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


سریع


پردازش داده‌های تصویری و گرافیکی


گسترده


کاربرد در بازی، رندر، تدوین و هوش مصنوعی

GPU چگونه تصویر را پردازش می‌کند؟


مرحله ۱


دریافت داده‌ها و دستورها

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


مرحله ۲


دسترسی به داده‌های موردنیاز

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


مرحله ۳


پردازش موازی

واحدهای پردازشی GPU محاسبات مربوط به هندسه،
نورپردازی، سایه‌ها، رنگ، بافت و افکت‌های تصویری
را به‌صورت هم‌زمان انجام می‌دهند.


مرحله ۴


تولید خروجی

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


تفاوت GPU و کارت گرافیک

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

تفاوت GPU و کارت گرافیک چیست؟

اصطلاح‌های
GPU
و «کارت گرافیک» در گفت‌وگوهای روزمره گاهی به‌جای
یکدیگر استفاده می‌شوند؛ اما از نظر فنی، مفهوم یکسانی
ندارند.

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

GPU

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

کارت گرافیک

  • یک قطعه یا مجموعه سخت‌افزاری کامل است.
  • پردازنده گرافیکی را همراه با قطعات جانبی
    در خود جای می‌دهد.
  • معمولاً شامل VRAM، مدار تغذیه، برد
    الکترونیکی، سیستم خنک‌کننده و خروجی‌های
    تصویر است.
  • در مدل‌های مجزا معمولاً از طریق رابط
    PCI Express
    به مادربرد متصل می‌شود.
  • ممکن است برای تأمین انرژی به کابل برق
    جداگانه از منبع تغذیه نیاز داشته باشد.
مقایسه GPU و کارت گرافیک
معیار GPU کارت گرافیک
ماهیت تراشه پردازشی مجموعه سخت‌افزاری کامل
وظیفه اصلی انجام محاسبات گرافیکی و موازی فراهم‌کردن بستر کامل برای پردازش و خروجی
تصویر
حافظه به حافظه در دسترس خود وابسته است در مدل‌های مجزا معمولاً VRAM اختصاصی دارد
محل قرارگیری روی کارت گرافیک یا داخل مجموعه پردازشی
سیستم
روی مادربرد، داخل دستگاه یا به‌صورت
اکسترنال
امکان استفاده مستقل خیر همراه با سایر اجزای سیستم قابل‌استفاده است


یک مثال ساده

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


یک نکته درباره گرافیک مجتمع

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

وظیفه کارت گرافیک چیست؟

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

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

تولید خروجی تصویر

کارت گرافیک تصاویر و فریم‌های پردازش‌شده را
برای نمایش روی مانیتور آماده می‌کند و از طریق
درگاه‌هایی مانند
HDMI
یا
DisplayPort
به نمایشگر می‌فرستد.

اجرای بازی‌ها

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

تدوین و پردازش ویدئو

کارت گرافیک می‌تواند پخش تایم‌لاین، اجرای
افکت‌ها، اصلاح رنگ، رمزگذاری و رمزگشایی ویدئو
و خروجی گرفتن از پروژه‌های تدوین را سریع‌تر کند.

طراحی و رندر سه‌بعدی

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

محاسبات موازی

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

هوش مصنوعی و یادگیری ماشین

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


آیا همه کاربران به کارت گرافیک مجزا نیاز دارند؟

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


عملکرد فقط به کارت گرافیک وابسته نیست

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

کارت گرافیک چگونه کار می‌کند؟

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

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

این فرایند هنگام اجرای بازی یا نمایش محتوای متحرک، در
هر ثانیه بارها تکرار می‌شود. هرچه کارت گرافیک بتواند
فریم‌های بیشتری را در زمان کوتاه‌تر تولید کند، حرکت
تصویر معمولاً روان‌تر دیده می‌شود.


مرحله ۱


دریافت دستورها

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


مرحله ۲


انتقال داده‌ها به VRAM

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


مرحله ۳


پردازش هندسه

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


مرحله ۴


پردازش نور و بافت

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


مرحله ۵


تولید فریم

نتیجه محاسبات به یک تصویر کامل تبدیل می‌شود.
به هر تصویر کامل که برای نمایش آماده می‌شود،
یک فریم گفته می‌شود.


مرحله ۶


ارسال تصویر به نمایشگر

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

فریم چیست؟

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


۳۰ FPS


سی فریم در هر ثانیه


۶۰ FPS


شصت فریم در هر ثانیه


۱۲۰ FPS


صدوبیست فریم در هر ثانیه


نرخ فریم یا FPS چیست؟

عبارت
FPS
مخفف
Frames Per Second
است و تعداد فریم‌هایی را نشان می‌دهد که در هر ثانیه
تولید یا نمایش داده می‌شوند. نرخ فریم بالاتر معمولاً
باعث روان‌تر دیده‌شدن حرکت‌ها می‌شود؛ البته نمایشگر
نیز باید نرخ نوسازی مناسب داشته باشد.


نقش CPU در این فرایند

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


نرخ فریم بالا همیشه به معنی تصویر بهتر نیست

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

اجزای اصلی کارت گرافیک

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

کیفیت طراحی و هماهنگی این اجزا بر عملکرد، دما، مصرف برق،
پایداری و طول عمر کارت گرافیک اثر می‌گذارد.

پردازنده گرافیکی یا GPU

GPU مهم‌ترین تراشه کارت گرافیک است و محاسبات
گرافیکی، تولید فریم، پردازش بافت، نورپردازی و
بسیاری از پردازش‌های موازی را انجام می‌دهد.

حافظه گرافیکی یا VRAM

حافظه گرافیکی داده‌هایی مانند بافت‌ها، مدل‌ها،
فریم‌ها و اطلاعات موردنیاز GPU را به‌طور موقت
نگهداری می‌کند.

برد مدار چاپی یا PCB

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

مدار تنظیم ولتاژ یا VRM

مدار تغذیه، برق دریافتی را به ولتاژ مناسب و پایدار
برای GPU و حافظه تبدیل می‌کند. کیفیت این بخش در
پایداری کارت اهمیت زیادی دارد.

سیستم خنک‌کننده

سیستم خنک‌کننده گرمای تولیدشده توسط GPU، حافظه و
مدار تغذیه را دفع می‌کند و معمولاً شامل هیت‌سینک،
فن، لوله حرارتی و پد یا خمیر حرارتی است.

خروجی‌های تصویر

درگاه‌هایی مانند
HDMI
و
DisplayPort
برای انتقال تصویر و صدا به مانیتور یا تلویزیون
استفاده می‌شوند.

رابط PCI Express

کارت گرافیک مجزا معمولاً از طریق رابط
PCI Express
روی مادربرد نصب می‌شود و داده‌ها را از این مسیر
با سیستم مبادله می‌کند.

کانکتورهای برق

کارت‌های کم‌مصرف ممکن است برق خود را مستقیماً
از اسلات مادربرد دریافت کنند؛ اما مدل‌های قوی‌تر
معمولاً به کابل برق جداگانه از پاور نیاز دارند.

صفحه پشتی یا Backplate

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

پردازنده گرافیکی

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

مقایسه تعداد هسته‌های پردازشی فقط زمانی قابل‌اعتماد است
که کارت‌ها از معماری مشابه استفاده کنند. تعداد هسته بیشتر
در دو معماری متفاوت لزوماً به معنی عملکرد بهتر نیست.

حافظه گرافیکی

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

ظرفیت VRAM تنها معیار سرعت نیست. نوع حافظه، سرعت مؤثر،
پهنای رابط حافظه، پهنای باند و معماری GPU نیز بر عملکرد
واقعی اثر می‌گذارند.

مدار تغذیه کارت گرافیک

منبع تغذیه کامپیوتر برق را در اختیار کارت قرار می‌دهد؛
اما GPU و تراشه‌های حافظه به ولتاژهای دقیق و کنترل‌شده
نیاز دارند. مدار VRM این تبدیل و تنظیم را انجام می‌دهد.

طراحی مناسب مدار تغذیه باعث می‌شود کارت در بار پردازشی
سنگین، پایدارتر کار کند. دمای مدار تغذیه نیز باید توسط
سیستم خنک‌کننده کنترل شود.

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

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

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

نقش اجزای اصلی کارت گرافیک
قطعه وظیفه اصلی تأثیر بر عملکرد
GPU انجام محاسبات گرافیکی و موازی تعیین بخش اصلی توان پردازشی
VRAM نگهداری موقت داده‌های گرافیکی اثر بر اجرای بافت‌ها، وضوح بالا و
پروژه‌های سنگین
VRM تنظیم و تثبیت ولتاژ اثر بر پایداری، دما و توان مصرفی
سیستم خنک‌کننده دفع گرمای قطعات اثر بر دما، نویز و حفظ فرکانس کاری
PCB اتصال الکتریکی و نگهداری قطعات اثر بر کیفیت ساخت و پایداری کلی
خروجی تصویر انتقال تصویر و صدا به نمایشگر تعیین نوع، تعداد و قابلیت اتصال نمایشگرها


آیا همه کارت‌های دارای GPU یکسان، عملکرد یکسانی دارند؟

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


درباره بازکردن سیستم خنک‌کننده

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

انواع کارت گرافیک

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

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

گرافیک مجتمع

گرافیک مجتمع یا
Integrated Graphics
معمولاً داخل پردازنده مرکزی یا مجموعه پردازشی
اصلی دستگاه قرار دارد و از بخشی از حافظه RAM
سیستم استفاده می‌کند.

این نوع گرافیک برای وب‌گردی، پخش فیلم، کارهای
اداری، آموزش، برنامه‌نویسی و برخی بازی‌های سبک
مناسب است.

کارت گرافیک مجزا

کارت گرافیک مجزا یا
Dedicated Graphics Card
دارای GPU، حافظه گرافیکی، مدار تغذیه و سیستم
خنک‌کننده مستقل است.

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

کارت گرافیک گیمینگ

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

خانواده‌هایی مانند
NVIDIA GeForce
و
AMD Radeon
در این گروه قرار می‌گیرند.

کارت گرافیک ورک‌استیشن

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

خانواده
NVIDIA Quadro
که بسیاری از مدل‌های جدیدتر آن با نام
NVIDIA RTX Professional
شناخته می‌شوند، یکی از معروف‌ترین گروه‌های
کارت گرافیک ورک‌استیشن است.

کارت‌های حرفه‌ای AMD

خانواده
AMD Radeon Pro
برای ایستگاه‌های کاری، طراحی مهندسی، مدل‌سازی،
تولید محتوا و برخی محیط‌های سازمانی عرضه می‌شود.

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

شتاب‌دهنده‌های دیتاسنتر

شتاب‌دهنده‌های دیتاسنتر برای هوش مصنوعی،
یادگیری ماشین، محاسبات علمی، شبیه‌سازی و پردازش
حجم بزرگی از داده طراحی می‌شوند.

این محصولات معمولاً برای نصب در سرورها ساخته
شده‌اند و ممکن است خروجی تصویر مستقیم یا طراحی
مناسب استفاده در کامپیوتر شخصی نداشته باشند.

پردازنده گرافیکی لپ‌تاپ

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

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

کارت گرافیک اکسترنال

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

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

گرافیک مجتمع چیست؟

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

مزیت اصلی گرافیک مجتمع، مصرف برق کمتر، قیمت پایین‌تر،
گرمای کمتر و اشغال فضای محدودتر است. این ویژگی‌ها باعث
شده‌اند گرافیک مجتمع در لپ‌تاپ‌های سبک، سیستم‌های اداری
و کامپیوترهای کم‌مصرف کاربرد زیادی داشته باشد.

کارت گرافیک مجزا چیست؟

کارت گرافیک مجزا قطعه‌ای مستقل است که معمولاً روی اسلات
PCI Express
مادربرد نصب می‌شود. این کارت حافظه گرافیکی اختصاصی و
سیستم خنک‌کننده خود را دارد.

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

کارت گرافیک Quadro چیست؟

نام
Quadro
سال‌ها برای کارت‌های گرافیک حرفه‌ای و ورک‌استیشن
NVIDIA استفاده می‌شد. این کارت‌ها برای کاربران فعال
در حوزه‌هایی مانند طراحی صنعتی، معماری، مهندسی،
مدل‌سازی سه‌بعدی، تولید انیمیشن و تصویرسازی حرفه‌ای
طراحی شده بودند.

بسیاری از کارت‌های حرفه‌ای جدید NVIDIA با نام‌هایی
در خانواده
NVIDIA RTX Professional
عرضه می‌شوند؛ بااین‌حال اصطلاح Quadro همچنان در بازار،
میان کاربران و برای اشاره به کارت‌های حرفه‌ای قدیمی‌تر
بسیار رایج است.

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


گواهی ISV چیست؟

عبارت
ISV
مخفف
Independent Software Vendor
است. در برخی سیستم‌های حرفه‌ای، سازنده نرم‌افزار
عملکرد و سازگاری سخت‌افزار یا درایور را برای استفاده
در برنامه خود بررسی و تأیید می‌کند.

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

Quadro برای چه نرم‌افزارهایی استفاده می‌شود؟

کارت‌های Quadro و RTX Professional می‌توانند برای
نرم‌افزارهای طراحی مهندسی، معماری، مدل‌سازی، انیمیشن،
شبیه‌سازی و تولید محتوای حرفه‌ای مناسب باشند.

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


Quadro لزوماً برای بازی بهتر نیست

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

مزیت اصلی Quadro یا RTX Professional بیشتر در
درایورهای حرفه‌ای، پایداری، قابلیت‌های سازمانی و
سازگاری با نرم‌افزارهای تخصصی دیده می‌شود.

تفاوت کلی کارت گیمینگ و کارت ورک‌استیشن

مقایسه کلی کارت گرافیک گیمینگ و ورک‌استیشن
معیار کارت گیمینگ کارت ورک‌استیشن
کاربرد اصلی اجرای بازی و کاربردهای عمومی طراحی، مهندسی و پردازش حرفه‌ای
خانواده‌های رایج GeForce و Radeon Quadro، NVIDIA RTX Professional و
Radeon Pro
اولویت طراحی نرخ فریم، امکانات گیمینگ و ارزش خرید پایداری، سازگاری و قابلیت‌های حرفه‌ای
نوع درایور بهینه‌شده برای بازی‌ها و برنامه‌های عمومی بهینه‌شده برای برخی نرم‌افزارهای تخصصی
گواهی نرم‌افزاری معمولاً اولویت اصلی نیست ممکن است برای برخی نرم‌افزارهای حرفه‌ای
دارای تأییدیه باشد
قیمت معمولاً اقتصادی‌تر نسبت به توان گیمینگ معمولاً گران‌تر به دلیل بازار و قابلیت‌های
تخصصی
مناسب برای بازی بله قابل‌استفاده است، اما معمولاً انتخاب
اقتصادی اول نیست


انتخاب نوع کارت بر اساس نیاز

برای استفاده روزمره و کارهای سبک، گرافیک مجتمع ممکن
است کافی باشد. برای بازی معمولاً کارت گیمینگ انتخاب
مناسب‌تری است. برای نرم‌افزارهای مهندسی و پروژه‌های
سازمانی نیز باید سازگاری برنامه با کارت‌های Quadro،
RTX Professional یا Radeon Pro بررسی شود.


نام گروه کارت به‌تنهایی کافی نیست

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

تفاوت گرافیک مجتمع و کارت گرافیک مجزا

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

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

گرافیک مجتمع

گرافیک مجتمع یا
Integrated Graphics
درون پردازنده مرکزی یا مجموعه پردازشی دستگاه
قرار دارد و معمولاً از بخشی از حافظه RAM سیستم
استفاده می‌کند.

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

کارت گرافیک مجزا

کارت گرافیک مجزا یا
Dedicated Graphics Card
قطعه‌ای مستقل است که GPU، حافظه VRAM، مدار تغذیه
و سیستم خنک‌کننده اختصاصی دارد.

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

تفاوت در نوع حافظه

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

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


اهمیت حافظه دوکاناله برای گرافیک مجتمع

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

تفاوت در قدرت پردازش

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

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

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

تفاوت در مصرف برق و تولید گرما

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

کارت گرافیک مجزا، به‌خصوص در مدل‌های قدرتمند، ممکن است
مقدار قابل‌توجهی برق مصرف کند. به همین دلیل به منبع
تغذیه مناسب، جریان هوای کافی و سیستم خنک‌کننده قوی‌تر
نیاز دارد.

تفاوت در قابلیت ارتقا

در کامپیوترهای رومیزی، کارت گرافیک مجزا را معمولاً
می‌توان از اسلات مادربرد خارج و با مدل دیگری جایگزین
کرد؛ البته سازگاری پاور، کیس و مادربرد باید بررسی شود.

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


وضعیت لپ‌تاپ‌ها متفاوت است

پردازنده گرافیکی مجزای بیشتر لپ‌تاپ‌ها مستقیماً روی
مادربرد نصب شده است و مانند کارت گرافیک کامپیوتر
رومیزی قابل تعویض نیست. بنابراین وجود GPU مجزا در
لپ‌تاپ لزوماً به معنی قابلیت ارتقای آن نیست.

تفاوت در قیمت

استفاده از گرافیک مجتمع هزینه کلی سیستم را کاهش می‌دهد؛
زیرا کاربر برای دریافت خروجی تصویر و انجام کارهای سبک
مجبور به خرید یک کارت مستقل نیست.

کارت گرافیک مجزا هزینه جداگانه‌ای دارد و ممکن است خرید
پاور قوی‌تر، کیس بزرگ‌تر یا سیستم خنک‌کننده بهتر را نیز
ضروری کند.

تفاوت در کاربرد

مقایسه گرافیک مجتمع و کارت گرافیک مجزا
معیار گرافیک مجتمع کارت گرافیک مجزا
محل قرارگیری درون پردازنده یا تراشه اصلی قطعه‌ای مستقل یا GPU مجزای نصب‌شده روی
مادربرد
حافظه معمولاً مشترک با RAM سیستم حافظه اختصاصی VRAM
قدرت پردازشی مناسب استفاده سبک تا متوسط مناسب استفاده متوسط تا بسیار سنگین
مصرف برق معمولاً کمتر معمولاً بیشتر
تولید گرما کمتر بیشتر و نیازمند خنک‌کننده مستقل
قابلیت ارتقا به‌صورت مستقل قابل ارتقا نیست در بیشتر کامپیوترهای رومیزی قابل تعویض است
قیمت سیستم اقتصادی‌تر گران‌تر
بازی مناسب بازی‌های سبک و برخی عناوین رقابتی مناسب بازی‌های سنگین و تنظیمات بالاتر
تدوین و رندر مناسب پروژه‌های سبک مناسب پروژه‌های حرفه‌ای و سنگین
هوش مصنوعی محدود و وابسته به سخت‌افزار و نرم‌افزار مناسب‌تر برای مدل‌ها و پردازش‌های سنگین

آیا می‌توان از گرافیک مجتمع و مجزا هم‌زمان استفاده کرد؟

در برخی سیستم‌ها هر دو پردازنده گرافیکی فعال هستند.
سیستم‌عامل یا نرم‌افزار می‌تواند کارهای سبک را به گرافیک
مجتمع و پردازش‌های سنگین را به GPU مجزا واگذار کند.

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


گرافیک هیبریدی چیست؟

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

برای نرم‌افزارهای مهندسی کدام بهتر است؟

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

در محیط‌های حرفه‌ای، انتخاب میان کارت‌های گیمینگ و
کارت‌های ورک‌استیشن مانند
NVIDIA Quadro
یا
NVIDIA RTX Professional
باید بر اساس نرم‌افزار مورد استفاده، اندازه پروژه و
فهرست سخت‌افزارهای تأییدشده انجام شود.

کارت‌های Quadro و RTX Professional ممکن است برای برخی
نرم‌افزارهای
CAD
و مهندسی، درایورهای اعتبارسنجی‌شده، پایداری بیشتر و
قابلیت‌های تخصصی ارائه کنند؛ اما این مزایا در همه
نرم‌افزارها و همه پروژه‌ها یکسان نیست.


چه زمانی گرافیک مجتمع کافی است؟

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


تصمیم‌گیری فقط بر اساس عبارت «مجزا» اشتباه است

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

مهم‌ترین مشخصات کارت گرافیک

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

ممکن است یک کارت با حافظه بیشتر، در عمل از کارتی با
حافظه کمتر ضعیف‌تر باشد؛ زیرا ظرفیت VRAM فقط یکی از
مشخصات مؤثر بر عملکرد است.

مدل و معماری GPU

مدل پردازنده گرافیکی و معماری آن از مهم‌ترین
عوامل تعیین‌کننده توان کارت هستند. معماری‌های
جدیدتر معمولاً کارایی بهتر، مصرف برق بهینه‌تر
و قابلیت‌های پیشرفته‌تری ارائه می‌کنند.

ظرفیت حافظه VRAM

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

نوع حافظه گرافیکی

حافظه‌هایی مانند
GDDR5،
GDDR6،
GDDR6X
و
HBM
از نظر سرعت، مصرف برق و ساختار با یکدیگر تفاوت
دارند.

پهنای رابط حافظه

رابط حافظه با واحد بیت بیان می‌شود و یکی از
عوامل مؤثر بر مقدار داده‌ای است که میان VRAM و
GPU جابه‌جا می‌شود.

پهنای باند حافظه

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

فرکانس GPU

فرکانس کاری نشان‌دهنده سرعت فعالیت تراشه است؛
اما مقایسه مستقیم فرکانس میان معماری‌های متفاوت
همیشه تصویر دقیقی از عملکرد ارائه نمی‌دهد.

واحدهای پردازشی

GPUها شامل تعداد زیادی واحد پردازشی موازی هستند.
نام و ساختار این واحدها میان شرکت‌ها و معماری‌های
مختلف متفاوت است.

توان مصرفی

توان مصرفی تقریبی کارت بر انتخاب منبع تغذیه،
تعداد کانکتورهای برق، تولید گرما و نیاز به
خنک‌کنندگی اثر می‌گذارد.

طراحی سیستم خنک‌کننده

تعداد فن‌ها، ابعاد هیت‌سینک، نوع لوله‌های حرارتی
و کیفیت تماس حرارتی بر دما، نویز و پایداری
فرکانس کارت اثر دارند.

درگاه‌های خروجی

نوع و تعداد خروجی‌های
HDMI،
DisplayPort
یا سایر رابط‌ها، تعداد و نوع نمایشگرهای قابل
اتصال را تعیین می‌کند.

ابعاد کارت

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

رابط PCI Express

کارت‌های گرافیک دسکتاپ معمولاً از رابط
PCI Express
استفاده می‌کنند. نسل و تعداد مسیرهای فعال این
رابط می‌تواند بر پهنای باند ارتباط کارت با سیستم
اثر بگذارد.

معماری GPU چیست؟

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

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

تعداد هسته‌های GPU

شرکت‌های مختلف برای واحدهای پردازشی خود نام‌های متفاوتی
به کار می‌برند. در محصولات NVIDIA اصطلاح
CUDA Core
رایج است و AMD نیز از واحدهای پردازشی متناسب با معماری
محصولات خود استفاده می‌کند.

تعداد بیشتر این واحدها فقط در شرایطی معیار مقایسه مناسبی
است که دو GPU از معماری نزدیک یا یکسان استفاده کنند.
مقایسه مستقیم تعداد هسته‌های دو برند یا دو نسل متفاوت
معمولاً گمراه‌کننده است.


هسته‌های GPU با هسته‌های CPU یکسان نیستند

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

حافظه VRAM

VRAM برای نگهداری بافت‌ها، فریم‌ها، مدل‌ها، اطلاعات
هندسی و داده‌هایی استفاده می‌شود که GPU باید با سرعت
به آن‌ها دسترسی داشته باشد.

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

کمبود VRAM ممکن است باعث افت عملکرد، بارگذاری دیرهنگام
بافت‌ها، توقف‌های کوتاه یا انتقال مداوم داده میان حافظه
سیستم و حافظه کارت شود.


حافظه بیشتر همیشه به معنی کارت سریع‌تر نیست

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

نوع حافظه و پهنای باند

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

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

فرکانس پایه و فرکانس افزایشی

GPU ممکن است دارای فرکانس پایه و فرکانس افزایشی یا
Boost Clock
باشد. فرکانس واقعی هنگام کار با توجه به دما، توان مصرفی،
محدودیت‌های بایوس و میزان بار پردازشی تغییر می‌کند.

کارت‌هایی که خنک‌کننده و مدار تغذیه مناسب‌تری دارند،
معمولاً می‌توانند فرکانس افزایشی را برای مدت بیشتری حفظ
کنند.

توان مصرفی و منبع تغذیه

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

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


از کابل نامناسب استفاده نکنید

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

مشخصات مهم در کارت‌های Quadro و RTX Professional

هنگام بررسی کارت‌های حرفه‌ای مانند
NVIDIA Quadro
و
NVIDIA RTX Professional
نباید فقط قدرت خام GPU را مقایسه کرد. نوع درایور،
سازگاری با نرم‌افزارهای تخصصی و قابلیت‌های حرفه‌ای نیز
اهمیت زیادی دارند.

ظرفیت بالای VRAM در پروژه‌های بزرگ
CAD،
مدل‌های صنعتی، صحنه‌های سه‌بعدی پیچیده و پردازش داده‌های
حجیم می‌تواند بسیار مهم باشد. برخی مدل‌های حرفه‌ای نیز
قابلیت‌هایی مانند حافظه
ECC
یا مدیریت چند نمایشگر تخصصی ارائه می‌کنند.

در کارت‌های Quadro قدیمی‌تر و مدل‌های جدید RTX
Professional، پایداری در بارهای کاری طولانی و درایورهای
تأییدشده برای برخی نرم‌افزارها ممکن است از اختلاف جزئی
در نرخ فریم مهم‌تر باشد.

مشخصات مهم و تأثیر آن‌ها بر عملکرد کارت گرافیک
مشخصه چه چیزی را نشان می‌دهد؟ نکته مهم
مدل GPU سطح اصلی توان پردازشی مهم‌تر از نام برند سازنده کارت است
معماری نسل و ساختار داخلی GPU بر کارایی و قابلیت‌ها اثر مستقیم دارد
ظرفیت VRAM مقدار داده قابل نگهداری در حافظه گرافیکی بیشتر بودن آن لزوماً به معنی سرعت بیشتر نیست
نوع حافظه فناوری حافظه گرافیکی باید همراه با سرعت و رابط حافظه بررسی شود
پهنای باند حافظه سرعت جابه‌جایی داده میان GPU و VRAM در وضوح و بارهای پردازشی سنگین مهم است
فرکانس GPU سرعت فعالیت تراشه میان معماری‌های متفاوت قابل مقایسه مستقیم نیست
توان مصرفی نیاز تقریبی کارت به برق و خنک‌کنندگی بر انتخاب پاور و کیس اثر می‌گذارد
خنک‌کننده توان دفع گرمای کارت بر دما، نویز و حفظ فرکانس مؤثر است
درایور حرفه‌ای سازگاری و پایداری در نرم‌افزارهای تخصصی در Quadro و RTX Professional اهمیت بیشتری دارد


بهترین روش مقایسه کارت‌های گرافیک

ابتدا نوع کاربرد خود را مشخص کنید؛ سپس مشخصات فنی را
همراه با آزمون‌های واقعی همان بازی یا نرم‌افزار
بررسی کنید. نتایج یک کارت در بازی لزوماً نشان‌دهنده
عملکرد آن در رندر، هوش مصنوعی یا نرم‌افزار مهندسی نیست.


فقط به جدول مشخصات اعتماد نکنید

کیفیت درایور، محدودیت توان، دمای کاری، عملکرد پایدار
و بهینه‌سازی نرم‌افزارها در جدول مشخصات خام دیده
نمی‌شوند؛ اما می‌توانند تأثیر زیادی بر تجربه واقعی
داشته باشند.

برندهای کارت گرافیک

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

امروزه سه شرکت اصلی پردازنده‌های گرافیکی دسکتاپ را
تولید می‌کنند:
NVIDIA،
AMD
و
Intel.
سپس شرکت‌هایی مانند ASUS، MSI، Gigabyte، ZOTAC،
Sapphire، PowerColor، XFX، PNY و سایر تولیدکنندگان،
کارت نهایی را بر پایه همین GPUها طراحی و عرضه می‌کنند.

NVIDIA

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

معروف‌ترین خانواده‌های این شرکت شامل
GeForce،
RTX Professional
(Quadro سابق)
و شتاب‌دهنده‌های دیتاسنتری هستند.

AMD

AMD نیز یکی از مهم‌ترین تولیدکنندگان GPU است.
محصولات این شرکت در بازار مصرف‌کننده، ورک‌استیشن
و مراکز پردازشی حضور گسترده‌ای دارند.

خانواده Radeon برای کاربران عمومی و گیمرها و
Radeon Pro برای بسیاری از کاربران حرفه‌ای طراحی
شده است.

Intel

اینتل سال‌ها در حوزه گرافیک مجتمع فعالیت داشت و
اکنون با خانواده Arc وارد بازار کارت‌های گرافیک
مجزا نیز شده است.

محصولات Arc در برخی بازی‌ها، تولید محتوا،
رمزگذاری ویدئو و کاربردهای عمومی عملکرد مناسبی
ارائه می‌کنند.

تفاوت NVIDIA و GeForce چیست؟

NVIDIA نام شرکت سازنده است، اما GeForce نام خانواده
کارت‌های گرافیک مخصوص کاربران عمومی و گیمرها است.
بنابراین هر GeForce محصول NVIDIA است، اما همه محصولات
NVIDIA از خانواده GeForce نیستند.

تفاوت Quadro و GeForce

خانواده GeForce برای اجرای بازی، استفاده روزمره،
تولید محتوا و بسیاری از کاربردهای عمومی طراحی شده است.

در مقابل، کارت‌های
Quadro
که امروزه با نام
NVIDIA RTX Professional
شناخته می‌شوند،
بیشتر برای ایستگاه‌های کاری، نرم‌افزارهای CAD،
طراحی صنعتی، مدل‌سازی سه‌بعدی، انیمیشن،
شبیه‌سازی و پروژه‌های مهندسی توسعه یافته‌اند.

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


آیا Quadro از GeForce قوی‌تر است؟

همیشه خیر.
اگر هدف اجرای بازی باشد،
معمولاً کارت‌های GeForce هم‌رده ارزش خرید بیشتری
دارند؛ اما در بسیاری از نرم‌افزارهای حرفه‌ای،
مزیت Quadro و RTX Professional به دلیل درایورهای
تخصصی و پایداری بیشتر مشخص می‌شود.

تفاوت Radeon و Radeon Pro

Radeon خانواده اصلی کارت‌های گرافیک AMD برای کاربران
عمومی و گیمرها است.

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

شرکت‌های سازنده کارت گرافیک

GPU توسط NVIDIA، AMD یا Intel طراحی می‌شود؛ اما
بسیاری از کارت‌های موجود در بازار توسط شرکت‌های
دیگری تولید می‌شوند.

تفاوت سازنده GPU و سازنده کارت گرافیک
نوع شرکت نمونه‌ها وظیفه
سازنده GPU NVIDIA، AMD، Intel طراحی پردازنده گرافیکی و معماری
سازنده کارت ASUS، MSI، Gigabyte،
ZOTAC، Sapphire،
PowerColor، XFX،
PNY و …
طراحی برد، سیستم خنک‌کننده،
مدار تغذیه و تولید کارت نهایی

آیا دو کارت با GPU یکسان عملکرد یکسانی دارند؟

خیر.
حتی اگر دو کارت از یک GPU استفاده کنند،
ممکن است به دلیل تفاوت در طراحی سیستم خنک‌کننده،
کیفیت مدار تغذیه، محدودیت توان،
فرکانس کارخانه‌ای،
ابعاد هیت‌سینک و کیفیت ساخت،
عملکرد و دمای متفاوتی داشته باشند.


هنگام انتخاب برند به چه مواردی توجه کنیم؟

کیفیت سیستم خنک‌کننده، میزان نویز،
خدمات پس از فروش،
کیفیت مدار تغذیه،
گارانتی،
ابعاد کارت،
نسخه BIOS
و کیفیت ساخت معمولاً از لوگوی روی جعبه مهم‌تر هستند.


برند مشهور همیشه بهترین انتخاب نیست

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

حافظه گرافیکی (VRAM) چیست؟

حافظه گرافیکی یا
Video Random Access Memory (VRAM)
نوعی حافظه پرسرعت است که به صورت اختصاصی در اختیار
پردازنده گرافیکی قرار دارد و داده‌های موردنیاز GPU را
برای پردازش تصاویر، بازی‌ها، مدل‌های سه‌بعدی، ویدئوها،
بافت‌ها و محاسبات گرافیکی ذخیره می‌کند.

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

ذخیره بافت‌ها

Textureها، تصاویر و جزئیات سطوح اجسام سه‌بعدی
داخل VRAM نگهداری می‌شوند تا GPU بتواند به سرعت
آن‌ها را پردازش کند.

ذخیره مدل‌های سه‌بعدی

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

نگهداری Frame Buffer

فریم‌های تولیدشده توسط GPU قبل از ارسال به
نمایشگر در حافظه گرافیکی ذخیره می‌شوند.

پردازش ویدئو

هنگام تدوین یا پخش ویدئوهای با وضوح بالا،
بخشی از داده‌های تصویری در VRAM قرار می‌گیرد تا
پردازش سریع‌تر انجام شود.

پردازش هوش مصنوعی

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

رندر سه‌بعدی

در پروژه‌های سنگین معماری، انیمیشن و جلوه‌های
ویژه، حجم بزرگی از اطلاعات داخل VRAM ذخیره
می‌شود.

VRAM چگونه کار می‌کند؟

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

اگر این اطلاعات مستقیماً از RAM سیستم خوانده شوند،
سرعت پردازش کاهش پیدا می‌کند؛ بنابراین داده‌هایی که
بیشترین استفاده را دارند داخل VRAM ذخیره می‌شوند تا
دسترسی GPU به آن‌ها بسیار سریع‌تر باشد.

آیا VRAM بیشتر همیشه بهتر است؟

خیر.

ظرفیت بالاتر VRAM تنها زمانی مفید است که نرم‌افزار،
بازی یا پروژه واقعاً به آن مقدار حافظه نیاز داشته
باشد.

برای مثال ممکن است یک کارت با ۸ گیگابایت حافظه،
به دلیل GPU قوی‌تر، از کارتی با ۱۲ گیگابایت حافظه
عملکرد بهتری ارائه کند.


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

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

کمبود VRAM چه مشکلاتی ایجاد می‌کند؟

  • افت نرخ فریم در بازی‌ها
  • بارگذاری دیرهنگام بافت‌ها
  • ایجاد مکث یا Stutter
  • کاهش کیفیت Textureها
  • کند شدن رندر پروژه‌های سه‌بعدی
  • کاهش سرعت برخی مدل‌های هوش مصنوعی
  • انتقال مداوم داده میان RAM و VRAM

چه عواملی مصرف VRAM را افزایش می‌دهند؟

عوامل مؤثر بر مصرف حافظه گرافیکی
عامل میزان تأثیر دلیل
وضوح تصویر بسیار زیاد فریم‌های بزرگ‌تر به حافظه بیشتری نیاز دارند.
کیفیت Texture بسیار زیاد بافت‌های حجیم فضای بیشتری اشغال می‌کنند.
مدل‌های سه‌بعدی زیاد تعداد Polygon و Mesh افزایش می‌یابد.
Ray Tracing زیاد داده‌های بیشتری برای محاسبات نوری لازم است.
هوش مصنوعی بسیار زیاد وزن مدل‌ها و داده‌های پردازشی در حافظه قرار می‌گیرند.

VRAM در کارت‌های Quadro و RTX Professional

یکی از تفاوت‌های مهم بسیاری از کارت‌های حرفه‌ای مانند
NVIDIA Quadro
و
RTX Professional
ظرفیت بالاتر حافظه گرافیکی نسبت به بسیاری از مدل‌های
گیمینگ است.

پروژه‌های CAD، مدل‌سازی صنعتی، انیمیشن‌های پیچیده،
شبیه‌سازی، اسکن سه‌بعدی، پروژه‌های BIM، تدوین فیلم‌های
سنگین و برخی مدل‌های هوش مصنوعی ممکن است به حجم زیادی
از VRAM نیاز داشته باشند.

به همین دلیل در برخی ورک‌استیشن‌ها مشاهده می‌شود که
ظرفیت حافظه گرافیکی حتی به چند ده گیگابایت نیز می‌رسد؛
موضوعی که برای بسیاری از کاربران خانگی ضرورتی ندارد.


برای خرید فقط به عدد گیگابایت نگاه نکنید

ابتدا نرم‌افزار یا بازی موردنظر خود را بررسی کنید،
سپس ظرفیت VRAM، نوع حافظه، پهنای باند، معماری GPU و
قدرت پردازشی کارت را در کنار یکدیگر مقایسه کنید.


ظرفیت زیاد حافظه، ضعف GPU را جبران نمی‌کند

کارت گرافیکی که GPU ضعیفی دارد، حتی اگر حافظه زیادی
داشته باشد، الزاماً عملکرد بهتری نسبت به یک GPU
قدرتمند با حافظه کمتر ارائه نخواهد کرد.

انواع حافظه گرافیکی؛ از GDDR3 تا GDDR6X، HBM و ECC

حافظه گرافیکی فقط با عدد ظرفیت آن، مانند ۲، ۴، ۸ یا
۱۶ گیگابایت شناخته نمی‌شود. نوع حافظه، فرکانس مؤثر،
پهنای رابط، پهنای باند، مصرف برق و نحوه اتصال آن به GPU
نیز بر عملکرد واقعی کارت گرافیک اثر می‌گذارند.

در کارت‌های گرافیک قدیمی‌تر، لپ‌تاپ‌های استوک و
ورک‌استیشن‌های نسل قبل ممکن است با حافظه‌هایی مانند
DDR2، DDR3، GDDR3 و GDDR5 روبه‌رو شویم؛ در حالی که
کارت‌های جدیدتر بیشتر از GDDR6، GDDR6X یا حافظه‌های
خانواده HBM استفاده می‌کنند.


تفاوت DDR و GDDR چیست؟

حافظه‌های DDR عمدتاً برای حافظه اصلی سیستم طراحی
شده‌اند، اما GDDR برای انتقال حجم بالای داده‌های
گرافیکی بهینه شده است. بااین‌حال برخی کارت‌های
اقتصادی و لپ‌تاپ‌های قدیمی از حافظه‌های DDR2 یا
DDR3 نیز به‌عنوان حافظه گرافیکی اختصاصی استفاده
می‌کنند.

چرا نوع حافظه گرافیکی مهم است؟

نوع حافظه بر سرعت انتقال داده میان GPU و VRAM،
پهنای باند، مصرف انرژی و عملکرد کارت در وضوح‌های بالا،
بازی، رندر، تدوین و پردازش‌های حرفه‌ای تأثیر می‌گذارد.

برای مثال، دو کارت ممکن است هر دو ۴ گیگابایت حافظه
داشته باشند، اما کارتی که از GDDR5 استفاده می‌کند
معمولاً پهنای باند بیشتری نسبت به مدلی با DDR3 دارد.
البته قدرت GPU، عرض باس و معماری همچنان نقش تعیین‌کننده
دارند.

حافظه DDR2

DDR2 در برخی کارت‌های بسیار قدیمی و اقتصادی
استفاده می‌شد. این حافظه پهنای باند محدودی دارد
و برای بازی‌ها یا نرم‌افزارهای امروزی انتخاب
مناسبی نیست.

مدل‌هایی از خانواده‌های قدیمی
GeForce 8، GeForce 9 و Radeon HD ممکن است در
برخی نسخه‌ها از DDR2 استفاده کرده باشند.

حافظه DDR3

DDR3 در کارت‌های اقتصادی و لپ‌تاپ‌های قدیمی
بسیار رایج بود. این حافظه نسبت به DDR2 سریع‌تر
است، اما معمولاً از GDDR5 پهنای باند کمتری دارد.

کارت‌هایی مانند برخی نسخه‌های
GeForce GT 610، GT 620، GT 710، GT 730،
GT 740M، Radeon HD 7470 و مدل‌های مشابه ممکن
است با DDR3 عرضه شده باشند.

حافظه GDDR3

GDDR3 یکی از حافظه‌های پرکاربرد در کارت‌های
گرافیک دهه‌های گذشته بود و در بسیاری از مدل‌های
دسکتاپ، لپ‌تاپ و ورک‌استیشن استفاده شد.

کارت‌هایی مانند GeForce 9600 GT،
9800 GT، GT 240، برخی نسخه‌های GT 630،
Quadro FX و بعضی کارت‌های Radeon قدیمی از
نمونه‌های شناخته‌شده این دوره هستند.

حافظه GDDR5

GDDR5 سال‌ها حافظه اصلی کارت‌های گرافیک
میان‌رده و قدرتمند بود و هنوز در بسیاری از
لپ‌تاپ‌ها، سیستم‌های استوک و کارت‌های دست‌دوم
دیده می‌شود.

مدل‌هایی مانند GTX 750 Ti، GTX 950،
GTX 960، GTX 1050، GTX 1050 Ti،
GTX 1060، GTX 1650، RX 460، RX 470،
RX 570 و RX 580 معمولاً از GDDR5 استفاده
می‌کنند.

حافظه GDDR5X

GDDR5X نسخه سریع‌تر GDDR5 بود و بیشتر در برخی
کارت‌های رده‌بالای نسل Pascal استفاده شد.

کارت‌هایی مانند GTX 1080، GTX 1080 Ti و
Titan Xp از نمونه‌های مشهور مجهز به GDDR5X
هستند.

حافظه GDDR6

GDDR6 در بسیاری از کارت‌های جدیدتر NVIDIA،
AMD و Intel استفاده می‌شود و نسبت به GDDR5
سرعت بالاتر و بهره‌وری انرژی بهتری دارد.

کارت‌هایی مانند GTX 1650 GDDR6،
GTX 1660 Super، RTX 2060، RTX 3060،
RTX 4060، RX 5600 XT، RX 6600،
RX 7600 و Intel Arc از این نوع حافظه استفاده
می‌کنند.

حافظه GDDR6X

GDDR6X برای دستیابی به نرخ انتقال بالاتر طراحی
شده و در برخی کارت‌های قدرتمند NVIDIA استفاده
می‌شود.

مدل‌هایی مانند RTX 3080، RTX 3090،
RTX 4070 Ti Super، RTX 4080 و RTX 4090
از نمونه‌های شناخته‌شده دارای GDDR6X هستند.

حافظه HBM

HBM یا High Bandwidth Memory از ساختاری متفاوت
نسبت به GDDR استفاده می‌کند و تراشه‌های حافظه
را با فاصله بسیار کم در کنار GPU قرار می‌دهد.

این طراحی امکان دستیابی به پهنای باند بسیار بالا
با رابط حافظه عریض را فراهم می‌کند.

حافظه ECC

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

برخی مدل‌های Quadro، NVIDIA RTX Professional،
Tesla، Radeon Pro و شتاب‌دهنده‌های محاسباتی
دارای پشتیبانی ECC هستند.

حافظه DDR3 در کارت‌های گرافیک قدیمی

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

برای نمونه، ممکن است دو نسخه از یک مدل مانند
GeForce GT 730 وجود داشته باشد که یکی از DDR3 و دیگری
از GDDR5 استفاده کند. نسخه GDDR5 معمولاً عملکرد بهتری
دارد، حتی اگر ظرفیت حافظه آن کمتر باشد.


نام یکسان، حافظه متفاوت

برخی کارت‌های قدیمی با یک نام تجاری، در نسخه‌های
متفاوت DDR3 و GDDR5 عرضه شده‌اند. بنابراین هنگام
خرید کارت دست‌دوم یا بررسی لپ‌تاپ قدیمی، نوع حافظه،
عرض باس و کد دقیق GPU را کنترل کنید.

نمونه کارت‌ها و لپ‌تاپ‌های قدیمی با حافظه DDR3

  • NVIDIA GeForce GT 610
  • NVIDIA GeForce GT 620
  • برخی نسخه‌های GeForce GT 630
  • برخی نسخه‌های GeForce GT 710
  • برخی نسخه‌های GeForce GT 730
  • NVIDIA GeForce GT 720M
  • NVIDIA GeForce GT 730M
  • برخی نسخه‌های GeForce GT 740M
  • AMD Radeon HD 7470
  • برخی مدل‌های Radeon HD 8000M
  • برخی کارت‌های قدیمی Quadro سری NVS و FX

GDDR5؛ حافظه رایج در لپ‌تاپ‌ها و کارت‌های استوک

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

مدل‌هایی مانند GTX 850M، GTX 860M، GTX 950M،
GTX 960M، GTX 965M، GTX 970M، GTX 980M،
GTX 1050 Laptop، GTX 1050 Ti Laptop،
GTX 1060 Laptop، MX150 و برخی نسخه‌های MX250
از نمونه‌های شناخته‌شده هستند.

در لپ‌تاپ‌های ورک‌استیشن نیز کارت‌هایی مانند
Quadro K2100M، K3100M، K4100M، M1000M،
M2000M، M3000M، P1000، P2000 و P3200
در بسیاری از مدل‌ها از حافظه GDDR5 استفاده می‌کنند.

HBM، HBM2 و HBM3

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

نسل نخست HBM در کارت‌هایی مانند AMD Radeon R9 Fury
استفاده شد. HBM2 در محصولاتی مانند Radeon Vega،
Radeon VII، برخی کارت‌های Radeon Pro،
NVIDIA Tesla و Quadro GP100 دیده می‌شود.

نسل‌های جدیدتر مانند HBM2e و HBM3 بیشتر در
شتاب‌دهنده‌های دیتاسنتر، هوش مصنوعی و پردازش‌های
محاسباتی بسیار سنگین استفاده می‌شوند.

مقایسه نسل‌های مهم حافظه گرافیکی
نوع حافظه دوره استفاده رایج نمونه محصولات کاربرد معمول
DDR2 کارت‌های بسیار قدیمی برخی GeForce و Radeon اقتصادی قدیمی کارهای عمومی و نمایش تصویر
DDR3 کارت‌ها و لپ‌تاپ‌های اقتصادی قدیمی GT 610، GT 710، برخی GT 730 کاربری عمومی و بازی‌های سبک
GDDR3 نسل‌های قدیمی دسکتاپ و ورک‌استیشن 9600 GT، 9800 GT، Quadro FX بازی و طراحی نسل‌های قدیمی
GDDR5 چندین نسل از کارت‌های قدیمی و میان‌رده GTX 1050 Ti، GTX 1060، RX 580،
Quadro P2000
بازی، طراحی، رندر و ورک‌استیشن
GDDR5X کارت‌های رده‌بالای Pascal GTX 1080، GTX 1080 Ti بازی و پردازش سنگین
GDDR6 کارت‌های مدرن مصرف‌کننده و حرفه‌ای RTX 2060، RTX 3060، RX 6600،
Intel Arc
بازی، تولید محتوا و پردازش حرفه‌ای
GDDR6X برخی کارت‌های قدرتمند جدید NVIDIA RTX 3080، RTX 3090، RTX 4090 بازی سنگین، رندر و هوش مصنوعی
HBM و HBM2 کارت‌های تخصصی و رده‌بالا R9 Fury، Radeon VII، Quadro GP100 پردازش حرفه‌ای و محاسباتی
HBM3 شتاب‌دهنده‌های جدید دیتاسنتر شتاب‌دهنده‌های هوش مصنوعی و HPC مدل‌های بزرگ هوش مصنوعی و محاسبات علمی

حافظه ECC چیست؟

عبارت ECC مخفف
Error-Correcting Code
است. حافظه ECC می‌تواند برخی خطاهای تصادفی داده را
شناسایی و اصلاح کند.

در بازی معمولاً چنین قابلیتی ضروری نیست، اما در
محاسبات علمی، شبیه‌سازی، طراحی صنعتی، پردازش پزشکی،
آموزش مدل‌های هوش مصنوعی و رندرهای طولانی، صحت داده
اهمیت بیشتری پیدا می‌کند.

به همین دلیل برخی کارت‌های NVIDIA Quadro،
NVIDIA RTX Professional، Tesla، Radeon Pro و
شتاب‌دهنده‌های دیتاسنتری از ECC پشتیبانی می‌کنند.


ECC فقط برای افزایش سرعت نیست

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

حافظه کارت‌های Quadro و RTX Professional

کارت‌های حرفه‌ای قدیمی Quadro از انواع متنوع حافظه
استفاده می‌کردند. برای مثال مدل‌های Quadro FX و
Quadro K در نسل‌های مختلف با GDDR3 یا GDDR5 عرضه
شدند، در حالی که بسیاری از کارت‌های Quadro M و
Quadro P از GDDR5 استفاده می‌کنند.

در نسل Quadro RTX و NVIDIA RTX A Series استفاده از
GDDR6 رایج‌تر شد. برخی مدل‌های حرفه‌ای همچنین ظرفیت
حافظه بیشتر، پشتیبانی ECC یا قابلیت‌های ویژه برای
پروژه‌های CAD، شبیه‌سازی و تولید محتوای سنگین دارند.

برای نرم‌افزارهایی مانند AutoCAD، SolidWorks،
CATIA، Maya و نرم‌افزارهای مهندسی، نوع حافظه تنها یکی
از معیارها است. درایور حرفه‌ای، تأییدیه ISV، قدرت GPU
و ظرفیت VRAM نیز باید بررسی شوند.

آیا GDDR6 همیشه از GDDR5 بهتر است؟

از نظر فناوری حافظه، GDDR6 معمولاً سرعت و بهره‌وری
بالاتری دارد؛ اما این موضوع به‌تنهایی ثابت نمی‌کند که
یک کارت GDDR6 از هر کارت GDDR5 سریع‌تر است.

برای نمونه، یک کارت قدرتمند قدیمی با GDDR5 ممکن است
از یک کارت اقتصادی جدید با GDDR6 عملکرد بیشتری داشته
باشد. قدرت تراشه، تعداد واحدهای پردازشی، پهنای باس،
محدودیت توان و معماری باید در کنار نوع حافظه سنجیده
شوند.

چگونه نوع حافظه کارت گرافیک را تشخیص دهیم؟

  1. مدل دقیق کارت یا GPU را در مشخصات سازنده بررسی کنید.
  2. از ابزارهای شناسایی سخت‌افزار مانند GPU-Z یا
    نرم‌افزارهای اطلاعات سیستم استفاده کنید.
  3. در لپ‌تاپ، کد دقیق مدل دستگاه و GPU را بررسی کنید؛
    زیرا یک لپ‌تاپ ممکن است با چند پیکربندی متفاوت عرضه
    شده باشد.
  4. فقط به مقدار حافظه نمایش‌داده‌شده در ویندوز اعتماد
    نکنید؛ زیرا حافظه اشتراکی سیستم نیز ممکن است در آن
    عدد محاسبه شده باشد.


حافظه اشتراکی را با VRAM واقعی اشتباه نگیرید

در گرافیک‌های مجتمع، بخشی از RAM سیستم به GPU
اختصاص داده می‌شود. برخی صفحات مشخصات یا ابزارهای
سیستم ممکن است مجموع حافظه اختصاصی و اشتراکی را
نمایش دهند؛ این عدد به معنی وجود همان مقدار VRAM
پرسرعت روی کارت نیست.

برای لپ‌تاپ قدیمی کدام نوع حافظه مناسب‌تر است؟

در لپ‌تاپ‌های قدیمی معمولاً امکان تعویض مستقیم GPU یا
حافظه گرافیکی وجود ندارد؛ بنابراین باید عملکرد همان
ترکیب موجود را ارزیابی کرد.

برای کاربری عمومی و نرم‌افزارهای سبک، DDR3 ممکن است
کافی باشد. برای بازی‌های قدیمی، طراحی سه‌بعدی سبک و
نرم‌افزارهای گرافیکی، مدل‌های مجهز به GDDR5 معمولاً
گزینه بهتری هستند.

در لپ‌تاپ‌های ورک‌استیشن قدیمی، یک Quadro با GDDR5 و
درایور حرفه‌ای ممکن است برای SolidWorks یا CAD مناسب‌تر
از یک GPU گیمینگ هم‌رده باشد؛ هرچند برای بازی معمولاً
برتری با مدل گیمینگ است.

راهنمای کلی انتخاب حافظه در سیستم‌های قدیمی
نوع کاربرد حافظه قابل قبول پیشنهاد بهتر
استفاده اداری و اینترنت DDR3 یا گرافیک مجتمع SSD و RAM کافی معمولاً مهم‌تر است
پخش ویدئو DDR3 یا GDDR3 پشتیبانی سخت‌افزاری کدک بررسی شود
بازی‌های قدیمی GDDR3 GDDR5 معمولاً انتخاب مناسب‌تری است
طراحی و CAD سبک GDDR5 با حداقل ۲ گیگابایت Quadro یا Radeon Pro سازگار با نرم‌افزار
رندر سه‌بعدی GDDR5 با ظرفیت کافی GDDR6 و VRAM بیشتر
هوش مصنوعی نوع حافظه به‌تنهایی کافی نیست VRAM بیشتر و پشتیبانی نرم‌افزاری مناسب


معیار درست برای مقایسه

ظرفیت VRAM، نوع حافظه، پهنای باند، عرض باس و قدرت
GPU را در کنار هم بررسی کنید. مقایسه فقط بر اساس
عبارت GDDR5 یا GDDR6 ممکن است نتیجه اشتباهی ایجاد
کند.

معماری‌های کارت گرافیک NVIDIA؛ از Tesla و Fermi تا RTX و Blackwell

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

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

برای مثال، دو کارت از خانواده GeForce یا Quadro ممکن است
ظرفیت حافظه مشابهی داشته باشند، اما به دلیل تفاوت معماری،
در مصرف برق، پشتیبانی نرم‌افزاری، قدرت پردازش و قابلیت‌های
ویدئویی کاملاً متفاوت باشند.


معماری GPU یعنی چه؟

معماری GPU به طرح کلی و سازمان داخلی پردازنده
گرافیکی گفته می‌شود. هر معماری می‌تواند شامل نسل
متفاوتی از هسته‌های CUDA، حافظه کش، واحدهای پردازش
بافت، موتورهای ویدئویی، Tensor Core و RT Core باشد.

چرا شناخت نسل کارت گرافیک مهم است؟

  • تعیین سازگاری کارت با نسخه‌های جدید درایور
  • بررسی پشتیبانی از CUDA و قابلیت‌های محاسباتی
  • تشخیص توانایی رمزگشایی و رمزگذاری ویدئو
  • بررسی پشتیبانی از DirectX، Vulkan و OpenGL
  • مقایسه مصرف برق و حرارت
  • تشخیص وجود Tensor Core و RT Core
  • ارزیابی مناسب‌بودن کارت برای بازی یا نرم‌افزارهای مهندسی
  • تشخیص ارزش خرید لپ‌تاپ یا ورک‌استیشن استوک

جدول کلی معماری‌های مهم NVIDIA

نسل‌های مهم معماری NVIDIA و نمونه کارت‌های آن‌ها
معماری خانواده‌های شناخته‌شده نمونه کارت‌ها کاربرد و ویژگی شاخص
Tesla GeForce 8، 9، 100، 200 و برخی Quadro FX 8800 GT، 9600 GT، 9800 GT،
GTX 260، Quadro FX 1700
آغاز معماری یکپارچه سایه‌زن و نسل‌های قدیمی CUDA
Fermi GeForce 400 و 500، Quadro 2000 تا 6000 GTX 460، GTX 560 Ti، GTX 580،
Quadro 2000، Quadro 4000
بهبود پردازش عمومی GPU و کاربردهای محاسباتی
Kepler GeForce 600 و 700، Quadro K GT 730، GTX 650، GTX 660،
GTX 760، Quadro K2000، K4000
مصرف برق بهتر و حضور گسترده در لپ‌تاپ‌های قدیمی
Maxwell GeForce 700، 800M، 900 و Quadro M GTX 750 Ti، GTX 850M، GTX 960M،
GTX 970، Quadro M2000
بهره‌وری انرژی مناسب و محبوبیت در لپ‌تاپ‌ها
Pascal GeForce 10، Quadro P، بعضی Teslaها GTX 1050 Ti، GTX 1060، GTX 1080،
Quadro P1000، P2000، P4000
جهش عملکرد، محبوب در سیستم‌های استوک و ورک‌استیشن
Volta Titan V، Tesla V100، Quadro GV100 Titan V، Tesla V100، Quadro GV100 معرفی Tensor Core برای پردازش‌های هوش مصنوعی
Turing GeForce GTX 16، RTX 20، Quadro RTX GTX 1650، GTX 1660، RTX 2060،
RTX 2080، Quadro RTX 4000
معرفی گسترده RT Core و Tensor Core در بازار حرفه‌ای و گیمینگ
Ampere GeForce RTX 30، RTX A Series RTX 3060، RTX 3070، RTX 3080،
RTX A2000، RTX A4000
افزایش توان Ray Tracing، CUDA و هوش مصنوعی
Ada Lovelace GeForce RTX 40 و RTX Ada Generation RTX 4060، RTX 4070، RTX 4090،
RTX 2000 Ada، RTX 4000 Ada
بهره‌وری بالاتر، تولید فریم و موتورهای جدیدتر ویدئویی
Blackwell نسل‌های جدید GeForce RTX و RTX Professional مدل‌های جدید گیمینگ، ورک‌استیشن و دیتاسنتر تمرکز بیشتر بر هوش مصنوعی، رندر عصبی و پردازش حرفه‌ای

معماری Tesla

Tesla یکی از معماری‌های قدیمی و مهم NVIDIA بود که در
کارت‌های خانواده GeForce 8، GeForce 9 و برخی محصولات
سری 200 استفاده شد. این معماری با شتاب‌دهنده‌های
دیتاسنتری جدیدی که ممکن است نام Tesla داشته باشند،
نباید اشتباه گرفته شود.

کارت‌هایی مانند GeForce 8800 GT، 9600 GT، 9800 GT،
GTX 260 و GTX 280 از نمونه‌های شناخته‌شده این دوران
هستند. برخی کارت‌های حرفه‌ای Quadro FX نیز بر اساس
تراشه‌های همین نسل تولید شدند.

محصولات Tesla امروزه برای بازی‌ها و نرم‌افزارهای جدید
بسیار قدیمی محسوب می‌شوند، اما هنوز ممکن است در
سیستم‌های اداری، کامپیوترهای صنعتی و ورک‌استیشن‌های
قدیمی دیده شوند.


محدودیت کارت‌های بسیار قدیمی

کارت‌های مبتنی بر Tesla ممکن است با درایورها،
سیستم‌عامل‌ها، رابط‌های برنامه‌نویسی و نرم‌افزارهای
جدید سازگاری محدودی داشته باشند. ظرفیت حافظه کم و
نبود قابلیت‌های جدید رمزگشایی ویدئو نیز باید بررسی شود.

معماری Fermi

Fermi در خانواده‌های GeForce 400 و GeForce 500 عرضه شد
و توجه بیشتری به پردازش‌های عمومی روی GPU داشت. این
معماری در زمان خود در محاسبات CUDA، طراحی سه‌بعدی و
پردازش‌های علمی نیز اهمیت پیدا کرد.

از مدل‌های شناخته‌شده این نسل می‌توان به GTX 460،
GTX 470، GTX 560 Ti و GTX 580 اشاره کرد.

کارت‌های حرفه‌ای Quadro 2000، Quadro 4000،
Quadro 5000 و برخی مدل‌های مشابه نیز متعلق به همین
دوره هستند و هنوز ممکن است در ورک‌استیشن‌های قدیمی
HP، Dell و Lenovo دیده شوند.

یکی از نقاط ضعف بسیاری از کارت‌های Fermi، مصرف برق و
تولید حرارت نسبتاً زیاد در مقایسه با نسل‌های بعدی است.

معماری Kepler

Kepler در تعداد زیادی از کارت‌های دسکتاپ، لپ‌تاپ و
ورک‌استیشن استفاده شد. محصولات خانواده GeForce 600،
بخش قابل‌توجهی از GeForce 700 و کارت‌های حرفه‌ای
Quadro K متعلق به این معماری هستند.

مدل‌هایی مانند GT 710، برخی نسخه‌های GT 730،
GTX 650، GTX 660، GTX 680، GTX 760 و GTX 780
از نمونه‌های معروف Kepler هستند.

در لپ‌تاپ‌ها نیز GPUهایی مانند GT 720M، GT 730M،
GT 740M، GTX 765M، GTX 770M و GTX 780M در بسیاری
از دستگاه‌های نسل قدیمی دیده می‌شوند.

کارت‌های Quadro K

خانواده Quadro K یکی از مهم‌ترین گروه‌های کارت گرافیک
در لپ‌تاپ‌ها و ورک‌استیشن‌های قدیمی است. مدل‌هایی مانند
Quadro K600، K1000M، K1100M، K2000، K2100M،
K2200، K3100M، K4000 و K4100M در سیستم‌های حرفه‌ای
استفاده شده‌اند.

این کارت‌ها ممکن است هنوز برای نسخه‌های قدیمی‌تر
AutoCAD، SolidWorks، CATIA، 3ds Max و نرم‌افزارهای
مهندسی سبک قابل استفاده باشند، اما باید سازگاری
نسخه نرم‌افزار، درایور و سیستم‌عامل بررسی شود.


Quadro K برای چه کسی مناسب است؟

یک لپ‌تاپ مجهز به Quadro K می‌تواند برای آموزش،
نقشه‌کشی دوبعدی و پروژه‌های سبک ارزش خرید داشته
باشد؛ اما برای رندر سنگین، هوش مصنوعی، Ray Tracing
یا نسخه‌های جدید نرم‌افزارها نباید انتظار عملکرد
کارت‌های جدید را داشت.

معماری Maxwell

Maxwell تمرکز زیادی بر بهبود بهره‌وری انرژی داشت و به
همین دلیل در لپ‌تاپ‌ها بسیار موفق بود. کارت‌هایی مانند
GTX 750، GTX 750 Ti، GTX 950، GTX 960، GTX 970 و
GTX 980 از معماری Maxwell استفاده می‌کنند.

در لپ‌تاپ‌های قدیمی و استوک نیز مدل‌های GTX 850M،
GTX 860M، GTX 950M، GTX 960M، GTX 965M،
GTX 970M و GTX 980M بسیار رایج هستند.

بعضی GPUهای اقتصادی مانند سری GeForce 800M و 900M
ممکن است با معماری‌ها و مشخصات متفاوت عرضه شده باشند؛
بنابراین نام مدل به‌تنهایی برای شناسایی دقیق GPU کافی نیست.

کارت‌های Quadro M

کارت‌های Quadro M در بسیاری از ورک‌استیشن‌های موبایل
و دسکتاپ نسل قبل استفاده شدند. Quadro M600M،
M1000M، M1200، M2000M، M2200، M3000M،
M4000M و M5000M از مدل‌های مهم این گروه هستند.

این خانواده نسبت به Quadro K معمولاً عملکرد و بهره‌وری
انرژی بهتری ارائه می‌کند و در بازار لپ‌تاپ‌های
ورک‌استیشن استوک همچنان اهمیت دارد.

معماری Pascal

Pascal یکی از موفق‌ترین و ماندگارترین معماری‌های
NVIDIA است. این معماری در کارت‌های سری GeForce 10،
کارت‌های Quadro P و تعدادی از شتاب‌دهنده‌های حرفه‌ای
استفاده شد.

مدل‌هایی مانند GT 1030، GTX 1050، GTX 1050 Ti،
GTX 1060، GTX 1070، GTX 1080 و GTX 1080 Ti
از محصولات مشهور این نسل هستند.

در لپ‌تاپ‌ها نیز نسخه‌های GTX 1050، GTX 1050 Ti،
GTX 1060، GTX 1070 و GTX 1080 عرضه شدند. در این نسل،
فاصله عملکرد نسخه لپ‌تاپی و دسکتاپ در برخی مدل‌ها نسبت
به نسل‌های قدیمی کمتر شد، اما توان مصرفی و فرکانس دستگاه
همچنان اهمیت زیادی دارد.

کارت‌های Quadro P

Quadro P یکی از مهم‌ترین خانواده‌ها برای بازار
ورک‌استیشن استوک است. مدل‌هایی مانند Quadro P500،
P600، P1000، P2000، P2200، P3000، P3200،
P4000، P5000 و P6000 در لپ‌تاپ‌ها و سیستم‌های
حرفه‌ای استفاده شده‌اند.

این کارت‌ها در بسیاری از پروژه‌های CAD، طراحی صنعتی،
معماری، مدل‌سازی و نرم‌افزارهایی مانند AutoCAD،
SolidWorks، CATIA، Maya و 3ds Max قابل استفاده‌اند.

Quadro P2000 و P2200 به دلیل مصرف برق مناسب، حافظه
GDDR5 و درایورهای حرفه‌ای، از کارت‌های شناخته‌شده بازار
ورک‌استیشن‌های دست‌دوم هستند.


آیا Pascal هنوز قابل استفاده است؟

بسیاری از کارت‌های Pascal هنوز برای بازی‌های سبک تا
متوسط، تدوین، طراحی سه‌بعدی، CAD و کاربری عمومی
قابل استفاده‌اند. بااین‌حال نبود RT Core و Tensor
Core اختصاصی، آن‌ها را در قابلیت‌های جدید RTX و
برخی پردازش‌های هوش مصنوعی محدود می‌کند.

معماری Volta

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

Tesla V100، Titan V و Quadro GV100 از محصولات
شناخته‌شده مبتنی بر Volta هستند.

یکی از مهم‌ترین ویژگی‌های Volta معرفی Tensor Core بود.
این واحدها برای افزایش سرعت برخی محاسبات ماتریسی و
پردازش‌های هوش مصنوعی طراحی شدند.

معماری Turing

Turing نقطه مهمی در تاریخ کارت‌های NVIDIA محسوب می‌شود؛
زیرا فناوری RTX، هسته‌های RT و نسل گسترده‌تری از
Tensor Core را وارد کارت‌های گرافیک گیمینگ و
ورک‌استیشن کرد.

سری GeForce RTX 20 شامل مدل‌هایی مانند RTX 2060،
RTX 2070، RTX 2080 و RTX 2080 Ti بر پایه Turing
ساخته شد.

سری GTX 16 مانند GTX 1650، GTX 1650 Super،
GTX 1660 و GTX 1660 Ti نیز از معماری Turing استفاده
می‌کند، اما معمولاً فاقد RT Core و Tensor Core فعال
مشابه کارت‌های RTX است.

کارت‌های Quadro RTX

Quadro RTX 3000، RTX 4000، RTX 5000، RTX 6000
و RTX 8000 از محصولات حرفه‌ای مهم این دوره هستند.

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

لپ‌تاپ‌های ورک‌استیشن مجهز به Quadro RTX 3000،
RTX 4000 و RTX 5000 هنوز در بازار استوک دیده می‌شوند
و می‌توانند برای برخی پروژه‌های رندر، CAD و تولید
محتوای حرفه‌ای مناسب باشند.

معماری Ampere

Ampere در کارت‌های GeForce RTX 30 و محصولات حرفه‌ای
NVIDIA RTX A Series استفاده شد. این معماری قدرت
پردازش CUDA، Ray Tracing و هوش مصنوعی را نسبت به
نسل قبلی افزایش داد.

RTX 3050، RTX 3060، RTX 3070، RTX 3080 و RTX 3090
از مدل‌های شناخته‌شده گیمینگ این نسل هستند.

کارت‌های RTX A Series

با نسل Ampere، نام Quadro در بسیاری از محصولات جدید
کنار گذاشته شد و کارت‌های حرفه‌ای با نام‌هایی مانند
RTX A1000، RTX A2000، RTX A3000، RTX A4000،
RTX A4500، RTX A5000 و RTX A6000 عرضه شدند.

این کارت‌ها ادامه‌دهنده مسیر Quadro هستند و برای
ورک‌استیشن‌ها، نرم‌افزارهای حرفه‌ای، پروژه‌های CAD،
رندر، شبیه‌سازی و هوش مصنوعی طراحی شده‌اند.

RTX A2000 به دلیل ابعاد کوچک، مصرف برق کنترل‌شده و
پشتیبانی از قابلیت‌های RTX در بسیاری از ورک‌استیشن‌های
کوچک و سیستم‌های حرفه‌ای استفاده شده است.

معماری Ada Lovelace

Ada Lovelace در کارت‌های سری GeForce RTX 40 و
محصولات حرفه‌ای RTX Ada Generation استفاده می‌شود.
این معماری بر بهره‌وری انرژی، Ray Tracing، پردازش
هوش مصنوعی و موتورهای جدیدتر تولید ویدئو تمرکز دارد.

مدل‌هایی مانند RTX 4050 Laptop، RTX 4060،
RTX 4070، RTX 4080 و RTX 4090 از محصولات مصرف‌کننده
مبتنی بر Ada هستند.

در بازار حرفه‌ای نیز کارت‌هایی مانند RTX 2000 Ada،
RTX 4000 Ada، RTX 4500 Ada، RTX 5000 Ada و
RTX 6000 Ada برای ورک‌استیشن‌ها عرضه شدند.

این کارت‌ها برای نرم‌افزارهای مهندسی، مدل‌سازی،
رندر GPU، تدوین، واقعیت مجازی و پردازش‌های هوش مصنوعی
کاربرد دارند.

معماری Blackwell

Blackwell نسل جدیدتری از معماری‌های NVIDIA است که
تمرکز زیادی بر پردازش‌های هوش مصنوعی، رندر عصبی،
Ray Tracing و افزایش بهره‌وری پردازشی دارد.

این معماری در خانواده‌های جدید مصرف‌کننده، حرفه‌ای و
دیتاسنتری استفاده می‌شود و ادامه‌دهنده مسیر محصولات
RTX و RTX Professional است.

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

تفاوت معماری با سری کارت گرافیک

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

برای مثال، خانواده GeForce 700 شامل محصولاتی با
معماری‌های متفاوت بود. برخی مدل‌ها Kepler و بعضی
مدل‌های دیگر Maxwell بودند.

همین موضوع درباره کارت‌های لپ‌تاپی نیز اهمیت دارد؛
زیرا نام‌هایی مانند GT 730M، GT 740M یا سری‌های MX
ممکن است در نسخه‌های مختلف مشخصات متفاوتی داشته باشند.


فقط به نام سری اعتماد نکنید

برای تشخیص دقیق کارت، کد GPU، معماری، نوع حافظه،
تعداد هسته‌های CUDA، پهنای باس و مشخصات نسخه
لپ‌تاپی یا دسکتاپ را بررسی کنید.

معماری کارت‌های گرافیک لپ‌تاپ

کارت‌های گرافیک لپ‌تاپی معمولاً بر اساس همان معماری
نسخه‌های دسکتاپ ساخته می‌شوند، اما محدودیت توان،
سیستم خنک‌کننده و فرکانس کاری آن‌ها متفاوت است.

دو لپ‌تاپ با نام GPU یکسان ممکن است عملکرد متفاوتی
داشته باشند؛ زیرا سازنده لپ‌تاپ می‌تواند توان مصرفی،
فرکانس و تنظیمات خنک‌کننده متفاوتی برای GPU انتخاب کند.

این موضوع در کارت‌های جدید و قدیمی هر دو وجود دارد.
برای نمونه، عملکرد یک GTX 960M یا Quadro M2000M به
خنک‌کننده و توان دستگاه وابسته است و در نسل‌های جدیدتر
نیز تفاوت توان نسخه‌های لپ‌تاپی می‌تواند اختلاف عملکرد
قابل‌توجهی ایجاد کند.

نمونه نسل‌های رایج در لپ‌تاپ‌های قدیمی و استوک

معماری کارت‌های رایج در لپ‌تاپ‌های قدیمی
مدل کارت معماری معمول سطح کاربرد تقریبی
GeForce GT 720M Kepler کاربری عمومی و بازی‌های بسیار سبک
GeForce GT 740M معمولاً Kepler بازی‌ها و نرم‌افزارهای قدیمی سبک
GeForce GTX 860M بسته به نسخه Kepler یا Maxwell بازی و طراحی نسل قدیمی
GeForce GTX 960M Maxwell بازی، تدوین و طراحی سبک
GeForce GTX 1050 Laptop Pascal بازی متوسط، تدوین و طراحی
GeForce GTX 1060 Laptop Pascal بازی، رندر و تولید محتوا
Quadro K2100M Kepler CAD و نرم‌افزارهای حرفه‌ای قدیمی
Quadro M2000M Maxwell طراحی مهندسی و مدل‌سازی متوسط
Quadro P2000 Pascal CAD، SolidWorks، مدل‌سازی و رندر سبک
Quadro RTX 3000 Turing طراحی، رندر و پروژه‌های حرفه‌ای
RTX A2000 Laptop Ampere ورک‌استیشن، رندر و پردازش حرفه‌ای

بهترین معماری NVIDIA برای نرم‌افزارهای مهندسی

انتخاب معماری مناسب به نسخه نرم‌افزار، حجم پروژه،
بودجه و نوع پردازش بستگی دارد. برای نقشه‌کشی دوبعدی و
پروژه‌های سبک، کارت‌های قدیمی‌تر Quadro K یا Quadro M
ممکن است کافی باشند.

برای پروژه‌های متوسط CAD و SolidWorks، کارت‌های
Quadro P و نسل‌های جدیدتر معمولاً گزینه متعادل‌تری
هستند. در پروژه‌های رندر، شبیه‌سازی و مدل‌سازی سنگین،
Quadro RTX، RTX A Series و RTX Professional
قابلیت‌های بیشتری ارائه می‌کنند.

در نرم‌افزارهایی مانند AutoCAD، SolidWorks، CATIA و
Maya فقط معماری GPU تعیین‌کننده نیست. ظرفیت VRAM،
قدرت CPU، مقدار RAM، نوع ذخیره‌ساز، درایور حرفه‌ای و
گواهی‌های ISV نیز اهمیت دارند.


برای ورک‌استیشن استوک چه نسلی مناسب است؟

Quadro P و Quadro RTX معمولاً تعادل مناسبی میان
قیمت، عملکرد و پشتیبانی نرم‌افزاری ایجاد می‌کنند.
Quadro K و M ارزان‌تر هستند، اما برای خرید آن‌ها
باید محدودیت درایور، عمر دستگاه و نیاز نرم‌افزار
با دقت بیشتری بررسی شود.

تفاوت GeForce و Quadro در معماری یکسان

گاهی یک کارت GeForce و یک کارت Quadro از GPUهایی با
معماری نزدیک استفاده می‌کنند، اما این موضوع به معنی
یکسان‌بودن کامل آن‌ها نیست.

تفاوت می‌تواند در ظرفیت حافظه، فرکانس، توان مصرفی،
نوع درایور، پشتیبانی ECC، خروجی‌های تصویری، قابلیت‌های
مدیریتی و تأییدیه نرم‌افزارهای حرفه‌ای باشد.

GeForce معمولاً برای بازی و عملکرد عمومی بهینه می‌شود،
در حالی که Quadro و RTX Professional بیشتر بر پایداری،
دقت، سازگاری و عملکرد قابل پیش‌بینی در نرم‌افزارهای
مهندسی و تولید محتوا تمرکز دارند.


نسل معماری یکسان، کاربرد متفاوت

یک GeForce و Quadro هم‌نسل ممکن است در برخی
پردازش‌ها عملکرد نزدیک داشته باشند، اما نوع درایور
و قابلیت‌های حرفه‌ای می‌تواند تجربه متفاوتی در
SolidWorks، CATIA، Maya یا نرم‌افزارهای CAD
ایجاد کند.

چگونه معماری کارت NVIDIA را تشخیص دهیم؟

  1. مدل دقیق GPU را از Device Manager یا مشخصات
    سازنده پیدا کنید.
  2. در لپ‌تاپ، مدل کامل دستگاه و کد پیکربندی آن را
    بررسی کنید.
  3. با نرم‌افزارهایی مانند GPU-Z مشخصات تراشه،
    حافظه و کد GPU را مشاهده کنید.
  4. نام معماری را با مدل دقیق کارت تطبیق دهید.
  5. در کارت‌های دارای چند نسخه، نوع حافظه و تعداد
    هسته‌ها را نیز کنترل کنید.
  6. نسخه درایور و آخرین سیستم‌عامل پشتیبانی‌شده را
    بررسی کنید.


نام نمایش‌داده‌شده در ویندوز همیشه کافی نیست

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

معماری‌های کارت گرافیک AMD؛ از ATI و Terascale تا GCN، RDNA و CDNA

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

پس از پیوستن ATI به AMD، برند Radeon برای کارت‌های
مصرف‌کننده ادامه پیدا کرد و خانواده‌هایی مانند
FirePro، Radeon Pro و AMD Instinct نیز برای
ورک‌استیشن‌ها، پردازش‌های حرفه‌ای، محاسبات علمی و
هوش مصنوعی توسعه یافتند.

شناخت معماری GPUهای AMD کمک می‌کند تفاوت میان
کارت‌های Radeon HD، سری R، سری RX، Radeon Pro،
FirePro و Instinct را بهتر درک کنیم. این موضوع هنگام
خرید کارت دست‌دوم یا لپ‌تاپ استوک اهمیت بیشتری دارد؛
زیرا ممکن است دو کارت با ظرفیت حافظه مشابه، قابلیت‌ها
و عملکرد کاملاً متفاوتی داشته باشند.


معماری GPU در کارت‌های AMD چیست؟

معماری GPU ساختار داخلی تراشه را مشخص می‌کند؛ از
جمله نحوه سازمان‌دهی واحدهای پردازشی، حافظه کش،
واحدهای بافت، خروجی‌های رندر، موتورهای ویدئویی،
شتاب‌دهنده‌های Ray Tracing و واحدهای مرتبط با
هوش مصنوعی.

تفاوت Radeon، FirePro، Radeon Pro و Instinct

AMD Radeon

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

خانواده‌های Radeon HD، Radeon R5، R7، R9،
RX 400، RX 500، RX Vega و Radeon RX جدیدتر
در این گروه قرار می‌گیرند.

AMD FirePro

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

مدل‌هایی مانند FirePro V3900، V4900،
W5000، W5100، W7000، W7100 و W9100
از محصولات شناخته‌شده این خانواده هستند.

AMD Radeon Pro

Radeon Pro جانشین اصلی برند FirePro در بازار
ورک‌استیشن است. این کارت‌ها با تمرکز بر
پایداری، درایور حرفه‌ای، حافظه بیشتر، نمایشگرهای
تخصصی و سازگاری با نرم‌افزارهای حرفه‌ای عرضه
می‌شوند.

Radeon Pro WX، Radeon Pro W و برخی GPUهای
حرفه‌ای لپ‌تاپی در این گروه قرار دارند.

AMD Instinct

Instinct خانواده شتاب‌دهنده‌های محاسباتی AMD
برای دیتاسنتر، هوش مصنوعی، یادگیری ماشین،
محاسبات علمی و HPC است.

این محصولات معمولاً برای اجرای بازی یا اتصال
مستقیم نمایشگر ساخته نشده‌اند و باید آن‌ها را
از کارت‌های Radeon و Radeon Pro جدا دانست.

جدول کلی نسل‌ها و معماری‌های مهم AMD

معماری‌های مهم کارت گرافیک AMD و نمونه محصولات
معماری یا خانواده محصولات رایج نمونه کارت‌ها ویژگی و کاربرد کلی
Radeonهای پیش از Terascale Radeon 7000 تا X1000 Radeon 9200، 9600، X1300، X1600 کارت‌های قدیمی برای نمایش تصویر و بازی‌های کلاسیک
Terascale 1 Radeon HD 2000 و HD 3000 HD 2400، HD 2600، HD 3850، HD 3870 نسل ابتدایی سایه‌زن‌های یکپارچه AMD
Terascale 2 Radeon HD 4000، HD 5000 و بخشی از HD 6000 HD 4550، HD 5450، HD 5770، HD 5850 حضور گسترده در کامپیوترها و لپ‌تاپ‌های قدیمی
Terascale 3 بخش‌هایی از Radeon HD 6000 HD 6790، HD 6850، HD 6870، HD 6970 آخرین نسل اصلی پیش از GCN
GCN نسل اول Radeon HD 7000 HD 7750، HD 7770، HD 7850، HD 7970 معماری جدید برای گرافیک و پردازش عمومی
GCN نسل دوم و سوم Radeon R7 و R9 سری 200 و 300 R7 250، R9 270X، R9 280X، R9 290X بازی، OpenCL و پردازش‌های گرافیکی چندمنظوره
GCN نسل چهارم؛ Polaris Radeon RX 400 و RX 500 RX 460، RX 470، RX 480، RX 570، RX 580 مصرف مناسب‌تر و محبوبیت زیاد در بازار دست‌دوم
GCN نسل پنجم؛ Vega RX Vega، Radeon VII و برخی Radeon Pro RX Vega 56، Vega 64، Radeon VII پهنای باند بالا و کاربردهای گرافیکی و محاسباتی
RDNA Radeon RX 5000 RX 5500 XT، RX 5600 XT، RX 5700 XT معماری جدیدتر با تمرکز ویژه بر بازی
RDNA 2 Radeon RX 6000 RX 6400، RX 6600، RX 6700 XT، RX 6800 Ray Tracing سخت‌افزاری و Infinity Cache
RDNA 3 Radeon RX 7000 و Radeon Pro W7000 RX 7600، RX 7700 XT، RX 7800 XT،
Radeon Pro W7800
طراحی پیشرفته‌تر، موتور نمایش و رسانه جدیدتر
RDNA 4 Radeon RX 9000 مدل‌های خانواده Radeon RX 9000 تمرکز بیشتر بر Ray Tracing و شتاب‌دهی هوش مصنوعی
CDNA AMD Instinct شتاب‌دهنده‌های سری MI هوش مصنوعی، HPC و پردازش دیتاسنتری

کارت‌های Radeon قدیمی پیش از Terascale

پیش از معماری‌های Terascale و GCN، شرکت ATI نسل‌های
متعددی از کارت‌های Radeon را تولید کرده بود. کارت‌هایی
مانند Radeon 9200، Radeon 9600، Radeon 9800،
X1300، X1600 و X1950 در رایانه‌های دهه‌های گذشته
استفاده می‌شدند.

این محصولات ممکن است از رابط‌هایی مانند AGP یا
نسخه‌های اولیه PCI Express استفاده کنند. بسیاری از
آن‌ها با سیستم‌عامل‌ها و نمایشگرهای جدید سازگاری
محدودی دارند و برای استفاده امروزی بیشتر جنبه صنعتی،
تعمیراتی یا آرشیوی پیدا کرده‌اند.


کارت AGP را با PCI Express اشتباه نگیرید

کارت‌های AGP و PCI Express از نظر اسلات و ارتباط
الکتریکی با یکدیگر سازگار نیستند. پیش از خرید کارت
برای سیستم بسیار قدیمی، نوع اسلات مادربرد را بررسی
کنید.

معماری Terascale

Terascale یکی از دوره‌های مهم تاریخ GPUهای AMD بود و
در خانواده‌های متعددی از Radeon HD استفاده شد. این
معماری چند نسل مختلف داشت و در کارت‌های اقتصادی تا
رده‌بالا به کار رفت.

Terascale 1

نخستین نسل Terascale در کارت‌های Radeon HD 2000 و
HD 3000 دیده شد. HD 2400، HD 2600، HD 3650،
HD 3850 و HD 3870 از مدل‌های رایج این دوره هستند.

این کارت‌ها امروز برای بازی یا نرم‌افزارهای سنگین
مناسب نیستند، اما ممکن است برای خروجی تصویر در
سیستم‌های قدیمی یا اجرای نرم‌افزارهای هم‌دوره خود
استفاده شوند.

Terascale 2

نسل دوم Terascale در تعداد زیادی از کارت‌های
Radeon HD 4000، HD 5000 و بعضی مدل‌های HD 6000
استفاده شد.

Radeon HD 4350، HD 4550، HD 5450، HD 5670،
HD 5750، HD 5770، HD 5850 و HD 5870 از
نمونه‌های معروف آن هستند.

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

Terascale 3

Terascale 3 در تعدادی از کارت‌های قدرتمند خانواده
Radeon HD 6000 استفاده شد. HD 6790، HD 6850،
HD 6870، HD 6950 و HD 6970 از نمونه‌های مهم این
نسل هستند.

بعضی کارت‌های سری HD 6000 از معماری‌ها و تراشه‌های
متفاوتی استفاده می‌کنند؛ بنابراین برای شناسایی دقیق،
باید مدل کامل GPU بررسی شود.

معماری GCN چیست؟

عبارت GCN مخفف
Graphics Core Next
است. این معماری جایگزین Terascale شد و برای اجرای
پردازش‌های گرافیکی و محاسبات عمومی روی GPU طراحی شده
بود.

معماری GCN برای چندین سال پایه تعداد زیادی از کارت‌های
Radeon، FirePro، Radeon Pro و شتاب‌دهنده‌های حرفه‌ای
AMD بود.

واحد محاسباتی در GCN

GPUهای GCN از مجموعه‌هایی با عنوان Compute Unit
تشکیل می‌شوند. هر Compute Unit شامل تعدادی واحد
پردازش برداری، زمان‌بند، حافظه محلی و منابع مشترک است.

عدد Stream Processor که در مشخصات کارت‌های AMD دیده
می‌شود، به تعداد واحدهای پردازشی ساده‌تر اشاره دارد؛
اما مقایسه مستقیم این عدد میان معماری‌های متفاوت همیشه
صحیح نیست.


تعداد Stream Processor معیار کامل عملکرد نیست

دو کارت با تعداد Stream Processor یکسان ممکن است
به دلیل تفاوت معماری، فرکانس، حافظه، تعداد ROP،
پهنای باند و محدودیت توان، عملکرد متفاوتی داشته
باشند.

GCN نسل اول و Radeon HD 7000

نخستین نسل GCN در کارت‌های Radeon HD 7000 وارد بازار
شد. HD 7730، HD 7750، HD 7770، HD 7850،
HD 7870، HD 7950 و HD 7970 از مهم‌ترین مدل‌های
این خانواده هستند.

Radeon HD 7750 به دلیل مصرف برق نسبتاً کنترل‌شده و
وجود نسخه‌هایی بدون کانکتور برق مجزا، در برخی
سیستم‌های اداری و کیس‌های قدیمی محبوب بود.

Radeon HD 7970 نیز یکی از کارت‌های قدرتمند زمان خود
بود و بعدها برخی تراشه‌ها یا مدل‌های نزدیک به آن با
نام‌های تجاری دیگری در خانواده R9 عرضه شدند.

خانواده‌های Radeon R5، R7 و R9

AMD پس از Radeon HD از نام‌گذاری R5، R7 و R9 استفاده
کرد. R5 معمولاً برای محصولات اقتصادی، R7 برای مدل‌های
اقتصادی تا میان‌رده و R9 برای مدل‌های قدرتمندتر به کار
می‌رفت.

مدل‌هایی مانند R7 240، R7 250، R7 260X،
R9 270، R9 270X، R9 280X، R9 290 و R9 290X
در بازار سیستم‌های قدیمی و دست‌دوم دیده می‌شوند.

بعضی محصولات این خانواده نسخه تغییرنام‌یافته یا
اصلاح‌شده تراشه‌های نسل قبل بودند. بنابراین فقط بر
اساس نام R7 یا R9 نمی‌توان معماری، قدرت یا سن واقعی
کارت را تشخیص داد.

معماری Polaris و Radeon RX 400

Polaris یکی از شناخته‌شده‌ترین نسل‌های GCN است و در
کارت‌های Radeon RX 400 وارد بازار شد. RX 460،
RX 470 و RX 480 از مهم‌ترین کارت‌های این نسل هستند.

Polaris با هدف ارائه عملکرد مناسب و بهره‌وری انرژی
بهتر نسبت به بسیاری از نسل‌های قدیمی توسعه یافت.
محصولات این نسل هنوز در بازار کارت‌های گرافیک استوک
و دست‌دوم حضور قابل توجهی دارند.

Radeon RX 500 و محبوبیت RX 570 و RX 580

خانواده Radeon RX 500 ادامه و تکامل محصولات Polaris
بود. RX 550، RX 560، RX 570 و RX 580 از مدل‌های
اصلی این خانواده هستند.

RX 570 و RX 580 برای سال‌ها در سیستم‌های گیمینگ
اقتصادی بسیار محبوب بودند. این کارت‌ها معمولاً با
حافظه GDDR5 و ظرفیت‌های مختلف عرضه شدند.

تعداد زیادی از کارت‌های RX 470، RX 480، RX 570 و
RX 580 در دوره استخراج ارز دیجیتال استفاده شده‌اند؛
بنابراین هنگام خرید نمونه دست‌دوم باید وضعیت تراشه،
حافظه، فن‌ها، بایوس و تعمیرات احتمالی بررسی شود.


بررسی RX 570 و RX 580 دست‌دوم

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

نسخه‌های Radeon RX 500X و نام‌گذاری‌های مشابه

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

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

معماری Vega

Vega نسل پیشرفته‌تری از GCN بود و در کارت‌های مصرف‌کننده،
پردازنده‌های دارای گرافیک مجتمع، ورک‌استیشن‌ها و
شتاب‌دهنده‌های محاسباتی استفاده شد.

Radeon RX Vega 56، RX Vega 64 و Radeon VII از
کارت‌های شناخته‌شده این دوره هستند. بعضی از این
محصولات از حافظه HBM2 استفاده می‌کنند که پهنای باند
بالایی ارائه می‌دهد.

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


اهمیت Dual Channel برای گرافیک مجتمع Vega

استفاده از دو ماژول RAM سازگار برای فعال‌شدن حالت
دوکاناله می‌تواند پهنای باند حافظه در دسترس گرافیک
مجتمع را افزایش دهد. تأثیر آن در بازی و پردازش
گرافیکی بیشتر از استفاده اداری ساده دیده می‌شود.

Radeon VII

Radeon VII یک کارت رده‌بالا مبتنی بر خانواده Vega بود
که از حافظه HBM2 با ظرفیت بالا استفاده می‌کرد. این کارت
علاوه بر بازی، در بعضی پردازش‌های تولید محتوا و
محاسباتی مورد توجه قرار گرفت.

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

معماری RDNA چیست؟

RDNA معماری جدیدتر AMD برای کارت‌های گرافیک Radeon
است که بعد از دوره طولانی GCN معرفی شد. این معماری
با تمرکز بیشتر بر عملکرد گرافیکی، بازی و بهره‌وری
طراحی شده است.

ساختار واحدهای پردازشی RDNA نسبت به GCN تغییر کرد؛
به همین دلیل مقایسه تعداد Stream Processor میان
کارت‌های GCN و RDNA بدون توجه به معماری، نتیجه دقیقی
ایجاد نمی‌کند.

RDNA نسل اول و Radeon RX 5000

نخستین نسل RDNA در کارت‌های Radeon RX 5000 استفاده
شد. RX 5500 XT، RX 5600 XT، RX 5700 و RX 5700 XT
از مدل‌های مهم این خانواده هستند.

این نسل عملکرد مناسبی در بازی‌های Rasterization ارائه
می‌کرد، اما شتاب‌دهنده اختصاصی Ray Tracing مشابه
نسل‌های بعدی RDNA در آن وجود نداشت.

کارت‌های RX 5000 معمولاً از حافظه GDDR6 استفاده
می‌کنند و از نظر موتورهای رسانه، رابط PCI Express و
بهره‌وری نسبت به بسیاری از کارت‌های Polaris جدیدتر
هستند.

RDNA 2 و Radeon RX 6000

RDNA 2 در خانواده Radeon RX 6000 استفاده شد و
پشتیبانی سخت‌افزاری از Ray Tracing را به کارت‌های
Radeon مصرف‌کننده اضافه کرد.

RX 6400، RX 6500 XT، RX 6600، RX 6600 XT،
RX 6700 XT، RX 6800، RX 6800 XT و RX 6900 XT
از نمونه‌های شناخته‌شده این نسل هستند.

یکی از قابلیت‌های مهم این نسل Infinity Cache است.
این حافظه کش بزرگ روی تراشه می‌تواند بخشی از درخواست‌های
حافظه را بدون مراجعه مداوم به VRAM پاسخ دهد و به
افزایش پهنای باند مؤثر کمک کند.

محدودیت رابط در بعضی مدل‌های اقتصادی

بعضی کارت‌های اقتصادی RDNA 2 از تعداد محدودی Lane
در رابط PCI Express استفاده می‌کنند. در این شرایط،
نصب کارت روی مادربردی با نسل قدیمی‌تر PCIe ممکن است
در بعضی بازی‌ها یا کاربردها افت عملکرد بیشتری ایجاد
کند.


تعداد Lane را بررسی کنید

فقط عبارت PCIe 4.0 برای مقایسه کافی نیست. باید
مشخص شود کارت از رابط x16، x8 یا x4 استفاده
می‌کند و مادربرد نیز از چه نسل PCI Express
پشتیبانی می‌کند.

RDNA 3 و طراحی Chiplet

RDNA 3 در خانواده Radeon RX 7000 و برخی محصولات
حرفه‌ای Radeon Pro استفاده می‌شود. در بعضی GPUهای
رده‌بالای این نسل، بخش‌های مختلف تراشه با طراحی
Chiplet سازمان‌دهی شده‌اند.

RX 7600، RX 7700 XT، RX 7800 XT، RX 7900 GRE،
RX 7900 XT و RX 7900 XTX از مدل‌های شناخته‌شده
خانواده RX 7000 هستند.

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

RDNA 4 و Radeon RX 9000

RDNA 4 نسل جدیدتر معماری گرافیکی AMD برای کارت‌های
Radeon RX 9000 است. در این نسل تمرکز بیشتری بر
عملکرد Ray Tracing، شتاب‌دهی هوش مصنوعی، کیفیت
تصویر و بهره‌وری پردازشی دیده می‌شود.

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


RDNA برای چه کاربردی طراحی شده است؟

معماری RDNA عمدتاً برای پردازش گرافیکی، بازی،
نمایش تصویر، تولید محتوا و کاربردهای تعاملی طراحی
شده است؛ در حالی که CDNA بیشتر برای محاسبات
دیتاسنتری، هوش مصنوعی و HPC توسعه می‌یابد.

معماری CDNA چیست؟

CDNA خانواده معماری‌های محاسباتی AMD است که برای
شتاب‌دهنده‌های Instinct و بارهای کاری دیتاسنتری
طراحی شده است.

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

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

تفاوت RDNA و CDNA

مقایسه کلی معماری‌های RDNA و CDNA
معیار RDNA CDNA
کاربرد اصلی گرافیک، بازی و تولید محتوا هوش مصنوعی، HPC و دیتاسنتر
خانواده محصولات Radeon RX و بخشی از Radeon Pro AMD Instinct
خروجی تصویر معمولاً دارد ممکن است برای نمایش مستقیم طراحی نشده باشد
نوع حافظه رایج معمولاً GDDR معمولاً HBM در شتاب‌دهنده‌های رده‌بالا
نرم‌افزار هدف بازی، رندر، تدوین و برنامه‌های گرافیکی ROCm، یادگیری ماشین و محاسبات علمی
محیط نصب دسکتاپ، لپ‌تاپ یا ورک‌استیشن سرور و دیتاسنتر

معماری کارت‌های FirePro

خانواده FirePro در نسل‌های مختلف از GPUهای متفاوتی
استفاده کرده است. بعضی مدل‌های قدیمی بر پایه Terascale
و محصولات جدیدتر آن بر پایه نسل‌های GCN ساخته شده‌اند.

FirePro V3900، V4900، V5900 و V7900 از کارت‌های
قدیمی این خانواده هستند. مدل‌های FirePro W مانند
W4100، W5000، W5100، W7000، W7100، W8100 و
W9100 در ورک‌استیشن‌های حرفه‌ای دیده می‌شوند.

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

Radeon Pro WX

خانواده Radeon Pro WX پس از FirePro در بازار
ورک‌استیشن معرفی شد. مدل‌هایی مانند WX 2100،
WX 3100، WX 3200، WX 4100، WX 5100،
WX 7100، WX 8200 و WX 9100 در این گروه قرار
دارند.

بعضی مدل‌های Radeon Pro WX بر پایه Polaris و بعضی
مدل‌های رده‌بالا بر پایه Vega ساخته شده‌اند. بنابراین
قرارگرفتن دو کارت در خانواده WX به معنی یکسان‌بودن
معماری آن‌ها نیست.

Radeon Pro W Series

خانواده Radeon Pro W نسل جدیدتری از کارت‌های حرفه‌ای
AMD است. مدل‌هایی مانند W5500، W5700، W6400،
W6600، W6800 و محصولات W7000 در این گروه قرار
می‌گیرند.

این کارت‌ها برای نرم‌افزارهای CAD، طراحی، مدل‌سازی،
مهندسی، تولید محتوا، تدوین و محیط‌های چندنمایشگره
حرفه‌ای عرضه می‌شوند.

محصولات Radeon Pro W7000 بر پایه RDNA 3 هستند و
مدل‌های رده‌بالا می‌توانند ظرفیت حافظه زیادی برای
پروژه‌های پیچیده، مدل‌های سه‌بعدی بزرگ و محتوای
وضوح‌بالا فراهم کنند.

Radeon Pro در لپ‌تاپ‌ها

بعضی لپ‌تاپ‌های ورک‌استیشن از GPUهای Radeon Pro
موبایل استفاده می‌کنند. نام‌هایی مانند Radeon Pro WX
و Radeon Pro سری W ممکن است در لپ‌تاپ‌های حرفه‌ای
Dell Precision، HP ZBook یا Lenovo ThinkPad P
دیده شوند.

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

AMD در لپ‌تاپ‌های قدیمی

در لپ‌تاپ‌های قدیمی نام‌هایی مانند Radeon HD 6470M،
HD 7470M، HD 7570M، HD 7670M، HD 8570M،
R5 M230، R7 M260، R7 M360 و R9 M290X دیده
می‌شود.

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

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


پسوند M به معنی قدرت یکسان با دسکتاپ نیست

مدل‌های لپ‌تاپی با پسوند M معمولاً مشخصات، فرکانس،
توان و تعداد واحدهای پردازشی متفاوتی نسبت به
کارت‌های دسکتاپ مشابه دارند.

گرافیک مجتمع AMD

بسیاری از پردازنده‌های AMD دارای گرافیک مجتمع هستند.
این محصولات در دوره‌های مختلف از معماری‌هایی مانند
Terascale، GCN، Vega و RDNA استفاده کرده‌اند.

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

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

آیا Radeon برای AutoCAD مناسب است؟

بسیاری از کارت‌های Radeon می‌توانند AutoCAD و
نرم‌افزارهای دوبعدی را اجرا کنند. برای پروژه‌های سبک،
قدرت بسیار بالای GPU معمولاً ضروری نیست و عملکرد
تک‌هسته‌ای CPU نیز اهمیت زیادی دارد.

برای محیط‌های حرفه‌ای، پروژه‌های سه‌بعدی بزرگ و
سازمان‌هایی که پایداری و تأییدیه نرم‌افزاری اهمیت
بیشتری دارد، Radeon Pro می‌تواند انتخاب مناسب‌تری
نسبت به Radeon مصرف‌کننده باشد.

آیا Radeon برای SolidWorks مناسب است؟

کارت‌های Radeon مصرف‌کننده ممکن است SolidWorks را
اجرا کنند، اما برای محیط کاری حرفه‌ای باید سازگاری
درایور و فهرست سخت‌افزارهای تأییدشده نرم‌افزار بررسی
شود.

Radeon Pro با درایور حرفه‌ای و تمرکز بر نرم‌افزارهای
مهندسی، معمولاً انتخاب منطقی‌تری برای پروژه‌های حساس
SolidWorks، مونتاژهای بزرگ و محیط‌های سازمانی است.

آیا Radeon برای Blender مناسب است؟

کارت‌های Radeon می‌توانند در Viewport، مدل‌سازی و
رندر GPU در Blender استفاده شوند، اما پشتیبانی دقیق
به نسخه Blender، سیستم‌عامل، معماری GPU و Backend
محاسباتی بستگی دارد.

برای انتخاب کارت باید ظرفیت VRAM، عملکرد رندر، پشتیبانی
نرم‌افزاری و سازگاری افزونه‌ها بررسی شود. داشتن
Stream Processor بیشتر به‌تنهایی تضمین‌کننده رندر
سریع‌تر نیست.

آیا Radeon برای Maya مناسب است؟

کارت‌های Radeon و Radeon Pro می‌توانند در Viewport،
مدل‌سازی، انیمیشن و برخی موتورهای رندر Maya استفاده
شوند. نوع موتور رندر تعیین می‌کند که GPU از چه رابط
محاسباتی باید پشتیبانی کند.

در پروژه حرفه‌ای، Radeon Pro به دلیل درایورهای
سازمانی و تمرکز بر پایداری می‌تواند نسبت به یک Radeon
گیمینگ انتخاب قابل پیش‌بینی‌تری باشد.

آیا AMD برای هوش مصنوعی مناسب است؟

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

حجم VRAM، نوع معماری، سیستم‌عامل، نسخه فریم‌ورک،
پشتیبانی ROCm و وجود بسته‌های آماده برای نرم‌افزار
موردنظر اهمیت زیادی دارند.

شتاب‌دهنده‌های Instinct برای پروژه‌های سروری و
دیتاسنتری طراحی شده‌اند و نباید فقط بر اساس ظرفیت
حافظه با کارت‌های دسکتاپ مقایسه شوند.

نرم‌افزار ROCm چیست؟

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

پشتیبانی ROCm برای همه کارت‌های قدیمی یا همه
سیستم‌عامل‌ها یکسان نیست. پیش از خرید GPU برای
هوش مصنوعی باید فهرست سخت‌افزار و نرم‌افزار سازگار
با نسخه مورد استفاده بررسی شود.

تفاوت Stream Processor و CUDA Core

Stream Processor نام رایج واحدهای پردازشی در مشخصات
GPUهای AMD است، در حالی که CUDA Core اصطلاح مورد
استفاده NVIDIA محسوب می‌شود.

این دو عدد را نمی‌توان به‌صورت یک‌به‌یک با هم مقایسه
کرد؛ زیرا معماری، زمان‌بندی دستورها، فرکانس، پهنای
حافظه و ساختار واحدهای پردازشی دو شرکت متفاوت است.

تشخیص معماری کارت گرافیک AMD

  1. مدل کامل کارت را از Device Manager، GPU-Z یا
    مشخصات سازنده پیدا کنید.
  2. شناسه سخت‌افزاری GPU را در صورت وجود چند نسخه
    متفاوت بررسی کنید.
  3. نوع حافظه، ظرفیت VRAM و عرض باس را ثبت کنید.
  4. مشخص کنید کارت دسکتاپ، لپ‌تاپی، ورک‌استیشن یا
    شتاب‌دهنده سروری است.
  5. معماری دقیق تراشه را با مدل تجاری تطبیق دهید.
  6. آخرین نسخه درایور و سیستم‌عامل پشتیبانی‌شده را
    بررسی کنید.
  7. برای نرم‌افزارهای حرفه‌ای، فهرست سازگاری و
    تأییدیه‌های ISV را کنترل کنید.

راهنمای کلی خرید کارت AMD دست‌دوم

  • سلامت خروجی‌های تصویر را آزمایش کنید.
  • دمای بیکاری و دمای تحت بار را بررسی کنید.
  • کارت را برای Artifacts، خطوط رنگی و خاموش‌شدن
    تصویر آزمایش کنید.
  • سرعت و صدای فن‌ها را کنترل کنید.
  • مشخصات واقعی کارت را با GPU-Z بخوانید.
  • نسخه BIOS کارت را با مدل اصلی تطبیق دهید.
  • وضعیت کانکتورهای برق و مدار تغذیه را بررسی کنید.
  • آثار بازشدن، لحیم‌کاری یا تعمیر حافظه را کنترل کنید.
  • توان موردنیاز کارت را با پاور سیستم مقایسه کنید.
  • پشتیبانی درایور برای سیستم‌عامل خود را بررسی کنید.


معماری را در کنار وضعیت فیزیکی کارت بسنجید

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

سوالات متداول درباره معماری‌های کارت گرافیک AMD

تفاوت ATI و AMD Radeon چیست؟

ATI شرکت سازنده اصلی برند Radeon بود.
پس از پیوستن ATI به AMD، محصولات گرافیکی
با نام AMD Radeon ادامه پیدا کردند.

آیا RX 580 هنوز برای بازی مناسب است؟

RX 580 می‌تواند بعضی بازی‌ها را با تنظیمات
متناسب اجرا کند، اما مصرف برق، عمر کارت،
وضعیت درایور و محدودیت عملکرد آن در بازی‌های
جدید باید در نظر گرفته شود.

تفاوت RX 570 و RX 580 چیست؟

RX 580 معمولاً واحدهای پردازشی و عملکرد
بیشتری دارد، اما نسخه حافظه، فرکانس،
سیستم خنک‌کننده و وضعیت سلامت کارت نیز
در نتیجه نهایی مؤثر است.

آیا کارت‌های FirePro برای بازی مناسب هستند؟

FirePro برای نرم‌افزارهای حرفه‌ای طراحی
شده است. ممکن است بعضی بازی‌ها را اجرا
کند، اما درایور، فرکانس و طراحی آن معمولاً
برای بازی بهینه نشده است.

Radeon Pro چه تفاوتی با Radeon دارد؟

Radeon بیشتر برای بازی و استفاده عمومی
طراحی می‌شود؛ Radeon Pro بر درایور حرفه‌ای،
پایداری، حافظه، محیط‌های چندنمایشگره و
سازگاری با نرم‌افزارهای کاری تمرکز دارد.

آیا Stream Processor بیشتر همیشه بهتر است؟

خیر. این عدد فقط در کنار معماری، فرکانس،
پهنای باند حافظه، تعداد ROP و محدودیت توان
معنا پیدا می‌کند.

تفاوت GCN و RDNA چیست؟

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

کدام نسل AMD از Ray Tracing سخت‌افزاری پشتیبانی می‌کند؟

پشتیبانی سخت‌افزاری Ray Tracing در
کارت‌های مصرف‌کننده Radeon از معماری
RDNA 2 وارد خانواده RX 6000 شد.

Infinity Cache چیست؟

Infinity Cache نوعی حافظه کش روی GPU است
که می‌تواند تعداد مراجعه‌های مستقیم به
VRAM را کاهش دهد و پهنای باند مؤثر را
افزایش دهد.

آیا Radeon RX برای هوش مصنوعی مناسب است؟

برخی کارت‌های Radeon برای هوش مصنوعی قابل
استفاده‌اند، اما باید پشتیبانی ROCm،
سیستم‌عامل، فریم‌ورک، معماری و ظرفیت VRAM
پیش از خرید بررسی شود.

تفاوت Radeon و AMD Instinct چیست؟

Radeon برای پردازش گرافیکی و نمایش تصویر
طراحی می‌شود؛ Instinct شتاب‌دهنده محاسباتی
مخصوص سرور، هوش مصنوعی و HPC است.

آیا گرافیک مجتمع Vega حافظه اختصاصی دارد؟

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

معماری‌های گرافیکی Intel؛ از Intel HD Graphics تا Iris Xe و Arc

شرکت Intel سال‌ها یکی از بزرگ‌ترین تأمین‌کنندگان
پردازنده‌های گرافیکی مجتمع بوده است؛ زیرا تعداد زیادی
از پردازنده‌های لپ‌تاپ و دسکتاپ این شرکت به گرافیک
داخلی مجهز هستند.

نام‌هایی مانند Intel HD Graphics، Intel UHD Graphics،
Iris Graphics و Iris Xe بیشتر در پردازنده‌های دارای
گرافیک مجتمع دیده می‌شوند؛ در حالی که خانواده Intel Arc
شامل محصولات گرافیکی مجزا برای بازی، تولید محتوا،
ورک‌استیشن و بعضی پردازش‌های هوش مصنوعی است.

شناخت نسل گرافیک Intel به‌خصوص هنگام خرید لپ‌تاپ
استوک اهمیت زیادی دارد. عبارت کلی
Intel HD Graphics
به‌تنهایی قدرت GPU را مشخص نمی‌کند؛ زیرا مدل‌هایی مانند
HD 3000، HD 4000، HD 4600 و HD 520 از نسل‌ها و
قابلیت‌های کاملاً متفاوتی هستند.


گرافیک مجتمع Intel چیست؟

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

خانواده‌های اصلی گرافیک Intel

Intel HD Graphics

این نام برای چندین نسل از گرافیک‌های مجتمع Intel
استفاده شد. مدل‌های HD 2000، HD 3000،
HD 4000، HD 4400، HD 4600، HD 520 و
HD 620 از نمونه‌های شناخته‌شده این خانواده‌اند.

Intel UHD Graphics

نام UHD در نسل‌های بعدی برای بسیاری از
گرافیک‌های مجتمع Intel استفاده شد. UHD 600،
UHD 620، UHD 630 و مدل‌های جدیدتر در این
گروه قرار دارند.

Intel Iris و Iris Pro

خانواده Iris معمولاً نسبت به مدل‌های عادی
Intel HD همان نسل، واحدهای پردازشی بیشتر یا
پیکربندی قدرتمندتری داشت.

بعضی مدل‌های Iris Pro از حافظه کش پرسرعت
اضافی برای افزایش پهنای باند مؤثر استفاده
می‌کردند.

Intel Iris Xe

Iris Xe نسل جدیدتری از گرافیک‌های Intel است
که در تعدادی از پردازنده‌های لپ‌تاپی و بعضی
محصولات مجزا استفاده شده است.

عملکرد آن به مدل پردازنده، تعداد واحدهای
اجرایی، توان مصرفی و پیکربندی RAM وابسته است.

Intel Arc

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

Arc A-Series و Arc B-Series از مهم‌ترین نسل‌های
این خانواده محسوب می‌شوند.

Intel Arc Pro

Arc Pro برای ورک‌استیشن‌ها، نرم‌افزارهای
حرفه‌ای، طراحی، تولید محتوا و محیط‌های سازمانی
عرضه می‌شود.

این محصولات را می‌توان رقیبی برای بعضی مدل‌های
NVIDIA RTX Professional و AMD Radeon Pro دانست.

جدول کلی نسل‌های مهم گرافیک Intel

نسل‌های مهم گرافیک Intel و نمونه محصولات
خانواده نمونه مدل‌ها دوره استفاده رایج کاربرد تقریبی
Intel GMA GMA 950، GMA X3100، GMA 4500 لپ‌تاپ‌ها و سیستم‌های بسیار قدیمی نمایش تصویر، کار اداری و ویدئوی قدیمی
Intel HD Graphics نسل اول Intel HD Graphics پردازنده‌های قدیمی Core استفاده عمومی و نمایش تصویر
HD 2000 و HD 3000 Intel HD 2000، HD 3000 نسل دوم پردازنده‌های Core کار اداری، ویدئو و بازی‌های بسیار سبک
HD 2500 و HD 4000 Intel HD 2500، HD 4000 نسل سوم پردازنده‌های Core کار عمومی، ویدئو و نرم‌افزارهای سبک
HD 4200 تا HD 5200 HD 4400، HD 4600، Iris 5100،
Iris Pro 5200
نسل چهارم پردازنده‌های Core کاربری عمومی، طراحی سبک و بعضی بازی‌ها
HD 500 Series HD 520، HD 530، Iris 540،
Iris Pro 580
نسل‌های میانی پردازنده‌های Core استفاده روزمره، ویدئو و پردازش سبک
UHD Graphics UHD 600، UHD 620، UHD 630 لپ‌تاپ‌ها و دسکتاپ‌های چند نسل اخیر کار اداری، ویدئو و بازی‌های سبک
Iris Plus Iris Plus 640، 645، G7 لپ‌تاپ‌های باریک و حرفه‌ای تولید محتوا و گرافیک سبک تا متوسط
Iris Xe Iris Xe Graphics پردازنده‌های جدیدتر لپ‌تاپی کار عمومی، تولید محتوا و بازی سبک
Arc A-Series A310، A380، A580، A750، A770 نسل نخست کارت‌های Arc مجزا بازی، تولید محتوا، Ray Tracing و AI
Arc B-Series مدل‌های خانواده Arc B نسل دوم کارت‌های Arc مجزا بازی، تولید محتوا و پردازش هوش مصنوعی
Arc Pro Arc Pro A و Arc Pro B ورک‌استیشن‌های جدید Intel CAD، تولید محتوا و نرم‌افزارهای حرفه‌ای

Intel GMA چیست؟

پیش از رایج‌شدن نام Intel HD Graphics، بسیاری از
سیستم‌های Intel از گرافیک‌هایی با نام
Graphics Media Accelerator
یا GMA استفاده می‌کردند.

GMA 950، GMA X3100 و GMA 4500 از نمونه‌های
شناخته‌شده این خانواده هستند. این GPUها برای نمایش
محیط سیستم‌عامل، ویدئوهای قدیمی و کارهای اداری ساده
طراحی شده بودند.

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

Intel HD Graphics 2000 و 3000

HD 2000 و HD 3000 در بسیاری از لپ‌تاپ‌های نسل دوم
پردازنده‌های Core دیده می‌شوند. لپ‌تاپ‌هایی مانند
بعضی مدل‌های Dell Latitude، HP ProBook و Lenovo
ThinkPad قدیمی ممکن است از HD 3000 استفاده کنند.

HD 3000 برای کارهای اداری، مرور وب، پخش محتوای سبک و
اجرای نرم‌افزارهای قدیمی مناسب بود؛ اما برای بازی‌های
جدید، تدوین سنگین یا طراحی سه‌بعدی امروزی بسیار محدود
است.

این گرافیک از حافظه RAM سیستم استفاده می‌کند و مقدار
حافظه نمایش‌داده‌شده در ویندوز نباید با VRAM واقعی
کارت گرافیک مجزا اشتباه گرفته شود.


محدودیت درایور HD 3000

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

Intel HD Graphics 4000

HD 4000 در تعداد زیادی از لپ‌تاپ‌های نسل سوم پردازنده‌های
Core دیده می‌شود و نسبت به HD 3000 قدرت پردازشی و
قابلیت‌های گرافیکی بهتری دارد.

این GPU می‌تواند برای کار اداری، تماشای ویدئو،
برنامه‌نویسی، آموزش، ویرایش سبک تصویر و بعضی بازی‌های
قدیمی مورد استفاده قرار گیرد.

بااین‌حال محدودیت درایور، حافظه مشترک و قدرت پردازشی
پایین باعث می‌شود HD 4000 برای نرم‌افزارهای سه‌بعدی
جدید یا پروژه‌های حرفه‌ای گزینه مناسبی نباشد.

Intel HD Graphics 4400 و 4600

HD 4400 و HD 4600 در بسیاری از لپ‌تاپ‌ها و
کامپیوترهای نسل چهارم Intel استفاده شدند.

HD 4600 در مقایسه با HD 4000 معمولاً عملکرد بهتری
در پردازش گرافیکی، ویدئو و بعضی بازی‌های سبک ارائه
می‌کند.

این GPU هنوز هم در لپ‌تاپ‌های استوک اداری و بعضی
ورک‌استیشن‌های قدیمی دیده می‌شود. در سیستم‌هایی که
Quadro یا GeForce مجزا دارند، HD 4600 ممکن است برای
کارهای سبک و مدیریت مصرف برق استفاده شود.

Intel Iris و Iris Pro

خانواده Iris برای ارائه عملکرد گرافیکی بالاتر از
مدل‌های عادی Intel HD همان نسل ساخته شد.

بعضی مدل‌های Iris Pro دارای حافظه کش داخلی پرسرعت
بودند که با نام‌هایی مانند eDRAM شناخته می‌شد و به
افزایش پهنای باند مؤثر کمک می‌کرد.

Iris Pro 5200، Iris Pro 580 و بعضی مدل‌های Iris
Plus از نمونه‌های شناخته‌شده این خانواده هستند.

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

Intel HD Graphics 520 و 620

HD 520 و HD 620 در تعداد زیادی از لپ‌تاپ‌های اداری
و باریک استفاده شده‌اند.

این GPUها برای مرور وب، نرم‌افزارهای Office، پخش
ویدئو، برنامه‌نویسی و طراحی سبک مناسب‌اند.

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

Intel UHD Graphics 600 و 620

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

UHD 620 در بسیاری از لپ‌تاپ‌های تجاری و اداری استفاده
شده و برای کارهای عمومی، فتوشاپ سبک، برنامه‌نویسی و
نمایش ویدئو مناسب است.

بااین‌حال عبارت UHD به‌تنهایی قدرت GPU را مشخص نمی‌کند.
مدل پردازنده، تعداد واحدهای اجرایی، فرکانس و نوع RAM
باید بررسی شوند.

Intel Iris Xe چیست؟

Iris Xe نسل جدیدتری از گرافیک‌های Intel است و در
تعدادی از پردازنده‌های لپ‌تاپی و محصولات مجزا استفاده
شده است.

این GPU نسبت به بسیاری از مدل‌های قدیمی HD و UHD،
واحدهای اجرایی بیشتر، موتور رسانه پیشرفته‌تر و توان
گرافیکی بالاتری دارد.

Iris Xe می‌تواند برای تولید محتوا، تدوین سبک، طراحی،
برنامه‌نویسی، شتاب‌دهی بعضی نرم‌افزارها و اجرای
بازی‌های سبک یا رقابتی مورد استفاده قرار گیرد.


RAM دوکاناله برای Iris Xe مهم است

عملکرد Iris Xe در بسیاری از لپ‌تاپ‌ها به پهنای
باند RAM وابسته است. پیکربندی دوکاناله یا حافظه
سریع‌تر می‌تواند نسبت به RAM تک‌کاناله عملکرد
بهتری ایجاد کند.

Iris Xe MAX چیست؟

Iris Xe MAX یک GPU مجزای کم‌مصرف Intel بود که در
تعدادی از لپ‌تاپ‌ها و کارت‌های محدود دسکتاپ استفاده شد.

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

Iris Xe MAX را نباید صرفاً بر اساس نام با Iris Xe
مجتمع مقایسه کرد؛ زیرا نوع حافظه، توان و پیکربندی آن
متفاوت است.

معماری Xe چیست؟

Xe نام خانواده‌ای از معماری‌های گرافیکی Intel است که
در محصولات مجتمع، کارت‌های Arc و شتاب‌دهنده‌های
مختلف استفاده می‌شود.

شاخه‌های مختلف Xe برای اهداف متفاوت طراحی شده‌اند؛
از گرافیک کم‌مصرف لپ‌تاپی تا GPUهای مجزا، ورک‌استیشن
و پردازش‌های دیتاسنتری.

Xe-LP

Xe-LP یا Xe Low Power برای گرافیک‌های کم‌مصرف و
پردازنده‌های لپ‌تاپی طراحی شد.

بسیاری از محصولات Iris Xe مجتمع و بعضی GPUهای مجزای
کم‌مصرف بر اساس این خانواده ساخته شده‌اند.

تمرکز Xe-LP بر بهره‌وری انرژی، پردازش رسانه،
نمایشگرها و عملکرد گرافیکی مناسب در محدودیت توان
لپ‌تاپ است.

Xe-HPG و Arc Alchemist

نخستین نسل اصلی کارت‌های Arc با نام Arc A-Series
شناخته می‌شود و از معماری
Xe-HPG
استفاده می‌کند.

عبارت HPG به معماری گرافیکی پرفورمنس بالا اشاره دارد.
این معماری شامل Xe Core، واحدهای شتاب‌دهی هوش مصنوعی
و واحدهای اختصاصی Ray Tracing است.

Arc A310، A380، A580، A750 و A770 از مدل‌های
شناخته‌شده این نسل هستند.

Arc A310

Arc A310 یک کارت اقتصادی برای خروجی تصویر، پردازش
رسانه، بعضی کاربردهای تولید محتوا و بازی سبک است.

این کارت ممکن است در سیستم‌های کوچک یا دستگاه‌هایی
که به موتور رسانه جدید و خروجی‌های مدرن نیاز دارند،
مورد استفاده قرار گیرد.

Arc A380

Arc A380 نسبت به A310 منابع پردازشی بیشتری دارد و
برای بازی‌های سبک، تولید محتوا و شتاب‌دهی ویدئو مناسب‌تر
است.

Arc A580، A750 و A770

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


اهمیت Resizable BAR در Intel Arc

بسیاری از کارت‌های Arc برای دستیابی به عملکرد
مناسب به فعال‌بودن Resizable BAR و پلتفرم سازگار
وابسته‌اند. در مادربردها یا پردازنده‌های قدیمی،
عملکرد ممکن است کمتر از انتظار باشد.

Xe2 و Arc Battlemage

نسل دوم کارت‌های Arc با خانواده Arc B-Series شناخته
می‌شود و از معماری Xe2 استفاده می‌کند.

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

این نسل از Xe Coreهای جدیدتر، موتورهای هوش مصنوعی XMX
و قابلیت‌های گرافیکی و رسانه‌ای بهبودیافته استفاده
می‌کند.

Xe Core چیست؟

Xe Core یکی از بلوک‌های اصلی پردازش در GPUهای جدید
Intel است.

هر Xe Core شامل منابعی برای محاسبات برداری، پردازش
گرافیکی و در نسل‌های سازگار، واحدهای ماتریسی و
شتاب‌دهی هوش مصنوعی است.

تعداد Xe Core را نمی‌توان مستقیماً با تعداد CUDA Core
یا Stream Processor مقایسه کرد؛ زیرا ساختار داخلی
معماری‌های NVIDIA، AMD و Intel متفاوت است.

XMX چیست؟

XMX یا Xe Matrix Extensions واحدهای ماتریسی Intel
برای افزایش سرعت بعضی پردازش‌های هوش مصنوعی و
محاسباتی هستند.

فناوری XeSS می‌تواند در سخت‌افزارهای سازگار از این
واحدها برای بازسازی تصویر و افزایش کارایی استفاده کند.

Ray Tracing در Intel Arc

کارت‌های Arc دارای واحدهای اختصاصی برای محاسبات
Ray Tracing هستند.

عملکرد نهایی Ray Tracing به مدل GPU، بازی، درایور،
وضوح تصویر، تنظیمات کیفیت و استفاده از فناوری‌هایی
مانند XeSS وابسته است.

XeSS چیست؟

XeSS فناوری افزایش وضوح و بازسازی تصویر Intel است.
این فناوری بازی را در وضوح داخلی پایین‌تر رندر می‌کند
و سپس با استفاده از الگوریتم‌های پیشرفته، تصویر نهایی
را به وضوح بالاتر بازسازی می‌کند.

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

موتور رسانه Intel

یکی از نقاط مهم بسیاری از GPUهای Intel، موتورهای
سخت‌افزاری رمزگذاری و رمزگشایی ویدئو است.

این موتور می‌تواند در پخش ویدئو، تدوین، استریم،
تبدیل فایل و خروجی گرفتن از نرم‌افزارهای تولید محتوا
نقش مهمی داشته باشد.

پشتیبانی از کدک‌هایی مانند H.264، H.265 و AV1 به
نسل GPU و نوع موتور رسانه وابسته است.

Quick Sync Video چیست؟

Quick Sync Video فناوری سخت‌افزاری Intel برای
رمزگذاری و رمزگشایی ویدئو است.

نرم‌افزارهایی مانند برنامه‌های تدوین، تبدیل ویدئو،
استریم و تماس تصویری می‌توانند در صورت پشتیبانی از
این قابلیت استفاده کنند.

وجود Quick Sync به‌تنهایی تضمین نمی‌کند که تمام
کدک‌ها یا فرمت‌ها پشتیبانی شوند. نسل پردازنده و موتور
رسانه باید بررسی شود.

Intel Arc Pro چیست؟

Arc Pro خانواده GPUهای حرفه‌ای Intel برای
ورک‌استیشن‌ها، طراحی، تولید محتوا و نرم‌افزارهای
سازمانی است.

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

خانواده Arc Pro شامل محصولات مبتنی بر نسل‌های Arc A
و Arc B است.

مقایسه Intel Arc Pro با Quadro و Radeon Pro

مقایسه کلی GPUهای حرفه‌ای Intel، NVIDIA و AMD
خانواده شرکت کاربرد اصلی نکته مهم
Arc Pro Intel ورک‌استیشن، تولید محتوا و CAD موتور رسانه قوی و معماری Xe
Quadro / RTX Professional NVIDIA مهندسی، رندر، AI و نرم‌افزار حرفه‌ای اکوسیستم CUDA و درایورهای حرفه‌ای گسترده
Radeon Pro AMD CAD، طراحی، تولید محتوا و نمایشگر حرفه‌ای درایور حرفه‌ای و خانواده‌های RDNA

آیا Intel HD برای AutoCAD مناسب است؟

Intel HD و UHD می‌توانند برای نقشه‌کشی دوبعدی،
آموزش و پروژه‌های سبک AutoCAD قابل استفاده باشند.

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

HD 3000 و HD 4000 برای نسخه‌های جدید نرم‌افزار محدود
هستند و باید سازگاری DirectX، OpenGL و درایور بررسی
شود.

آیا Intel Iris Xe برای Photoshop مناسب است؟

Iris Xe برای ویرایش عکس، شتاب‌دهی رابط کاربری و بسیاری
از قابلیت‌های Photoshop مناسب است؛ به‌خصوص اگر دستگاه
RAM کافی و حافظه دوکاناله داشته باشد.

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

آیا Intel Arc برای Premiere Pro مناسب است؟

کارت‌های Arc به دلیل موتور رسانه و پشتیبانی از
رمزگذاری و رمزگشایی سخت‌افزاری می‌توانند در تدوین و
خروجی ویدئو مفید باشند.

عملکرد دقیق به نسخه Premiere Pro، کدک ویدئو، درایور،
پردازنده مرکزی، حافظه RAM و تنظیمات پروژه وابسته است.

آیا Intel Arc برای Blender مناسب است؟

کارت‌های Arc می‌توانند در Viewport، مدل‌سازی و بعضی
موتورهای رندر Blender استفاده شوند.

پیش از خرید باید پشتیبانی نسخه Blender، Backend
رندر، درایور و ظرفیت VRAM کارت بررسی شود.

آیا Intel Arc برای هوش مصنوعی مناسب است؟

GPUهای Arc دارای واحدهای XMX برای پردازش‌های ماتریسی
و هوش مصنوعی هستند.

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

Intel oneAPI چیست؟

oneAPI مجموعه‌ای از ابزارها و مدل‌های برنامه‌نویسی
Intel برای استفاده از CPU، GPU و سایر شتاب‌دهنده‌ها
است.

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

تفاوت Intel Arc و گرافیک مجتمع Intel

مقایسه Intel Arc با گرافیک مجتمع Intel
معیار گرافیک مجتمع Intel Intel Arc مجزا
محل قرارگیری داخل پردازنده یا مجموعه پردازشی GPU یا کارت مجزا
حافظه استفاده از RAM سیستم معمولاً حافظه گرافیکی اختصاصی
توان پردازشی سبک تا متوسط متوسط تا سنگین
مصرف برق کمتر بیشتر
Ray Tracing وابسته به نسل و معمولاً محدود واحدهای اختصاصی در Arc
هوش مصنوعی قابلیت‌های محدودتر استفاده از XMX در مدل‌های سازگار

راهنمای خرید لپ‌تاپ با گرافیک Intel

  • مدل دقیق پردازنده و GPU را بررسی کنید.
  • فقط به عبارت Intel HD یا UHD اکتفا نکنید.
  • تعداد کانال‌های RAM را بررسی کنید.
  • امکان ارتقای RAM را کنترل کنید.
  • نسخه درایور و سیستم‌عامل سازگار را بررسی کنید.
  • پشتیبانی سخت‌افزاری از کدک‌های ویدئویی را کنترل کنید.
  • برای بازی، نتایج همان GPU و همان پیکربندی RAM را
    بررسی کنید.
  • برای کار حرفه‌ای، وجود GPU مجزا را در نظر بگیرید.

راهنمای خرید Intel Arc دست‌دوم

  • سازگاری مادربرد با Resizable BAR را بررسی کنید.
  • ظرفیت و نوع حافظه VRAM را کنترل کنید.
  • کارت را با آخرین درایور پایدار آزمایش کنید.
  • خروجی‌های HDMI و DisplayPort را تست کنید.
  • دمای GPU و حافظه را تحت بار بررسی کنید.
  • عملکرد کارت را در DirectX 11 و DirectX 12 آزمایش کنید.
  • سلامت فن‌ها و عدم وجود صدای غیرعادی را کنترل کنید.
  • توان پاور و کانکتورهای موردنیاز را بررسی کنید.
  • عملکرد موتور ویدئو و AV1 را در صورت نیاز آزمایش کنید.


Arc روی سیستم بسیار قدیمی ممکن است انتخاب مناسبی نباشد

نبود Resizable BAR، پردازنده قدیمی، نسخه قدیمی
PCI Express یا درایور ناسازگار می‌تواند باعث کاهش
عملکرد کارت Arc شود. سازگاری کل پلتفرم باید پیش از
خرید بررسی شود.

سوالات متداول درباره گرافیک‌های Intel

آیا Intel HD Graphics کارت گرافیک مجزا است؟

معمولاً خیر. Intel HD Graphics داخل
پردازنده قرار دارد و از RAM سیستم استفاده
می‌کند.

تفاوت Intel HD و Intel UHD چیست؟

UHD نام تجاری نسل‌های جدیدتر است؛ اما
نام به‌تنهایی قدرت GPU را مشخص نمی‌کند.
مدل دقیق و نسل پردازنده باید بررسی شود.

آیا HD 4000 برای Windows جدید مناسب است؟

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

آیا HD 4600 برای AutoCAD کافی است؟

برای نقشه‌کشی دوبعدی و پروژه‌های سبک ممکن
است کافی باشد؛ اما برای مدل‌سازی سه‌بعدی
و پروژه‌های بزرگ محدود است.

آیا Iris Xe برای بازی مناسب است؟

برای بعضی بازی‌های سبک و رقابتی مناسب است.
عملکرد آن به مدل پردازنده، توان و RAM
دوکاناله وابسته است.

Intel Arc چیست؟

Arc خانواده GPUهای مجزای Intel برای بازی،
تولید محتوا، Ray Tracing و پردازش هوش
مصنوعی است.

تفاوت Arc A-Series و B-Series چیست؟

A-Series از معماری Xe-HPG و نسل Alchemist
استفاده می‌کند؛ B-Series نسل جدیدتر مبتنی
بر Xe2 است.

آیا Intel Arc به Resizable BAR نیاز دارد؟

برای دستیابی به عملکرد مناسب، فعال‌بودن
Resizable BAR در بسیاری از سیستم‌ها بسیار
مهم است.

XeSS چیست؟

XeSS فناوری بازسازی و افزایش وضوح تصویر
Intel برای افزایش نرخ فریم در بازی‌های
پشتیبانی‌شده است.

آیا Intel Arc برای تدوین مناسب است؟

بله، موتور رسانه و پشتیبانی از کدک‌های
جدید می‌تواند در تدوین و خروجی ویدئو مفید
باشد؛ سازگاری نرم‌افزار باید بررسی شود.

Arc Pro چه تفاوتی با Arc معمولی دارد؟

Arc Pro برای ورک‌استیشن و نرم‌افزارهای
حرفه‌ای طراحی شده و از درایورها و قابلیت‌های
سازمانی متفاوتی استفاده می‌کند.

آیا می‌توان CUDA را روی Intel Arc اجرا کرد؟

CUDA فناوری اختصاصی NVIDIA است. برای Intel
باید از ابزارها و Backendهای سازگار مانند
oneAPI یا رابط‌های پشتیبانی‌شده نرم‌افزار
استفاده شود.


فصل ۱۵

ساختمان داخلی GPU و اجزای پردازنده گرافیکی

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

ساختمان کلی GPU

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

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

ساختمان دقیق GPU میان NVIDIA، AMD و Intel متفاوت
است؛ اما بیشتر پردازنده‌های گرافیکی مدرن از
بخش‌هایی با وظایف مشابه تشکیل می‌شوند.

تفاوت تراشه GPU با کل کارت گرافیک

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

داخل تراشه GPU

  • واحدهای Shader
  • هسته‌های CUDA یا واحدهای معادل
  • واحدهای Tensor یا AI
  • واحدهای Ray Tracing
  • TMU و ROP
  • حافظه‌های کش
  • زمان‌بندها و Registerها
  • کنترل‌کننده‌های حافظه

روی کارت گرافیک

  • تراشه GPU
  • تراشه‌های VRAM
  • مدار تنظیم ولتاژ
  • برد مدار چاپی
  • هیت‌سینک و فن
  • کانکتورهای برق
  • درگاه‌های تصویر
  • BIOS یا Firmware کارت

Die یا سطح سیلیکونی GPU چیست؟

واژه
Die
به قطعه فیزیکی سیلیکون گفته می‌شود که مدارهای
پردازنده گرافیکی روی آن ساخته شده‌اند.

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

Die زیر محافظ یا پکیج تراشه قرار دارد و از طریق
اتصالات بسیار ریز با برد کارت گرافیک و حافظه‌های
اطراف آن ارتباط برقرار می‌کند.


ترانزیستور چیست؟

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

طراحی یکپارچه و Chiplet

در طراحی یکپارچه یا
Monolithic،
بیشتر اجزای اصلی GPU روی یک Die قرار دارند.

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

مقایسه طراحی یکپارچه و Chiplet در GPU
معیار طراحی یکپارچه طراحی Chiplet
تعداد قطعات سیلیکونی معمولاً یک Die اصلی دو یا چند بخش مرتبط
ارتباط داخلی مسیرهای داخل همان Die ارتباط میان Chipletها
انعطاف طراحی محدودتر امکان ترکیب بخش‌های متفاوت
پیچیدگی طراحی تراشه بزرگ طراحی اتصال و هماهنگی چند تراشه
نمونه کاربرد بسیاری از GPUهای NVIDIA، AMD و Intel بعضی GPUهای جدید AMD و شتاب‌دهنده‌های پیشرفته

Front End یا بخش ورودی GPU

بخش ورودی GPU دستورها و داده‌های ارسالی از CPU،
درایور و نرم‌افزار را دریافت و برای پردازش آماده
می‌کند.

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

نام و ساختار دقیق Front End میان معماری‌های مختلف
متفاوت است، اما معمولاً وظایفی مانند دریافت
Command، مدیریت صف‌ها و آماده‌سازی پردازش را بر
عهده دارد.

Command Processor چیست؟

Command Processor دستورهای ارسال‌شده از برنامه
و درایور را می‌خواند و آن‌ها را به عملیات قابل
اجرا برای بخش‌های مختلف GPU تبدیل می‌کند.

این دستورها می‌توانند مربوط به رسم یک صحنه،
اجرای یک Shader، انتقال داده، محاسبه هوش مصنوعی
یا پردازش ویدئو باشند.

GPUهای جدید می‌توانند چند صف کاری را مدیریت کنند؛
برای نمونه، یک صف برای گرافیک و صف دیگری برای
Compute یا انتقال داده.

Geometry Engine چیست؟

موتور هندسه اطلاعات مربوط به رأس‌ها، خطوط،
مثلث‌ها و ساختار اولیه مدل‌های سه‌بعدی را پردازش
می‌کند.

بیشتر مدل‌های سه‌بعدی از تعداد زیادی مثلث ساخته
می‌شوند. موتور هندسه موقعیت رأس‌ها را با توجه به
دوربین، زاویه دید و تبدیل‌های سه‌بعدی محاسبه
می‌کند.

برخی وظایف هندسی در Shaderهای قابل برنامه‌ریزی
اجرا می‌شوند و بعضی عملیات نیز توسط واحدهای ثابت
یا اختصاصی معماری انجام می‌گیرند.

Tessellation Engine چیست؟

Tessellation فرایندی است که سطح هندسی ساده را به
تعداد بیشتری چندضلعی کوچک‌تر تقسیم می‌کند.

این کار می‌تواند جزئیات مدل، سطح زمین، چهره،
پارچه یا اشیای منحنی را افزایش دهد؛ بدون اینکه
مدل اولیه از ابتدا با تعداد بسیار زیادی Polygon
ساخته شده باشد.


Tessellation بیشتر همیشه بهتر نیست

افزایش بیش‌ازحد جزئیات هندسی می‌تواند بار
پردازشی GPU را بالا ببرد، در حالی که تفاوت
بصری آن در فاصله زیاد یا وضوح پایین محسوس
نباشد.

Raster Engine چیست؟

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

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

Rasterization روش اصلی تولید تصویر در بیشتر
بازی‌ها و نرم‌افزارهای سه‌بعدی است؛ حتی زمانی که
Ray Tracing نیز در بخشی از صحنه استفاده می‌شود.

Shader Cluster چیست؟

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

NVIDIA این مجموعه‌ها را در بسیاری از معماری‌ها
با نام
Streaming Multiprocessor
یا SM معرفی می‌کند.

AMD از ساختارهایی مانند
Compute Unit
و در معماری‌های جدیدتر از گروه‌بندی‌های مرتبط با
Workgroup Processor استفاده می‌کند.

Intel نیز در معماری Xe از Xe Core و ساختارهای
مرتبط برای سازمان‌دهی واحدهای پردازشی استفاده
می‌کند.

نام گروه‌های پردازشی در معماری‌های مختلف
شرکت نام رایج گروه پردازشی واحدهای داخل آن
NVIDIA Streaming Multiprocessor یا SM CUDA Core، Tensor Core، Register،
Scheduler و حافظه مشترک
AMD Compute Unit یا ساختارهای جدیدتر WGP Stream Processor، Scheduler،
Register و حافظه محلی
Intel Xe Core واحدهای برداری، XMX، Register و
منابع پردازشی مشترک


چرا نام‌ها متفاوت‌اند؟

هر شرکت معماری و نام‌گذاری اختصاصی خود را دارد.
به همین دلیل نمی‌توان یک SM، یک Compute Unit و
یک Xe Core را بدون بررسی ساختار داخلی، مستقیماً
معادل یکدیگر دانست.

واحدهای ثابت یا Fixed Function

همه وظایف GPU توسط Shaderهای قابل برنامه‌ریزی
انجام نمی‌شوند. برخی عملیات توسط مدارهایی اجرا
می‌شوند که برای وظیفه مشخصی طراحی شده‌اند.

به این مدارها معمولاً واحدهای
Fixed Function
گفته می‌شود.

  • واحدهای پردازش بافت
  • واحدهای خروجی رندر
  • موتور Raster
  • موتورهای رمزگذاری ویدئو
  • موتورهای رمزگشایی ویدئو
  • واحدهای Ray Tracing
  • واحدهای نمایشگر
  • کنترل‌کننده‌های حافظه

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

واحدهای پردازش بافت

واحدهای پردازش بافت یا TMU داده‌های Texture را
نمونه‌برداری و فیلتر می‌کنند.

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

فیلترهایی مانند Bilinear، Trilinear و Anisotropic
Filtering با پردازش بافت ارتباط دارند.

TMU در یکی از زیرمرحله‌های بعدی این فصل به‌صورت
کامل توضیح داده خواهد شد.

واحدهای خروجی رندر یا ROP

ROPها در مراحل پایانی تولید تصویر نقش دارند و
عملیاتی مانند ترکیب رنگ، نوشتن نتیجه در Frame
Buffer و بعضی آزمون‌های عمق را انجام می‌دهند.

تعداد و ساختار ROP می‌تواند در عملکرد وضوح‌های
بالا، نرخ پرکردن پیکسل و بعضی روش‌های
Anti-Aliasing اثر داشته باشد.

تعداد ROP نیز مانند تعداد CUDA Core یا Stream
Processor به‌تنهایی معیار کامل قدرت GPU نیست.

سلسله‌مراتب حافظه کش GPU

GPU برای کاهش زمان دسترسی به داده‌ها از چند سطح
حافظه سریع استفاده می‌کند.

این حافظه‌ها ممکن است شامل Register، حافظه محلی،
Shared Memory، کش L0، کش L1، کش L2 و در بعضی
معماری‌ها حافظه‌های کش بزرگ‌تری مانند Infinity
Cache باشند.

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

Register

حافظه بسیار سریع داخل واحد پردازشی برای
نگهداری داده‌های فعال هر Thread.

Shared یا Local Memory

حافظه سریع مشترک میان گروهی از Threadها
یا واحدهای یک بلوک پردازشی.

L1 Cache

کش نزدیک به واحدهای پردازشی برای کاهش
مراجعه به حافظه‌های دورتر.

L2 Cache

حافظه کش بزرگ‌تر که میان بخش‌های بیشتری
از GPU مشترک است.

Last-Level Cache

کش بزرگ‌تر در بعضی معماری‌ها برای کاهش
مراجعه مستقیم به VRAM.

VRAM

حافظه اصلی گرافیکی برای نگهداری داده‌های
بزرگ‌تر مانند بافت، مدل و Frame Buffer.

کنترل‌کننده حافظه GPU

کنترل‌کننده حافظه ارتباط میان GPU و تراشه‌های
VRAM را مدیریت می‌کند.

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

تعداد کنترل‌کننده‌ها و عرض هر کانال در شکل‌گیری
پهنای رابط حافظه نقش دارد.

برای مثال، باس ۲۵۶ بیتی می‌تواند از چند کانال
کوچک‌تر تشکیل شده باشد که در مجموع یک رابط
۲۵۶ بیتی ایجاد می‌کنند.

شبکه ارتباط داخلی GPU

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

شبکه ارتباط داخلی، واحدهای Shader، حافظه‌های کش،
کنترل‌کننده‌های حافظه، موتورهای کپی و سایر بخش‌ها
را به یکدیگر متصل می‌کند.

طراحی این شبکه بر تأخیر، پهنای باند، مصرف برق و
مقیاس‌پذیری GPU اثر می‌گذارد.

Copy Engine یا موتور انتقال داده

GPUهای جدید ممکن است دارای موتورهای اختصاصی برای
انتقال داده باشند.

این موتورها می‌توانند داده‌ها را میان RAM،
VRAM یا بخش‌های مختلف حافظه جابه‌جا کنند؛ بدون
اینکه تمام منابع Shader درگیر عملیات کپی شوند.

وجود چند Copy Engine می‌تواند امکان هم‌پوشانی
انتقال داده با اجرای محاسبات را فراهم کند.

موتورهای ویدئویی داخل GPU

بسیاری از GPUها دارای واحدهای اختصاصی برای
رمزگذاری و رمزگشایی ویدئو هستند.

این واحدها می‌توانند پردازش کدک‌هایی مانند
H.264، H.265، VP9 یا AV1 را سریع‌تر و
کم‌مصرف‌تر از اجرای کامل روی Shaderها انجام دهند.

نام این موتور میان شرکت‌ها متفاوت است؛ مانند
NVENC و NVDEC در NVIDIA، موتورهای رسانه AMD و
Quick Sync یا Media Engine در Intel.

Display Engine چیست؟

موتور نمایش، خروجی تصویر، زمان‌بندی نمایشگر،
وضوح، نرخ نوسازی، عمق رنگ و ارتباط با درگاه‌هایی
مانند HDMI و DisplayPort را مدیریت می‌کند.

توان پردازشی بالای GPU لزوماً به معنی پشتیبانی از
تمام خروجی‌ها یا نرخ‌های نوسازی جدید نیست؛ زیرا
قابلیت Display Engine و نسخه رابط‌ها نیز اهمیت
دارد.

این موضوع در کارت‌های قدیمی Quadro، FirePro و
گرافیک‌های لپ‌تاپی اهمیت زیادی دارد.

مدیریت توان و فرکانس داخل GPU

GPU به‌صورت پیوسته دما، بار پردازشی، توان مصرفی و
محدودیت‌های تعیین‌شده را بررسی می‌کند.

فرکانس و ولتاژ بخش‌های مختلف می‌توانند متناسب با
نیاز افزایش یا کاهش یابند.

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

اگر دما یا مصرف برق از حد تعیین‌شده عبور کند،
GPU ممکن است فرکانس را کاهش دهد. این رفتار
Thermal Throttling یا Power Throttling نامیده
می‌شود.

دیاگرام ساده ساختمان داخلی GPU

مسیر کلی حرکت داده در GPU


مرحله ۱


ارسال دستور از نرم‌افزار

بازی یا نرم‌افزار از طریق API و درایور،
دستورها و داده‌های موردنیاز را آماده می‌کند.


مرحله ۲


ورود به صف پردازش

دستورها در صف‌های گرافیکی، Compute یا
انتقال داده قرار می‌گیرند.


مرحله ۳


آماده‌سازی هندسه

رأس‌ها، مدل‌ها و موقعیت عناصر سه‌بعدی
پردازش می‌شوند.


مرحله ۴


Rasterization

شکل‌های هندسی به Fragmentهای قابل پردازش
برای تصویر تبدیل می‌شوند.


مرحله ۵


اجرای Shaderها

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


مرحله ۶


پردازش بافت و خروجی

TMUها، ROPها و واحدهای ثابت نتیجه را برای
Frame Buffer آماده می‌کنند.


مرحله ۷


ذخیره در VRAM

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


مرحله ۸


نمایش یا تحویل نتیجه

تصویر برای نمایشگر ارسال می‌شود یا نتیجه
محاسبات در اختیار نرم‌افزار قرار می‌گیرد.

ساختمان GPU در NVIDIA، AMD و Intel

نام بخش‌های مشابه در معماری‌های مختلف
وظیفه NVIDIA AMD Intel
گروه پردازشی SM CU یا WGP Xe Core
واحد محاسباتی عمومی CUDA Core Stream Processor Vector Engine
پردازش ماتریسی و AI Tensor Core Matrix یا AI Accelerator XMX
Ray Tracing RT Core Ray Accelerator Ray Tracing Unit
کش بزرگ اختصاصی L2 Cache بزرگ‌تر در نسل‌های جدید Infinity Cache در مدل‌های سازگار کش متناسب با معماری Xe

ساختمان داخلی در کارت‌های Quadro و ورک‌استیشن

کارت‌های
NVIDIA Quadro
و
NVIDIA RTX Professional
از همان اصول کلی معماری GPUهای NVIDIA استفاده
می‌کنند؛ اما ممکن است پیکربندی سخت‌افزاری،
ظرفیت حافظه، قابلیت ECC، درایور و محدودیت توان
متفاوتی داشته باشند.

برای نمونه، Quadro K بر پایه معماری Kepler،
Quadro M بر پایه Maxwell، Quadro P بر پایه
Pascal و Quadro RTX بر پایه Turing ساخته شده‌اند.

کارت‌های RTX A Series و RTX Professional جدیدتر
نیز از معماری‌های Ampere، Ada یا نسل‌های بعدی
استفاده می‌کنند.

ساختار اصلی پردازشی می‌تواند با GeForce هم‌نسل
شباهت داشته باشد، اما تفاوت در ظرفیت VRAM،
درایور حرفه‌ای، قابلیت‌های سازمانی و پایداری
نرم‌افزاری اهمیت دارد.

همین موضوع درباره AMD FirePro، Radeon Pro و
Intel Arc Pro نیز صدق می‌کند.

ساختار GPU در کارت‌های قدیمی

کارت‌های قدیمی نیز بسیاری از اجزای پایه مانند
Shader، TMU، ROP، حافظه کش و کنترل‌کننده حافظه
را داشتند؛ اما تعداد، ساختار و قابلیت این بخش‌ها
ساده‌تر بود.

برای مثال:

  • GeForce 9600 GT از نسل قدیمی Tesla است.
  • Quadro K2100M بر پایه Kepler ساخته شده است.
  • Quadro M2000M از معماری Maxwell استفاده می‌کند.
  • Quadro P2000 بر پایه Pascal است.
  • Radeon HD 5450 به دوره Terascale تعلق دارد.
  • Radeon RX 580 از معماری Polaris استفاده می‌کند.
  • Intel HD 4000 یک گرافیک مجتمع نسل قدیمی Intel است.
  • Intel UHD 620 از گرافیک مجتمع جدیدتری نسبت به
    HD 4000 استفاده می‌کند.

معماری قدیمی‌تر معمولاً به معنی نبود واحدهای
اختصاصی Tensor، RT یا XMX و محدودیت بیشتر در
درایور، API و موتورهای ویدئویی است.

اشتباهات رایج درباره ساختمان GPU

مقایسه مستقیم تعداد هسته‌ها

CUDA Core، Stream Processor و Xe Core
معادل مستقیم یکدیگر نیستند.

برابر دانستن GPU با کارت گرافیک

GPU فقط تراشه پردازشی است؛ کارت گرافیک
شامل اجزای بیشتری است.

توجه فقط به اندازه Die

Die بزرگ‌تر لزوماً به معنی عملکرد بهتر یا
بهره‌وری بالاتر نیست.

توجه فقط به تعداد ترانزیستور

نوع معماری و کاربرد ترانزیستورها به اندازه
تعداد آن‌ها اهمیت دارد.

تصور اینکه Ray Tracing کل تصویر را می‌سازد

بیشتر بازی‌ها ترکیبی از Rasterization و
Ray Tracing را استفاده می‌کنند.

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

نوع برنامه و بار پردازشی تعیین می‌کند کدام
واحدهای GPU بیشتر استفاده شوند.

هنگام خرید، کدام بخش ساختمان GPU مهم‌تر است؟

پاسخ به نوع استفاده بستگی دارد.

اجزای مهم GPU بر اساس نوع کاربرد
نوع استفاده بخش‌های مهم‌تر نکته
بازی Shader، TMU، ROP، کش و پهنای حافظه نتایج آزمون واقعی مهم‌تر از یک عدد منفرد است
Ray Tracing واحدهای RT، Shader و AI نسل واحدها نیز اهمیت دارد
هوش مصنوعی واحدهای ماتریسی، VRAM و پهنای حافظه سازگاری نرم‌افزاری تعیین‌کننده است
CAD و SolidWorks پایداری درایور، VRAM و توان Viewport Quadro یا RTX Professional ممکن است مزیت داشته باشد
Blender و رندر هسته‌های Compute، VRAM و Backend رندر موتور رندر باید از GPU پشتیبانی کند
تدوین ویدئو موتور رسانه، VRAM و Shader پشتیبانی کدک بسیار مهم است
لپ‌تاپ استوک معماری، توان، خنک‌کننده و درایور نام GPU به‌تنهایی کافی نیست


فصل ۱۵-۲

Shader، CUDA Core، Stream Processor و Xe Core چیست؟

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

Shader چیست؟

Shader برنامه‌ای کوچک است که روی GPU اجرا می‌شود
و نحوه پردازش بخشی از داده‌های گرافیکی یا محاسباتی
را مشخص می‌کند.

Shader می‌تواند موقعیت یک رأس سه‌بعدی، رنگ یک
پیکسل، نحوه تابش نور، شکل سایه، حرکت ذرات، کیفیت
بافت یا نتیجه یک محاسبه موازی را تعیین کند.

واژه Shader در ابتدا بیشتر با محاسبات نور و سایه
ارتباط داشت؛ اما امروزه Shaderها دامنه بسیار
گسترده‌تری از وظایف را اجرا می‌کنند.


Shader یک قطعه فیزیکی نیست

Shader معمولاً یک برنامه یا مجموعه دستور است.
واحدهای پردازشی داخل GPU این دستورها را اجرا
می‌کنند. بنابراین Shader را نباید با CUDA Core
یا Stream Processor یکسان دانست.

انواع Shader در مسیر رندر

Vertex Shader

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

Pixel یا Fragment Shader

رنگ نهایی، نور، سایه، بافت و بسیاری از
افکت‌های مربوط به پیکسل یا Fragment را
محاسبه می‌کند.

Geometry Shader

می‌تواند Primitiveهای هندسی را دریافت،
تغییر یا تولید کند. کاربرد آن به موتور
گرافیکی و API بستگی دارد.

Tessellation Shader

میزان تقسیم سطوح هندسی را کنترل می‌کند تا
جزئیات مدل در بخش‌های لازم افزایش پیدا کند.

Compute Shader

برای محاسبات عمومی موازی استفاده می‌شود و
الزاماً بخشی از تولید مستقیم تصویر نیست.

Mesh Shader

در سخت‌افزارها و APIهای سازگار، روش
انعطاف‌پذیرتری برای پردازش و تولید هندسه
فراهم می‌کند.

معماری Unified Shader چیست؟

در نسل‌های قدیمی‌تر کارت گرافیک، بعضی واحدها فقط
برای پردازش Vertex و بعضی دیگر فقط برای Pixel
Shader طراحی شده بودند.

در معماری Unified Shader، گروهی از واحدهای
پردازشی عمومی‌تر می‌توانند بسته به نیاز، انواع
مختلف Shader یا محاسبات را اجرا کنند.

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

معماری قدیمی‌تر

  • واحدهای جدا برای وظایف مشخص
  • انعطاف کمتر در توزیع بار
  • احتمال بیکارماندن بخشی از منابع

Unified Shader

  • واحدهای پردازشی قابل‌برنامه‌ریزی‌تر
  • توزیع منعطف‌تر وظایف
  • مناسب برای گرافیک و Compute

CUDA Core چیست؟

CUDA Core نام رایج واحدهای محاسباتی اسکالر یا
برداری در بسیاری از GPUهای NVIDIA است.

این واحدها دستورهای ریاضی موردنیاز Shaderها،
پردازش تصویر، فیزیک، رندر، شبیه‌سازی و محاسبات
موازی را اجرا می‌کنند.

CUDA Coreها داخل گروه‌هایی مانند
Streaming Multiprocessor
یا SM سازمان‌دهی می‌شوند و همراه با Scheduler،
Register، حافظه کش و سایر واحدها فعالیت می‌کنند.


CUDA Core با هسته CPU برابر نیست

هسته CPU واحدی پیچیده و مناسب اجرای طیف
گسترده‌ای از دستورها است. CUDA Core واحد
کوچک‌تری برای اجرای حجم زیادی از عملیات موازی
محسوب می‌شود.

CUDA چیست؟

CUDA نام پلتفرم برنامه‌نویسی و اکوسیستم محاسبات
موازی NVIDIA است. CUDA Core نیز نام واحدهای
پردازشی سازگار با این معماری در GPUهای NVIDIA
محسوب می‌شود.

داشتن CUDA Core به این معنی نیست که هر نرم‌افزار
به‌صورت خودکار از GPU استفاده می‌کند. برنامه باید
از CUDA یا رابط سازگار دیگری پشتیبانی کند.

CUDA Core در چه کارهایی استفاده می‌شود؟

  • اجرای Shaderهای بازی
  • رندر سه‌بعدی
  • پردازش تصویر و ویدئو
  • شبیه‌سازی علمی
  • فیزیک و ذرات
  • یادگیری ماشین
  • محاسبات مهندسی
  • اجرای Compute Shader

آیا CUDA Core بیشتر همیشه بهتر است؟

خیر. تعداد CUDA Core فقط در کنار معماری، فرکانس،
پهنای حافظه، ظرفیت VRAM، توان مصرفی و نوع برنامه
معنا پیدا می‌کند.

برای نمونه، تعداد هسته‌های یک کارت قدیمی را نباید
مستقیماً با کارت جدیدی از معماری متفاوت مقایسه کرد.
هسته‌های نسل جدید ممکن است در هر سیکل کار بیشتری
انجام دهند یا ساختار متفاوتی داشته باشند.

CUDA Core در GeForce و Quadro قدیمی

کارت‌های قدیمی NVIDIA نیز دارای واحدهای پردازشی
سازگار با معماری CUDA بودند؛ اما نسل معماری،
Compute Capability و پشتیبانی نرم‌افزاری آن‌ها
محدودتر است.

نمونه خانواده‌های قدیمی و حرفه‌ای NVIDIA
خانواده معماری نمونه مدل کاربرد تقریبی امروز
GeForce 400 و 500 Fermi GTX 460، GTX 560 Ti نرم‌افزارها و بازی‌های قدیمی
Quadro K عمدتاً Kepler K1100M، K2100M، K2200 CAD و طراحی سبک یا قدیمی
Quadro M Maxwell M1000M، M2000M، M4000M مدل‌سازی و طراحی متوسط
GeForce GTX 10 Pascal GTX 1050 Ti، GTX 1060 بازی، تدوین و Compute متوسط
Quadro P Pascal P1000، P2000، P4000 CAD، طراحی و رندر سبک تا متوسط
Quadro RTX Turing Quadro RTX 3000 و 4000 رندر، CAD و قابلیت‌های RTX
RTX A Series Ampere RTX A2000 و A4000 ورک‌استیشن، رندر و AI


در Quadro فقط تعداد CUDA Core مهم نیست

نوع درایور، تأییدیه نرم‌افزار، ظرفیت VRAM،
محدودیت توان و نسل معماری می‌توانند برای
SolidWorks، CATIA، Maya و نرم‌افزارهای
حرفه‌ای مهم‌تر از تعداد خام هسته‌ها باشند.

Stream Processor چیست؟

Stream Processor نام رایج واحدهای پردازشی در
مشخصات بسیاری از GPUهای AMD است.

این واحدها عملیات ریاضی مربوط به Shader، گرافیک،
پردازش تصویر و Compute را اجرا می‌کنند و در
ساختارهایی مانند Compute Unit یا WGP سازمان‌دهی
می‌شوند.

وظیفه کلی آن‌ها از بعضی جهات به CUDA Core نزدیک
است؛ اما ساختار داخلی، نحوه زمان‌بندی و معماری
دو شرکت متفاوت است.


CUDA Core و Stream Processor را عددی مقایسه نکنید

نمی‌توان گفت یک CUDA Core دقیقاً برابر یک
Stream Processor است. فقط نتایج آزمون واقعی
و عملکرد در برنامه موردنظر مقایسه قابل‌اعتماد
ایجاد می‌کند.

Stream Processor در GCN

در معماری GCN، واحدهای پردازشی داخل Compute Unit
سازمان‌دهی می‌شدند و گروه‌های کاری با ساختاری
متناسب با Wavefront اجرا می‌شدند.

کارت‌هایی مانند Radeon HD 7000، سری R9،
RX 470، RX 570 و RX 580 از نسل‌های مختلف GCN
استفاده می‌کنند.

Stream Processor در RDNA

معماری RDNA ساختار داخلی و نحوه اجرای دستورها را
نسبت به GCN تغییر داد. به همین دلیل مقایسه صرف
تعداد Stream Processor میان RX 580 و یک کارت
RDNA جدید، تصویر کاملی از عملکرد ارائه نمی‌دهد.

Stream Processor در Radeon Pro

کارت‌های Radeon Pro و FirePro نیز از واحدهای
پردازشی AMD استفاده می‌کنند، اما درایور حرفه‌ای،
ظرفیت حافظه و ویژگی‌های ورک‌استیشن آن‌ها متفاوت
است.

Xe Core چیست؟

Xe Core یکی از بلوک‌های پردازشی اصلی در معماری‌های
جدید گرافیکی Intel است.

هر Xe Core می‌تواند شامل موتورهای برداری،
Registerها، واحدهای بارگذاری و ذخیره داده و در
بعضی نسل‌ها واحدهای ماتریسی XMX باشد.

Xe Core یک واحد ساده و منفرد مانند یک هسته کوچک
نیست؛ بلکه مجموعه‌ای از منابع پردازشی را در خود
جای می‌دهد.

Vector Engine در Intel

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

Xe Core در Intel Arc

کارت‌های Intel Arc از Xe Coreها برای اجرای
پردازش‌های گرافیکی، Compute، Ray Tracing و
وظایف مرتبط با تولید محتوا استفاده می‌کنند.

Xe Core در Arc Pro

کارت‌های Arc Pro نیز بر پایه معماری Xe ساخته
می‌شوند، اما برای ورک‌استیشن، نرم‌افزارهای حرفه‌ای
و درایورهای سازمانی هدف‌گذاری شده‌اند.


Xe Core با CUDA Core قابل مقایسه مستقیم نیست

Xe Core یک بلوک شامل چند منبع پردازشی است،
در حالی که CUDA Core معمولاً به واحد محاسباتی
کوچک‌تری درون SM اشاره دارد.

مقایسه CUDA Core، Stream Processor و Xe Core

مقایسه مفهومی واحدهای پردازشی GPU
معیار CUDA Core Stream Processor Xe Core
شرکت NVIDIA AMD Intel
ماهیت نام واحد محاسباتی داخل SM واحد پردازشی داخل CU یا WGP بلوک پردازشی شامل چند منبع
اجرای Shader بله بله بله
اجرای Compute بله بله بله
واحد AI اختصاصی Tensor Core جداگانه بسته به معماری، واحدهای AI یا Matrix XMX در مدل‌های سازگار
مقایسه مستقیم تعداد معتبر نیست؛ معماری و ساختار متفاوت است

نمونه واحدهای پردازشی در کارت‌های قدیمی

بازار لپ‌تاپ و قطعات استوک شامل تعداد زیادی GPU
از معماری‌های قدیمی است. شناخت نسل معماری از تعداد
خام هسته‌ها مهم‌تر است.

نمونه کارت‌های قدیمی و نوع واحد پردازشی
مدل شرکت معماری نام واحد پردازشی
GeForce GT 740M NVIDIA معمولاً Kepler CUDA Core
GTX 960M NVIDIA Maxwell CUDA Core
Quadro K2100M NVIDIA Kepler CUDA Core
Quadro P2000 NVIDIA Pascal CUDA Core
Radeon HD 7970 AMD GCN Stream Processor
Radeon RX 580 AMD Polaris Stream Processor
Radeon Pro WX 7100 AMD Polaris Stream Processor
Intel HD 4000 Intel گرافیک مجتمع قدیمی Execution Unit
Intel Iris Xe Intel Xe-LP Execution Unit و ساختار Xe
Intel Arc Intel Xe-HPG یا Xe2 Xe Core

واحدهای پردازشی در Quadro، Radeon Pro و Arc Pro

کارت حرفه‌ای الزاماً از نوع کاملاً متفاوتی از
هسته پردازشی استفاده نمی‌کند. بسیاری از کارت‌های
ورک‌استیشن از همان معماری پایه محصولات مصرف‌کننده
همان نسل استفاده می‌کنند.

تفاوت اصلی می‌تواند شامل ظرفیت حافظه، درایور،
پایداری، تأییدیه ISV، توان مصرفی و قابلیت‌های
سازمانی باشد.

NVIDIA Quadro و RTX Professional

از CUDA Core استفاده می‌کنند و در نسل‌های
جدید ممکن است Tensor Core و RT Core نیز
داشته باشند.

AMD FirePro و Radeon Pro

از واحدهای پردازشی AMD مانند Stream
Processor استفاده می‌کنند و با درایورهای
حرفه‌ای عرضه می‌شوند.

Intel Arc Pro

از ساختار Xe Core و در مدل‌های سازگار از
XMX و واحدهای Ray Tracing استفاده می‌کند.

نقش واحدهای پردازشی در نرم‌افزارهای مختلف

نقش واحدهای Shader و Compute در کاربردهای مختلف
کاربرد نقش واحدهای پردازشی عامل مهم دیگر
بازی اجرای Shader، نور، رنگ و افکت TMU، ROP، حافظه و درایور
AutoCAD نمایش Viewport و مدل سه‌بعدی CPU و پیچیدگی پروژه
SolidWorks نمایش مدل و افکت‌های Viewport درایور حرفه‌ای و گواهی ISV
Blender Viewport و رندر GPU Backend رندر و ظرفیت VRAM
Premiere Pro افکت، رنگ و شتاب‌دهی محاسبات موتور ویدئو و کدک
هوش مصنوعی محاسبات برداری و عددی واحدهای ماتریسی و اکوسیستم نرم‌افزار

هنگام خرید چگونه تعداد هسته‌ها را بررسی کنیم؟

  1. ابتدا مدل دقیق GPU و معماری آن را مشخص کنید.
  2. تعداد هسته‌ها را فقط با مدل‌های هم‌معماری
    مقایسه کنید.
  3. ظرفیت و پهنای باند VRAM را بررسی کنید.
  4. توان مصرفی و فرکانس واقعی کارت را کنترل کنید.
  5. نتایج نرم‌افزار یا بازی موردنظر خود را ببینید.
  6. در لپ‌تاپ، توان GPU و کیفیت خنک‌کننده را
    بررسی کنید.
  7. برای CAD، گواهی و درایور حرفه‌ای را بررسی کنید.
  8. برای AI، سازگاری فریم‌ورک و ظرفیت VRAM را
    در اولویت قرار دهید.


قاعده ساده خرید

به‌جای پرسیدن «کدام کارت هسته بیشتری دارد؟»،
بپرسید «کدام کارت در نرم‌افزار و پروژه من
سریع‌تر، پایدارتر و سازگارتر است؟»

اشتباهات رایج درباره هسته‌های GPU

  • برابر دانستن CUDA Core با هسته CPU
  • مقایسه مستقیم تعداد هسته‌های NVIDIA و AMD
  • مقایسه مستقیم Xe Core با CUDA Core
  • توجه نکردن به نسل معماری
  • نادیده‌گرفتن پهنای باند حافظه
  • فرض اینکه هسته بیشتر همیشه نرخ فریم بیشتری می‌دهد
  • نادیده‌گرفتن محدودیت توان در لپ‌تاپ
  • انتخاب Quadro فقط بر اساس تعداد CUDA Core
  • انتخاب کارت AI بدون بررسی سازگاری نرم‌افزاری

سؤالات متداول درباره Shader و هسته‌های GPU

Shader چیست؟

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

CUDA Core چیست؟

CUDA Core واحد محاسباتی داخل GPUهای NVIDIA
است که دستورهای Shader و پردازش موازی را
اجرا می‌کند.

آیا CUDA Core همان هسته CPU است؟

خیر. هسته CPU بسیار پیچیده‌تر است و برای
وظایف عمومی طراحی شده؛ CUDA Core واحدی
کوچک‌تر برای اجرای عملیات موازی است.

Stream Processor چیست؟

Stream Processor نام رایج واحدهای
پردازشی داخل GPUهای AMD است که Shader و
عملیات محاسباتی را اجرا می‌کنند.

آیا CUDA Core و Stream Processor برابر هستند؟

خیر. ساختار و معماری آن‌ها متفاوت است و
تعدادشان نباید مستقیماً مقایسه شود.

Xe Core چیست؟

Xe Core بلوک پردازشی در معماری‌های جدید
Intel است و مجموعه‌ای از منابع برداری و
محاسباتی را در خود جای می‌دهد.

آیا تعداد هسته بیشتر همیشه بهتر است؟

خیر. معماری، فرکانس، حافظه، توان و نوع
نرم‌افزار نیز بر عملکرد نهایی اثر دارند.

چرا Quadro با CUDA Core کمتر ممکن است گران‌تر باشد؟

قیمت کارت حرفه‌ای فقط بر اساس تعداد هسته
نیست و عواملی مانند VRAM، درایور حرفه‌ای،
گواهی ISV، پایداری و قابلیت‌های سازمانی
در آن اثر دارند.


فصل ۱۵-۳

Tensor Core، RT Core، Ray Accelerator و XMX چیست؟

پردازنده‌های گرافیکی جدید علاوه بر واحدهای عمومی
اجرای Shader، از شتاب‌دهنده‌های اختصاصی برای
محاسبات ماتریسی، هوش مصنوعی و رهگیری پرتو استفاده
می‌کنند. نام و ساختار این واحدها در محصولات NVIDIA،
AMD و Intel متفاوت است.

شتاب‌دهنده اختصاصی داخل GPU چیست؟

واحدهای عمومی Shader می‌توانند طیف گسترده‌ای از
محاسبات را اجرا کنند؛ اما اجرای بعضی عملیات روی
سخت‌افزار اختصاصی، سریع‌تر و کم‌مصرف‌تر است.

به همین دلیل، پردازنده‌های گرافیکی جدید ممکن است
واحدهایی ویژه برای محاسبات ماتریسی، رهگیری پرتو،
پردازش ویدئو، نمونه‌برداری بافت یا تولید خروجی
تصویر داشته باشند.

این واحدها جایگزین کامل Shader Coreها نیستند.
معمولاً بخش‌های عمومی و اختصاصی GPU به‌صورت
هم‌زمان با یکدیگر کار می‌کنند.

واحدهای عمومی

عملیات Shader، محاسبات عددی عمومی و
پردازش‌های قابل‌برنامه‌ریزی را اجرا می‌کنند.

واحدهای ماتریسی

ضرب و جمع ماتریس‌ها و محاسبات رایج در
هوش مصنوعی را شتاب می‌دهند.

واحدهای Ray Tracing

محاسبات مربوط به برخورد پرتو با هندسه و
پیمایش ساختارهای فضایی را سریع‌تر می‌کنند.

موتورهای رسانه

رمزگذاری و رمزگشایی کدک‌های ویدئویی را
بدون درگیرکردن کامل Shaderها انجام می‌دهند.

Tensor Core چیست؟

Tensor Core نام واحدهای اختصاصی محاسبات ماتریسی
در تعدادی از GPUهای NVIDIA است.

این واحدها برای اجرای سریع عملیات ضرب و جمع
ماتریسی طراحی شده‌اند؛ عملیاتی که در آموزش و
اجرای شبکه‌های عصبی، پردازش تصویر، بازسازی تصویر
و بسیاری از محاسبات علمی تکرار می‌شوند.

Tensor Coreها در کنار CUDA Coreها قرار می‌گیرند.
CUDA Core وظایف عمومی‌تر را اجرا می‌کند و Tensor
Core بخش‌های سازگار از محاسبات ماتریسی را شتاب
می‌دهد.


Tensor در هوش مصنوعی یعنی چه؟

Tensor را می‌توان ساختاری چندبعدی برای نگهداری
داده‌های عددی دانست. یک عدد، بردار، ماتریس یا
آرایه‌ای با ابعاد بیشتر می‌تواند نوعی Tensor
باشد.


وجود Tensor Core به معنی اجرای خودکار هر برنامه نیست

نرم‌افزار، کتابخانه یا مدل باید بتواند از
قالب‌های عددی و مسیرهای محاسباتی سازگار با
Tensor Core استفاده کند. در غیر این صورت،
عملیات ممکن است روی CUDA Core یا بخش دیگری
از GPU اجرا شود.

نسل‌های Tensor Core

Tensor Core نخست در محصولات حرفه‌ای و محاسباتی
NVIDIA ظاهر شد و سپس وارد کارت‌های گیمینگ و
ورک‌استیشن RTX شد.

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

حضور Tensor Core در معماری‌های مهم NVIDIA
معماری نمونه محصولات وضعیت Tensor Core کاربرد شاخص
Volta Tesla V100، Titan V، Quadro GV100 نسل ابتدایی هوش مصنوعی و محاسبات علمی
Turing RTX 20، Quadro RTX حضور در گیمینگ و ورک‌استیشن DLSS، AI و رندر حرفه‌ای
Ampere RTX 30، RTX A Series نسل بهبودیافته AI، رندر و پردازش ماتریسی
Ada Lovelace RTX 40، RTX Ada توان و قابلیت‌های جدیدتر بازسازی تصویر و تولید فریم
نسل‌های جدیدتر RTX محصولات جدید مصرف‌کننده و حرفه‌ای متناسب با معماری هر نسل رندر عصبی و پردازش‌های AI


تعداد Tensor Core میان نسل‌ها قابل مقایسه مستقیم نیست

یک Tensor Core جدیدتر ممکن است از قالب‌های
عددی بیشتر یا توان عملیاتی بالاتری برخوردار
باشد. فقط تعداد خام این واحدها معیار کاملی
برای مقایسه نیست.

کاربردهای Tensor Core

آموزش مدل‌های هوش مصنوعی

شتاب‌دادن به محاسبات ماتریسی در شبکه‌های
عصبی و مدل‌های یادگیری عمیق.

اجرای مدل یا Inference

پردازش سریع‌تر ورودی و تولید خروجی توسط
مدل آموزش‌دیده.

بازسازی تصویر

استفاده در فناوری‌هایی مانند DLSS برای
تولید تصویر با وضوح یا کیفیت بالاتر.

حذف نویز رندر

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

تولید فریم

مشارکت در بعضی فناوری‌های تولید فریم و
محاسبات مرتبط با حرکت.

محاسبات علمی

شتاب‌دادن به عملیات ماتریسی در شبیه‌سازی،
تحلیل داده و پژوهش.

Tensor Core در Stable Diffusion

نرم‌افزارها و رابط‌های مبتنی بر Stable Diffusion
می‌توانند در پیکربندی سازگار از Tensor Core برای
اجرای بعضی محاسبات با دقت‌های عددی مناسب استفاده
کنند.

سرعت نهایی علاوه بر Tensor Core به ظرفیت VRAM،
معماری GPU، نسخه نرم‌افزار، روش بهینه‌سازی و
اندازه تصویر وابسته است.

Tensor Core در مدل‌های زبانی

اجرای مدل‌های زبانی روی GPU به حجم حافظه، پهنای
باند، قالب عددی، نوع Quantization و پشتیبانی
نرم‌افزار وابسته است.

داشتن Tensor Core مفید است، اما اگر مدل در VRAM
جا نشود یا Backend از GPU پشتیبانی نکند، تعداد
بالای Tensor Core مشکل را حل نمی‌کند.

RT Core چیست؟

RT Core نام واحدهای اختصاصی رهگیری پرتو در GPUهای
RTX شرکت NVIDIA است.

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

نتیجه این محاسبات می‌تواند برای تولید بازتاب،
سایه، نور غیرمستقیم، شکست نور یا افکت‌های دیگر
استفاده شود.


پرتو چیست؟

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

RT Core دقیقاً چه کاری انجام می‌دهد؟

  • پیمایش ساختار شتاب‌دهنده هندسی
  • بررسی برخورد پرتو با محدوده اجسام
  • بررسی برخورد پرتو با مثلث‌ها
  • کاهش بار این محاسبات از روی Shaderها
  • کمک به اجرای Ray Tracing بلادرنگ


RT Core به‌تنهایی تصویر را تولید نمی‌کند

Shaderها، واحدهای بافت، ROPها، حافظه و
درایور همچنان در تولید تصویر نقش دارند.
RT Core فقط بخش‌هایی از رهگیری پرتو را شتاب
می‌دهد.

نسل‌های RT Core

RT Core در معماری Turing وارد کارت‌های Quadro RTX
و GeForce RTX شد و در نسل‌های بعدی بهبود پیدا کرد.

حضور RT Core در خانواده‌های مهم NVIDIA
معماری خانواده کارت نمونه‌ها وضعیت کلی
Turing RTX 20 و Quadro RTX RTX 2060، Quadro RTX 4000 نسل نخست گسترده RT Core
Ampere RTX 30 و RTX A RTX 3060، RTX A2000 نسل بهبودیافته
Ada Lovelace RTX 40 و RTX Ada RTX 4060، RTX 4000 Ada قابلیت‌های جدیدتر رهگیری پرتو
نسل‌های جدیدتر RTX و RTX Professional متناسب با خانواده محصول بهبود عملکرد و رندر عصبی

Ray Accelerator در کارت‌های AMD چیست؟

کارت‌های Radeon مبتنی بر معماری‌های سازگار AMD
از واحدهای اختصاصی رهگیری پرتو استفاده می‌کنند
که معمولاً با عنوان
Ray Accelerator
شناخته می‌شوند.

این واحدها بخشی از محاسبات برخورد پرتو با هندسه
را شتاب می‌دهند و در کنار Compute Unitها،
Shaderها، حافظه و درایور فعالیت می‌کنند.

پشتیبانی سخت‌افزاری گسترده رهگیری پرتو در محصولات
مصرف‌کننده Radeon از خانواده RDNA 2 وارد کارت‌های
RX 6000 شد و در نسل‌های بعدی توسعه یافت.

وضعیت کلی Ray Tracing در نسل‌های Radeon
خانواده معماری واحد اختصاصی Ray Tracing
RX 400 و RX 500 Polaris ندارد
RX Vega Vega ندارد
RX 5000 RDNA ندارد
RX 6000 RDNA 2 دارد
RX 7000 RDNA 3 نسل بهبودیافته
نسل‌های جدیدتر Radeon معماری‌های جدیدتر RDNA متناسب با معماری

واحد Ray Tracing در Intel Arc چیست؟

GPUهای مجزای Intel Arc دارای واحدهای سخت‌افزاری
برای شتاب‌دادن به محاسبات Ray Tracing هستند.

این واحدها در کنار Xe Coreها و منابع پردازشی
دیگر برای اجرای افکت‌های رهگیری پرتو در بازی یا
نرم‌افزارهای حرفه‌ای فعالیت می‌کنند.

کارایی نهایی به نسل معماری، تعداد واحدها، درایور،
موتور بازی، وضوح تصویر و استفاده از فناوری‌هایی
مانند XeSS وابسته است.

XMX چیست؟

XMX مخفف
Xe Matrix Extensions
است و به واحدهای ماتریسی موجود در بعضی GPUهای
جدید Intel اشاره دارد.

این واحدها برای شتاب‌دادن به محاسبات هوش مصنوعی،
ضرب ماتریسی، بازسازی تصویر و وظایف مرتبط با
یادگیری ماشین طراحی شده‌اند.

XMX از نظر نقش کلی به واحدهای ماتریسی سایر
شرکت‌ها شباهت دارد؛ اما ساختار، قالب‌های عددی و
اکوسیستم نرم‌افزاری آن متفاوت است.

XMX در XeSS

فناوری XeSS در سخت‌افزارهای سازگار می‌تواند از
XMX برای اجرای شبکه بازسازی تصویر استفاده کند.

XeSS ممکن است در بعضی سخت‌افزارهای دیگر نیز مسیر
اجرایی متفاوتی داشته باشد؛ اما استفاده از واحد
اختصاصی می‌تواند مزیت عملکردی ایجاد کند.


XMX با Xe Core یکسان نیست

Xe Core یک بلوک پردازشی بزرگ‌تر است. XMX
واحدی تخصصی برای محاسبات ماتریسی داخل ساختار
GPUهای سازگار محسوب می‌شود.

واحدهای AI و Matrix در GPUهای AMD

AMD در نسل‌ها و خانواده‌های مختلف از ساختارهای
متفاوتی برای شتاب‌دادن به محاسبات ماتریسی و
هوش مصنوعی استفاده می‌کند.

این قابلیت‌ها ممکن است در کارت‌های Radeon،
Radeon Pro یا شتاب‌دهنده‌های Instinct با ساختار
و هدف متفاوت ارائه شوند.

محصولات Instinct و معماری‌های محاسباتی CDNA برای
هوش مصنوعی، محاسبات علمی و دیتاسنتر طراحی شده‌اند،
در حالی که Radeon بیشتر بر گرافیک، بازی و تولید
محتوا تمرکز دارد.


برای AI فقط نام واحد سخت‌افزاری کافی نیست

پشتیبانی ROCm، سیستم‌عامل، نسخه فریم‌ورک،
کتابخانه‌ها، ظرفیت حافظه و مدل دقیق GPU باید
پیش از خرید بررسی شوند.

مقایسه واحدهای AI و Ray Tracing

مقایسه مفهومی شتاب‌دهنده‌های اختصاصی GPU
شرکت واحد AI یا Matrix واحد Ray Tracing خانواده‌های رایج
NVIDIA Tensor Core RT Core GeForce RTX، Quadro RTX،
RTX Professional
AMD AI یا Matrix Accelerator متناسب
با معماری
Ray Accelerator Radeon RX، Radeon Pro، Instinct
Intel XMX Ray Tracing Unit Intel Arc و Arc Pro


تعداد واحدهای سه شرکت قابل مقایسه مستقیم نیست

یک Tensor Core، یک XMX یا یک شتاب‌دهنده AI
در AMD ساختار و توان یکسانی ندارند. نتایج
واقعی نرم‌افزار و پشتیبانی اکوسیستم معیار
معتبرتری هستند.

Tensor و RT Core در Quadro و RTX Professional

تمام کارت‌های Quadro دارای Tensor Core یا RT Core
نیستند. وجود این واحدها به معماری GPU بستگی دارد.

Quadro K، Quadro M و Quadro P پیش از معرفی گسترده
RTX عرضه شدند و معمولاً فاقد Tensor Core و RT Core
اختصاصی هستند.

خانواده Quadro RTX بر پایه Turing، واحدهای Tensor
و RT را وارد محصولات ورک‌استیشن کرد.

محصولات جدیدتر RTX A Series، RTX Ada و
RTX Professional نیز بر اساس نسل معماری خود از
این شتاب‌دهنده‌ها بهره می‌برند.

وضعیت واحدهای اختصاصی در خانواده‌های حرفه‌ای NVIDIA
خانواده معماری رایج Tensor Core RT Core
Quadro K Kepler ندارد ندارد
Quadro M Maxwell ندارد ندارد
Quadro P Pascal معمولاً ندارد ندارد
Quadro GV100 Volta دارد ندارد
Quadro RTX Turing دارد دارد
RTX A Series Ampere دارد دارد
RTX Ada Ada Lovelace دارد دارد


Quadro قدیمی هنوز می‌تواند برای CAD مناسب باشد

نبود Tensor Core یا RT Core به معنی بی‌استفاده
بودن کارت نیست. Quadro P2000 یا M2000M ممکن است
برای CAD و مدل‌سازی سبک مناسب باشد؛ اما برای
Ray Tracing، AI جدید و رندر عصبی محدود است.

آیا کارت‌های GTX و GPUهای قدیمی Tensor یا RT Core دارند؟

بیشتر کارت‌های GTX قدیمی مانند GTX 750 Ti،
GTX 960، GTX 1050 Ti و GTX 1060 فاقد Tensor Core
و RT Core اختصاصی هستند.

سری GTX 16 از معماری Turing استفاده می‌کند، اما
بیشتر مدل‌های آن واحدهای اختصاصی فعال مشابه
GeForce RTX را ندارند.

نبود RT Core مانع اجرای تمام بازی‌ها نمی‌شود.
این کارت‌ها همچنان می‌توانند مسیر Rasterization
و Shaderهای عادی را اجرا کنند.

بعضی محاسبات هوش مصنوعی نیز ممکن است روی CUDA Core
اجرا شوند؛ اما سرعت و بهره‌وری آن‌ها با GPU دارای
Tensor Core یکسان نیست.

وضعیت تقریبی واحدهای اختصاصی در کارت‌های قدیمی
مدل یا خانواده Tensor Core RT Core توضیح
GTX 750 Ti ندارد ندارد معماری Maxwell
GTX 960M ندارد ندارد لپ‌تاپی و مبتنی بر Maxwell
GTX 1050 Ti ندارد ندارد معماری Pascal
GTX 1060 ندارد ندارد معماری Pascal
GTX 1650 معمولاً واحد اختصاصی فعال ندارد ندارد خانواده GTX مبتنی بر Turing
RTX 2060 دارد دارد نخستین نسل GeForce RTX
RX 580 واحد اختصاصی جدید ندارد ندارد معماری Polaris
Intel HD 4000 ندارد ندارد گرافیک مجتمع قدیمی

کاربرد واحدهای AI و Ray Tracing در نرم‌افزارها

نقش شتاب‌دهنده‌های اختصاصی در کاربردهای مختلف
کاربرد واحد مؤثر نکته مهم
بازی با Ray Tracing RT Core، Ray Accelerator یا واحد معادل DLSS، FSR یا XeSS ممکن است به افزایش
نرخ فریم کمک کند
Blender واحدهای Compute، RT و AI موتور رندر و Backend تعیین‌کننده است
حذف نویز رندر واحدهای AI یا Matrix نرم‌افزار باید از مسیر سازگار استفاده کند
Stable Diffusion Tensor یا واحدهای ماتریسی VRAM و پشتیبانی نرم‌افزار بسیار مهم است
تدوین ویدئو AI برای بعضی افکت‌ها موتور Encode و Decode نقش جداگانه دارد
CAD معمولاً Shader و درایور حرفه‌ای Tensor و RT همیشه عامل اصلی نیستند
رندر معماری RT، AI و Compute موتور رندر باید شتاب‌دهی GPU را پشتیبانی کند

هنگام خرید، Tensor Core و RT Core چقدر اهمیت دارند؟

برای بازی بدون Ray Tracing

قدرت Rasterization، VRAM، پهنای حافظه و
عملکرد واقعی بازی اهمیت بیشتری دارند.

برای بازی با Ray Tracing

نسل و عملکرد واحدهای RT، فناوری افزایش
وضوح و ظرفیت حافظه مهم هستند.

برای هوش مصنوعی

واحدهای ماتریسی مهم‌اند؛ اما VRAM،
اکوسیستم نرم‌افزار و پشتیبانی فریم‌ورک
اولویت بالاتری دارند.

برای AutoCAD

Tensor Core و RT Core معمولاً اولویت اصلی
نیستند؛ پایداری، CPU و Viewport مهم‌ترند.

برای SolidWorks

درایور حرفه‌ای، گواهی ISV و VRAM معمولاً
مهم‌تر از تعداد واحدهای AI هستند.

برای Blender و رندر

واحدهای RT و AI می‌توانند بسیار مفید باشند؛
اما موتور رندر و Backend باید سازگار باشد.


کارت جدیدتر را فقط به دلیل عبارت AI خریداری نکنید

بررسی کنید نرم‌افزار شما دقیقاً از کدام سخت‌افزار،
API و Backend استفاده می‌کند. امکانات تبلیغاتی
بدون پشتیبانی نرم‌افزار ممکن است برای کاربرد
شما سودی نداشته باشند.

اشتباهات رایج درباره Tensor و RT Core

  • تصور اینکه هر کارت NVIDIA دارای Tensor Core است
  • تصور اینکه تمام کارت‌های Quadro دارای RT Core هستند
  • برابر دانستن Tensor Core با CUDA Core
  • برابر دانستن XMX با Xe Core
  • مقایسه عددی واحدهای AI سه شرکت
  • انتخاب GPU هوش مصنوعی بدون بررسی VRAM
  • انتخاب کارت Ray Tracing بدون بررسی عملکرد Raster
  • نادیده‌گرفتن نسل واحدهای اختصاصی
  • فرض اینکه RT Core کل فرایند رندر را انجام می‌دهد
  • فرض اینکه نرم‌افزار به‌صورت خودکار از AI Core استفاده می‌کند

سؤالات متداول درباره Tensor Core، RT Core و XMX

Tensor Core چیست؟

Tensor Core واحد اختصاصی NVIDIA برای
شتاب‌دادن به محاسبات ماتریسی و بعضی
پردازش‌های هوش مصنوعی است.

آیا همه کارت‌های NVIDIA دارای Tensor Core هستند؟

خیر. این واحد در معماری‌ها و خانواده‌های
مشخصی مانند Volta و محصولات RTX وجود دارد.

آیا GTX 1060 Tensor Core دارد؟

خیر. GTX 1060 مبتنی بر Pascal است و
Tensor Core اختصاصی ندارد.

RT Core چیست؟

RT Core واحد اختصاصی NVIDIA برای شتاب‌دادن
به بخشی از محاسبات رهگیری پرتو است.

آیا Quadro P2000 دارای RT Core است؟

خیر. Quadro P2000 مبتنی بر Pascal است و
پیش از معرفی RT Core عرضه شده است.

آیا Quadro RTX دارای Tensor و RT Core است؟

بله. خانواده Quadro RTX مبتنی بر Turing
دارای Tensor Core و RT Core است.

Ray Accelerator چیست؟

نام واحدهای اختصاصی رهگیری پرتو در
معماری‌های سازگار AMD است.

XMX چیست؟

XMX واحد ماتریسی Intel برای شتاب‌دادن به
بعضی محاسبات AI و فناوری‌هایی مانند XeSS
است.

آیا Tensor Core برای AutoCAD ضروری است؟

معمولاً خیر. پردازنده، درایور، Viewport
و توان عمومی GPU برای بیشتر پروژه‌های
AutoCAD مهم‌تر هستند.

برای Stable Diffusion چه چیزی مهم‌تر است؟

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


فصل ۱۵

راهنمای فصل ساختمان داخلی پردازنده گرافیکی (GPU)

این فصل تمام اجزای داخلی GPU را از واحدهای پردازشی
تا حافظه، موتورهای رندر، فناوری‌های هوش مصنوعی،
Ray Tracing، موتورهای ویدئویی و APIهای گرافیکی
به‌صورت مرحله‌به‌مرحله بررسی می‌کند.


فصل ۱۵

راهنمای فصل ساختمان داخلی پردازنده گرافیکی (GPU)

این فصل تمام اجزای داخلی GPU را از واحدهای پردازشی
تا حافظه، موتورهای رندر، فناوری‌های هوش مصنوعی،
Ray Tracing، موتورهای ویدئویی و APIهای گرافیکی
به‌صورت مرحله‌به‌مرحله بررسی می‌کند.


فصل ۱۵-۴

TMU، ROP، Raster Engine و موتور رندر کارت گرافیک

بعد از پایان پردازش Shaderها و محاسبات هندسی،
GPU باید بافت‌ها را روی مدل‌ها قرار دهد،
پیکسل‌ها را تولید کند،
عملیات عمق و شفافیت را انجام دهد
و در نهایت تصویر آماده را داخل حافظه Frame Buffer ذخیره کند.

تمام این مراحل توسط مجموعه‌ای از واحدهای سخت‌افزاری
مانند TMU، Raster Engine و ROP انجام می‌شود.

مسیر کامل تولید تصویر در GPU

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

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


این مسیر همیشه کاملاً خطی نیست

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

Primitive در گرافیک سه‌بعدی چیست؟

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

بیشتر مدل‌های سه‌بعدی از تعداد زیادی مثلث تشکیل
شده‌اند؛ زیرا پردازش و تبدیل مثلث‌ها به پیکسل برای
سخت‌افزار گرافیکی ساختاری ساده و قابل پیش‌بینی دارد.

Point

یک موقعیت منفرد در فضای گرافیکی است و
می‌تواند برای ذرات، نقاط یا داده‌های ساده
استفاده شود.

Line

مسیری میان دو یا چند رأس است و در رسم
خطوط، نمودارها، Wireframe و رابط‌های فنی
کاربرد دارد.

Triangle

مهم‌ترین Primitive در رندر سه‌بعدی است و
سطح بیشتر مدل‌ها با کنارهم‌قرارگرفتن
مثلث‌ها ساخته می‌شود.

Primitive Assembly چیست؟

پس از پردازش رأس‌ها، GPU باید آن‌ها را بر اساس
دستور رسم به نقطه، خط یا مثلث تبدیل کند. این مرحله
Primitive Assembly نام دارد.

در این مرحله مشخص می‌شود کدام رأس‌ها یک مثلث را
تشکیل می‌دهند و ترتیب آن‌ها چگونه است. سپس
Primitiveهای ساخته‌شده برای ادامه پردازش به بخش
Rasterization فرستاده می‌شوند.

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

Rasterization چیست؟

Rasterization فرایند تبدیل Primitiveهای هندسی
مانند مثلث به مجموعه‌ای از Fragmentهای قابل پردازش
برای تصویر است.

موتور Raster محاسبه می‌کند که هر مثلث چه بخشی از
صفحه را پوشش می‌دهد و برای کدام نقاط تصویر باید
Fragment ایجاد شود.

Fragment هنوز الزاماً پیکسل نهایی نیست. این داده
باید مراحل دیگری مانند Pixel Shader، نمونه‌برداری
بافت، آزمون عمق و ترکیب رنگ را طی کند.

Fragment

  • خروجی اولیه Rasterization است.
  • اطلاعاتی مانند مختصات، عمق و
    داده‌های درون‌یابی‌شده دارد.
  • ممکن است در مراحل بعدی حذف شود.

Pixel نهایی

  • نتیجه‌ای است که در Frame Buffer
    نوشته می‌شود.
  • آزمون‌های عمق و Stencil را پشت سر
    گذاشته است.
  • ممکن است با رنگ قبلی ترکیب شده باشد.

TMU چیست؟

TMU مخفف عبارت
Texture Mapping Unit
و به معنی «واحد نگاشت یا پردازش بافت» است.

TMU داده‌های Texture را از حافظه یا کش دریافت
می‌کند، مختصات بافت را پردازش می‌کند و نمونه مناسب
را برای Shader فراهم می‌سازد.

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


Texture چیست؟

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

TMU چه وظایفی دارد؟

خواندن Texture

دریافت داده‌های بافت از حافظه کش یا VRAM
بر اساس مختصات درخواستی Shader.

Addressing

تعیین نحوه برخورد با مختصاتی که خارج از
محدوده اصلی Texture قرار می‌گیرند.

Sampling

انتخاب یک یا چند Texel برای محاسبه نتیجه
مناسب هر Fragment.

Filtering

ترکیب نمونه‌های مجاور برای کاهش حالت
پیکسلی، لرزش یا افت کیفیت بافت.

انتخاب Mipmap

انتخاب نسخه مناسب بافت بر اساس فاصله و
اندازه آن روی صفحه.

فشرده‌سازی بافت

خواندن و بازکردن قالب‌های فشرده سازگار
برای کاهش مصرف حافظه و پهنای باند.

Texel چیست؟

Texel مخفف
Texture Element
است و کوچک‌ترین عنصر قابل نمونه‌برداری در یک
Texture محسوب می‌شود.

همان‌طور که Pixel کوچک‌ترین عنصر یک تصویر
نمایش‌داده‌شده است، Texel نیز یکی از عناصر داده‌ای
داخل بافت است.

یک Texel ممکن است فقط اطلاعات رنگ نداشته باشد.
بسته به نوع Texture، می‌تواند شامل داده‌های نرمال،
زبری، عمق، جابه‌جایی یا ماسک نیز باشد.


Texel و Pixel همیشه رابطه یک‌به‌یک ندارند

یک Texel ممکن است روی چند پیکسل نمایش داده شود
یا چند Texel برای محاسبه یک پیکسل نمونه‌برداری
شوند. فاصله دوربین، زاویه سطح و وضوح Texture
این رابطه را تغییر می‌دهند.

مختصات UV چیست؟

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

این نگاشت معمولاً با مختصات
U
و
V
انجام می‌شود. حروف U و V به‌جای X و Y به کار
می‌روند تا مختصات Texture از مختصات فضایی مدل
جدا باشد.

فرایند بازکردن سطح مدل و قراردادن آن روی فضای
دوبعدی Texture با عنوان
UV Unwrapping
شناخته می‌شود.


اهمیت UV در Blender و Maya

اگر UV مدل به‌درستی ساخته نشده باشد، بافت ممکن
است کشیده، فشرده، چرخیده یا درزدار دیده شود.
قدرت بالاتر GPU نمی‌تواند یک UV Map نامناسب را
اصلاح کند.

حالت‌های Texture Addressing

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

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

Texture Sampling چیست؟

Texture Sampling فرایند خواندن داده از Texture
بر اساس مختصات مشخص است.

Shader یک مختصات Texture را درخواست می‌کند و
واحدهای بافت یک یا چند Texel نزدیک به آن موقعیت
را می‌خوانند.

نتیجه ممکن است مستقیماً از نزدیک‌ترین Texel گرفته
شود یا از ترکیب چند نمونه مجاور به دست آید.


مرحله ۱


دریافت مختصات

Shader مختصات UV یا مختصات نمونه‌برداری را
برای Texture Unit ارسال می‌کند.


مرحله ۲


انتخاب سطح Mipmap

GPU نسخه‌ای از Texture را متناسب با اندازه
آن روی صفحه انتخاب می‌کند.


مرحله ۳


خواندن Texelها

یک یا چند نمونه از کش Texture یا VRAM
دریافت می‌شوند.


مرحله ۴


فیلترکردن نمونه‌ها

نمونه‌ها با روش انتخاب‌شده ترکیب می‌شوند
تا خروجی نرم‌تر و دقیق‌تری تولید شود.


مرحله ۵


تحویل نتیجه به Shader

مقدار نهایی برای ادامه محاسبات رنگ، نور یا
ماده در اختیار Shader قرار می‌گیرد.

Texture Cache چیست؟

دسترسی مستقیم و مداوم به VRAM زمان و پهنای باند
زیادی مصرف می‌کند. به همین دلیل GPU از حافظه کش
مخصوص یا مشترک برای نگهداری داده‌های Texture
پراستفاده بهره می‌گیرد.

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

الگوی دسترسی منظم و نزدیک‌بودن نمونه‌ها به یکدیگر
می‌تواند استفاده مؤثرتری از Texture Cache ایجاد
کند.

Texture Filtering چیست؟

Texture Filtering روشی برای محاسبه مقدار مناسب
میان Texelهای موجود است تا بافت در زمان بزرگ‌شدن،
کوچک‌شدن یا مشاهده از زاویه‌های مختلف کیفیت بهتری
داشته باشد.

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

مقایسه روش‌های رایج Texture Filtering
روش نحوه نمونه‌برداری کیفیت نسبی هزینه پردازشی نسبی
Nearest انتخاب نزدیک‌ترین Texel پایین یا پیکسلی بسیار کم
Bilinear ترکیب نمونه‌های مجاور یک سطح متوسط کم
Trilinear ترکیب نمونه‌های دو سطح Mipmap بهتر و نرم‌تر متوسط
Anisotropic نمونه‌برداری متناسب با زاویه سطح بالا در سطوح زاویه‌دار بیشتر

Nearest-Neighbor Filtering

در روش Nearest، نزدیک‌ترین Texel به مختصات
درخواستی انتخاب می‌شود و مقدار آن بدون ترکیب با
نمونه‌های دیگر بازگردانده می‌شود.

این روش بسیار سریع است، اما هنگام بزرگ‌نمایی
Texture حالت بلوکی و پیکسلی ایجاد می‌کند.

Nearest Filtering در بازی‌های Pixel Art یا زمانی
که حفظ لبه‌های سخت و پیکسل‌های اصلی مطلوب است،
می‌تواند انتخاب مناسبی باشد.

Bilinear Filtering

Bilinear Filtering معمولاً چند Texel مجاور در
یک سطح Texture را نمونه‌برداری و با توجه به فاصله
آن‌ها ترکیب می‌کند.

این روش ظاهر پیکسلی را کاهش می‌دهد و نتیجه نرم‌تری
نسبت به Nearest ایجاد می‌کند.

بااین‌حال هنگام جابه‌جایی میان سطوح مختلف Mipmap
ممکن است مرز یا تغییر محسوسی دیده شود.

Trilinear Filtering

Trilinear Filtering نتیجه Bilinear Filtering را
میان دو سطح مجاور Mipmap نیز ترکیب می‌کند.

این کار تغییر ناگهانی کیفیت میان Mipmapها را کاهش
می‌دهد و حرکت دوربین روی سطوح را نرم‌تر نشان
می‌دهد.

هزینه آن از Bilinear بیشتر است، اما در GPUهای
جدید معمولاً فشار غیرعادی و بسیار سنگینی ایجاد
نمی‌کند.

Mipmap چیست؟

Mipmap مجموعه‌ای از نسخه‌های کوچک‌تر یک Texture
است که از قبل تولید و ذخیره می‌شوند.

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

مزایای Mipmap

  • کاهش لرزش و Aliasing در بافت‌های دور
  • کاهش پهنای باند موردنیاز
  • بهبود استفاده از Texture Cache
  • افزایش ثبات کیفیت هنگام حرکت دوربین
  • کاهش نمونه‌برداری غیرضروری از Texture بزرگ


Mipmap حافظه مصرف می‌کند

ذخیره سطوح اضافی Mipmap به فضای بیشتری در
حافظه یا فایل نیاز دارد؛ اما معمولاً مزایای
کیفیت و عملکرد آن ارزش این هزینه را دارد.

Anisotropic Filtering چیست؟

زمانی که یک سطح با زاویه تند نسبت به دوربین دیده
می‌شود، نمونه‌برداری معمولی می‌تواند باعث محوشدن
سریع Texture شود.

Anisotropic Filtering الگوی نمونه‌برداری را با
جهت و زاویه سطح تطبیق می‌دهد تا جزئیات بافت در
فاصله و زاویه بیشتر حفظ شود.

این قابلیت به‌ویژه روی جاده‌ها، کف زمین، دیوارهای
طولانی و سطوحی که به سمت افق امتداد دارند، تأثیر
محسوسی دارد.

2x

بهبود محدود با هزینه پردازشی پایین.

4x

تعادل مناسب میان کیفیت و عملکرد در
سخت‌افزارهای قدیمی‌تر.

8x

وضوح بهتر بافت در زاویه‌های تند.

16x

بالاترین سطح رایج برای حفظ جزئیات بافت.


آیا Anisotropic Filtering را فعال کنیم؟

روی بسیاری از GPUهای جدید، فعال‌کردن سطح 8x
یا 16x افت عملکرد نسبتاً محدودی دارد؛ اما روی
کارت‌های بسیار قدیمی یا بازی‌های سنگین بهتر است
نتیجه عملی همان سیستم بررسی شود.

فشرده‌سازی Texture چیست؟

Textureهای باوضوح بالا می‌توانند مقدار زیادی
حافظه و پهنای باند مصرف کنند. قالب‌های فشرده‌سازی
بافت برای کاهش حجم داده و انتقال مؤثرتر آن طراحی
شده‌اند.

GPU می‌تواند قالب‌های فشرده سازگار را مستقیماً
بخواند و هنگام نمونه‌برداری، داده موردنیاز را
بازگشایی کند.

میزان کیفیت، نرخ فشرده‌سازی و پشتیبانی سخت‌افزاری
به قالب Texture و API مورد استفاده بستگی دارد.


فشرده‌سازی بافت با فشرده‌سازی فایل یکسان نیست

قالب فشرده Texture معمولاً برای دسترسی مستقیم
و تصادفی GPU طراحی شده است؛ درحالی‌که فایل‌های
فشرده عمومی ممکن است پیش از استفاده کاملاً
باز شوند.

تعداد TMU چه تأثیری بر عملکرد دارد؟

تعداد TMU می‌تواند بر تعداد نمونه‌های بافتی که GPU
در هر سیکل پردازش می‌کند اثر بگذارد؛ اما این عدد
به‌تنهایی قدرت واقعی کارت را مشخص نمی‌کند.

فرکانس GPU، معماری، کش، پهنای باند حافظه، تعداد
Shaderها، نوع Texture و موتور بازی نیز بر عملکرد
بافت‌گذاری اثر دارند.

دو کارت با تعداد TMU مشابه ممکن است به دلیل تفاوت
معماری یا حافظه، عملکرد کاملاً متفاوتی داشته باشند.


Texture Fill Rate معیار کامل نیست

نرخ پرکردن بافت معمولاً از تعداد TMU و فرکانس
محاسبه می‌شود، اما محدودیت حافظه، کش و نوع
بار پردازشی می‌تواند مانع رسیدن کارت به مقدار
نظری شود.

اهمیت TMU در کارت‌های قدیمی و ورک‌استیشن

کارت‌های قدیمی مانند GTX 960M، GTX 1050 Ti،
Quadro K2100M، Quadro M2000M، Quadro P2000،
Radeon RX 570 و RX 580 نیز دارای واحدهای پردازش
بافت هستند.

عملکرد این کارت‌ها در Viewport و بازی فقط به تعداد
TMU وابسته نیست. معماری، VRAM، پهنای باند حافظه،
درایور و توان مصرفی نیز باید بررسی شوند.

کارت‌های Quadro و RTX Professional ممکن است در
نرم‌افزارهای مهندسی به دلیل درایور حرفه‌ای و
بهینه‌سازی Viewport عملکرد پایدارتر یا قابل
پیش‌بینی‌تری ارائه کنند؛ حتی اگر مشخصات خام آن‌ها
از یک کارت گیمینگ بسیار بالاتر نباشد.

نقش پردازش بافت در چند نوع کاربرد
کاربرد اهمیت TMU و Texture عامل مکمل
بازی بسیار زیاد Shader، ROP، VRAM و پهنای باند
Blender Viewport زیاد Shader، VRAM و درایور
Maya زیاد پیچیدگی صحنه و درایور
SolidWorks متوسط درایور حرفه‌ای و CPU
AutoCAD دوبعدی کم تا متوسط CPU و پیچیدگی فایل
تدوین ویدئو وابسته به افکت و نرم‌افزار موتور رسانه و VRAM

ROP چیست؟

ROP مخفف
Raster Operations Pipeline
یا
Render Output Unit
است و یکی از بخش‌های پایانی مسیر تولید تصویر در GPU
محسوب می‌شود.

پس از آنکه Pixel Shader یا Fragment Shader رنگ،
نور، بافت و سایر ویژگی‌های یک Fragment را محاسبه
کرد، نتیجه باید آزمون‌های نهایی را پشت سر بگذارد
و در حافظه Frame Buffer نوشته شود.

ROPها در عملیاتی مانند آزمون عمق، آزمون Stencil،
ترکیب رنگ، نوشتن پیکسل و بعضی روش‌های
Anti-Aliasing نقش دارند.


تعریف ساده ROP

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

مهم‌ترین وظایف ROP

Depth Test

بررسی می‌کند Fragment جدید در جلوی پیکسل
قبلی قرار دارد یا پشت آن پنهان شده است.

Stencil Test

مشخص می‌کند نوشتن یا پردازش یک بخش از
تصویر بر اساس ماسک Stencil مجاز است یا نه.

Color Blending

رنگ Fragment جدید را با رنگ موجود در
Frame Buffer ترکیب می‌کند.

Pixel Write

نتیجه نهایی را در Render Target یا
Frame Buffer ذخیره می‌کند.

Anti-Aliasing Operations

در بعضی روش‌های Anti-Aliasing، نمونه‌ها
را ترکیب و نتیجه نهایی پیکسل را تولید
می‌کند.

Compression

در معماری‌های سازگار، داده‌های رنگ یا عمق
را برای کاهش مصرف پهنای باند فشرده می‌کند.

تفاوت Raster Engine و ROP

مقایسه Raster Engine و ROP
معیار Raster Engine ROP
مرحله پردازش میانه مسیر رندر مراحل پایانی رندر
وظیفه اصلی تبدیل Primitive به Fragment آزمون و نوشتن خروجی پیکسل
ورودی مثلث‌ها و Primitiveها Fragmentهای پردازش‌شده
خروجی Fragmentهای اولیه داده نهایی Frame Buffer
عملیات شاخص Coverage و Rasterization Depth، Stencil، Blending و Write

Depth Buffer چیست؟

Depth Buffer حافظه‌ای است که فاصله تقریبی هر
پیکسل یا نمونه را نسبت به دوربین ذخیره می‌کند.

این اطلاعات کمک می‌کند GPU تشخیص دهد کدام سطح
در جلوی سطح دیگر قرار دارد و باید دیده شود.

Depth Buffer معمولاً با نام
Z-Buffer
نیز شناخته می‌شود؛ زیرا در بسیاری از سیستم‌های
مختصات، محور Z با عمق صحنه ارتباط دارد.


مثال ساده

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

Depth Test چگونه کار می‌کند؟


مرحله ۱


تولید مقدار عمق

برای Fragment جدید یک مقدار Depth محاسبه
می‌شود.


مرحله ۲


خواندن عمق قبلی

مقدار ذخیره‌شده در Depth Buffer برای همان
موقعیت خوانده می‌شود.


مرحله ۳


مقایسه

GPU بررسی می‌کند Fragment جدید بر اساس
تابع Depth انتخاب‌شده جلوتر است یا عقب‌تر.


مرحله ۴


پذیرش یا حذف

Fragment پذیرفته می‌شود یا بدون نوشتن رنگ
کنار گذاشته می‌شود.


مرحله ۵


به‌روزرسانی عمق

در صورت مجازبودن، مقدار جدید داخل Depth
Buffer ذخیره می‌شود.

Early-Z چیست؟

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

این تکنیک با عنوان
Early-Z
شناخته می‌شود و از اجرای محاسبات غیرضروری Shader
جلوگیری می‌کند.

Early-Z به‌ویژه در صحنه‌هایی که تعداد زیادی سطح
روی یکدیگر قرار گرفته‌اند، می‌تواند باعث کاهش بار
پردازشی شود.


Early-Z همیشه قابل استفاده نیست

بعضی Shaderها مقدار Depth را تغییر می‌دهند یا
عملیات خاصی انجام می‌دهند که مانع تصمیم‌گیری
زودهنگام GPU می‌شود.

Z-Fighting چیست؟

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

نتیجه می‌تواند به‌شکل لرزش، چشمک‌زدن یا جابه‌جایی
متناوب میان دو سطح دیده شود. این مشکل
Z-Fighting
نام دارد.

افزایش دقت Depth Buffer، اصلاح Near و Far Plane،
ایجاد فاصله میان سطوح یا استفاده از Depth Bias
می‌تواند این مشکل را کاهش دهد.

Stencil Buffer چیست؟

Stencil Buffer حافظه‌ای برای ذخیره مقادیر کوچک
کنترلی در هر پیکسل یا نمونه است.

این مقادیر به GPU اجازه می‌دهند بخش‌هایی از تصویر
را علامت‌گذاری کند و در مراحل بعدی فقط در نواحی
مشخص عملیات انجام دهد.

Stencil Buffer برای ساخت ماسک‌های گرافیکی،
سایه‌ها، آینه‌ها، Portalها، Outline و افکت‌های
ترکیبی کاربرد دارد.


تعریف ساده Stencil

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

Stencil Test چگونه کار می‌کند؟

GPU مقدار Stencil ذخیره‌شده را با یک مقدار مرجع
مقایسه می‌کند.

بر اساس تابع مقایسه، Fragment می‌تواند پذیرفته یا
رد شود. همچنین ممکن است مقدار Stencil بعد از
عبور یا شکست آزمون تغییر کند.

چند کاربرد رایج Stencil Buffer
کاربرد نقش Stencil
آینه محدودکردن تصویر بازتابی به سطح آینه
Portal نمایش صحنه دوم فقط داخل محدوده درگاه
Outline علامت‌گذاری شیء و ترسیم حاشیه اطراف آن
Shadow Volume تعیین نواحی قرارگرفته در سایه
رابط کاربری محدودکردن رندر به ناحیه یا شکل مشخص

Color Buffer چیست؟

Color Buffer بخشی از حافظه است که مقادیر رنگی
تصویر رندرشده در آن نگهداری می‌شوند.

هر پیکسل می‌تواند شامل کانال‌های قرمز، سبز، آبی
و در صورت نیاز Alpha باشد.

قالب Color Buffer تعیین می‌کند هر کانال چه میزان
دقت داشته باشد؛ برای نمونه ۸، ۱۰، ۱۶ یا ۳۲ بیت
برای هر کانال.

در رندر HDR یا محاسبات حرفه‌ای ممکن است از قالب‌های
دقیق‌تر و اعشاری استفاده شود.

Alpha Channel چیست؟

Alpha Channel معمولاً اطلاعات شفافیت یا وزن ترکیب
رنگ را ذخیره می‌کند.

مقدار Alpha می‌تواند مشخص کند رنگ جدید با چه
شدتی روی رنگ قبلی اعمال شود.

کاربرد دقیق Alpha به موتور رندر و Shader بستگی
دارد و همیشه فقط به معنی شفافیت ساده نیست.

Color Blending چیست؟

Blending فرایند ترکیب رنگ Fragment جدید با رنگی
است که از قبل در Render Target ذخیره شده است.

این عملیات برای نمایش شیشه، دود، ذرات، نورهای
درخشان، رابط‌های نیمه‌شفاف و بسیاری از افکت‌های
دیگر استفاده می‌شود.


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

اجسام شفاف معمولاً باید با ترتیب مشخصی رندر
شوند؛ زیرا رنگ نهایی به محتوای موجود پشت آن‌ها
وابسته است.

Frame Buffer چیست؟

Frame Buffer بخشی از حافظه گرافیکی است که تصویر
آماده یا داده‌های مرتبط با رندر در آن ذخیره می‌شوند.

پس از پایان عملیات Shader، Depth، Stencil و
Blending، نتیجه نهایی هر پیکسل در یکی از Render
Targetها نوشته می‌شود.

Display Engine می‌تواند تصویر نهایی را از Buffer
مناسب بخواند و برای نمایشگر ارسال کند.


Frame Buffer فقط یک تصویر ساده نیست

در رندر مدرن ممکن است چندین Buffer برای رنگ،
عمق، نرمال، حرکت، نور، شناسه اشیا و سایر داده‌ها
به‌صورت هم‌زمان وجود داشته باشد.

Render Target چیست؟

Render Target مقصدی در حافظه است که GPU نتیجه
یک مرحله رندر را در آن می‌نویسد.

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

موتورهای رندر مدرن معمولاً چند Render Target را
هم‌زمان استفاده می‌کنند.

Multiple Render Targets چیست؟

در فناوری
Multiple Render Targets
یا MRT، یک مرحله Shader می‌تواند چند خروجی متفاوت
را هم‌زمان در Bufferهای جدا ذخیره کند.

این قابلیت در روش‌هایی مانند Deferred Rendering
کاربرد دارد؛ جایی که رنگ، نرمال، عمق و خصوصیات
متریال جداگانه ذخیره و بعداً برای محاسبه نور
استفاده می‌شوند.

Double Buffering و Triple Buffering

برای جلوگیری از نمایش تصویر ناقص، معمولاً یک Buffer
در حال نمایش و Buffer دیگری در حال رندر است.

در Double Buffering دو Buffer و در Triple Buffering
سه Buffer برای مدیریت فریم‌ها استفاده می‌شوند.

مقایسه Double و Triple Buffering
ویژگی Double Buffering Triple Buffering
تعداد Buffer دو سه
مصرف حافظه کمتر بیشتر
انعطاف صف فریم محدودتر بیشتر
تأخیر وابسته به حالت Sync ممکن است در بعضی حالت‌ها بیشتر شود

Screen Tearing چیست؟

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

این پدیده
Screen Tearing
نام دارد و معمولاً به‌شکل یک یا چند خط شکست افقی
در تصویر دیده می‌شود.

فناوری‌هایی مانند V-Sync، Adaptive Sync،
FreeSync و G-SYNC برای هماهنگ‌کردن تولید فریم و
نرخ نوسازی نمایشگر استفاده می‌شوند.

تعداد ROP چه تأثیری بر عملکرد دارد؟

تعداد ROP می‌تواند بر نرخ نوشتن پیکسل‌ها، عملیات
Blending، آزمون‌های عمق و عملکرد در وضوح‌های بالا
اثر بگذارد.

بااین‌حال تعداد ROP به‌تنهایی معیار کامل قدرت کارت
نیست. فرکانس، معماری، پهنای باند حافظه، فشرده‌سازی،
کش و نوع بار پردازشی نیز اهمیت دارند.

در بعضی بازی‌ها محدودیت Shader یا حافظه زودتر از
ROP ظاهر می‌شود و افزایش تعداد ROP تأثیر زیادی
ایجاد نمی‌کند.


Pixel Fill Rate مقدار نظری است

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

ROP در کارت‌های قدیمی، Quadro و ورک‌استیشن

کارت‌هایی مانند GTX 960M، GTX 1050 Ti، GTX 1060،
Quadro K2100M، Quadro M2000M، Quadro P2000،
Quadro RTX 4000، Radeon RX 580 و Intel Arc نیز
از واحدهای خروجی رندر استفاده می‌کنند.

در نرم‌افزارهای CAD، تعداد ROP به‌تنهایی معیار
اصلی انتخاب نیست و درایور حرفه‌ای، توان Viewport،
ظرفیت VRAM و سازگاری نرم‌افزار اهمیت بیشتری دارند.

در بازی، وضوح بالا، Anti-Aliasing و افکت‌های
شفافیت می‌توانند فشار بیشتری روی مراحل پایانی
رندر ایجاد کنند.

اشتباهات رایج درباره TMU، ROP و Frame Buffer

  • تصور اینکه تعداد TMU به‌تنهایی قدرت کارت را
    مشخص می‌کند.
  • مقایسه مستقیم تعداد ROP میان معماری‌های
    متفاوت.
  • یکی‌دانستن Raster Engine با ROP.
  • یکی‌دانستن Texel با Pixel.
  • تصور اینکه Frame Buffer فقط همان حافظه VRAM
    است.
  • نادیده‌گرفتن پهنای باند حافظه در کنار TMU و
    ROP.
  • تصور اینکه Anisotropic Filtering روی همه
    کارت‌های قدیمی بدون افت عملکرد اجرا می‌شود.
  • انتخاب کارت ورک‌استیشن فقط بر اساس تعداد TMU
    یا ROP.
  • تصور اینکه ROP تمام مراحل تولید تصویر را انجام
    می‌دهد.
  • یکی‌دانستن Depth Buffer، Stencil Buffer و
    Color Buffer.

سؤالات متداول درباره TMU، ROP و Frame Buffer

TMU چیست؟

TMU واحد پردازش بافت است و وظایفی مانند
خواندن Texture، نمونه‌برداری، Filtering و
انتخاب Mipmap را انجام می‌دهد.

آیا تعداد TMU بیشتر همیشه بهتر است؟

خیر. معماری، فرکانس، کش، پهنای باند حافظه
و نوع بار پردازشی نیز بر عملکرد اثر دارند.

تفاوت Texel و Pixel چیست؟

Texel عنصر داخل Texture است، اما Pixel
عنصر نهایی تصویر نمایش‌داده‌شده محسوب
می‌شود.

Mipmap چه کاربردی دارد؟

Mipmap نسخه‌های کوچک‌تر یک Texture را
نگهداری می‌کند تا اشیای دور با کیفیت و
کارایی بهتری نمایش داده شوند.

Anisotropic Filtering چیست؟

روشی برای حفظ وضوح Texture روی سطوحی است
که با زاویه تند یا در فاصله زیاد دیده
می‌شوند.

ROP چیست؟

ROP یکی از واحدهای پایانی مسیر رندر است و
در آزمون عمق، Stencil، Blending و نوشتن
نتیجه در Frame Buffer نقش دارد.

آیا ROP و Raster Engine یکی هستند؟

خیر. Raster Engine Primitiveها را به
Fragment تبدیل می‌کند؛ ROP در مراحل پایانی
خروجی پیکسل را پردازش و ذخیره می‌کند.

Depth Buffer چیست؟

حافظه‌ای است که فاصله سطوح نسبت به دوربین
را ذخیره می‌کند تا GPU تشخیص دهد کدام سطح
باید دیده شود.

تفاوت Depth Buffer و Stencil Buffer چیست؟

Depth Buffer عمق سطوح را ذخیره می‌کند؛
Stencil Buffer مقادیر کنترلی برای محدودکردن
رندر به نواحی مشخص نگه می‌دارد.

Frame Buffer چیست؟

بخشی از حافظه گرافیکی است که تصویر نهایی
یا داده‌های میانی رندر در آن ذخیره می‌شوند.

آیا VRAM بیشتر باعث افزایش تعداد ROP می‌شود؟

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

برای AutoCAD تعداد ROP مهم است؟

در پروژه‌های دوبعدی معمولاً عامل اصلی
نیست. CPU، درایور، پایداری و پیچیدگی فایل
اهمیت بیشتری دارند.

برای Blender تعداد TMU مهم‌تر است یا VRAM؟

هر دو مهم‌اند، اما در صحنه‌های بزرگ کمبود
VRAM می‌تواند محدودیت شدیدتری ایجاد کند.
نوع موتور رندر و توان Compute نیز باید
بررسی شود.

آیا Quadro قدیمی برای پردازش Texture مناسب است؟

مدل‌هایی مانند Quadro M2000M یا P2000
می‌توانند برای Viewport و پروژه‌های سبک تا
متوسط مناسب باشند، اما باید معماری، VRAM،
درایور و حجم پروژه بررسی شود.


فصل ۱۵-۵

حافظه داخلی GPU، Cache، Register، Shared Memory و VRAM

پردازنده گرافیکی برای اجرای سریع هزاران Thread به
چندین سطح حافظه نیاز دارد. Registerها، حافظه مشترک،
کش‌های L1 و L2، حافظه‌های کش بزرگ‌تر و VRAM هرکدام
ظرفیت، سرعت، تأخیر و کاربرد متفاوتی دارند.

سلسله‌مراتب حافظه GPU چیست؟

همه حافظه‌های GPU سرعت و ظرفیت یکسانی ندارند.
حافظه‌های بسیار نزدیک به واحدهای پردازشی سریع‌ترند،
اما ظرفیت کمتری دارند. حافظه‌های دورتر ظرفیت بیشتری
ارائه می‌کنند، اما دسترسی به آن‌ها زمان بیشتری
نیاز دارد.

GPU برای کاهش تأخیر و جلوگیری از مراجعه مداوم به
VRAM، داده‌های پراستفاده را در Registerها و
حافظه‌های کش نگهداری می‌کند.


چرا چند سطح حافظه وجود دارد؟

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

مقایسه سطوح مختلف حافظه GPU

مقایسه مفهومی حافظه‌های داخلی و خارجی GPU
سطح حافظه سرعت نسبی ظرفیت نسبی کاربرد اصلی
Register بسیار زیاد بسیار کم داده‌های فعال هر Thread
Shared Memory بسیار زیاد کم اشتراک داده میان گروه Threadها
L1 Cache زیاد کم تا متوسط داده‌های نزدیک به واحد پردازشی
L2 Cache متوسط تا زیاد متوسط اشتراک داده میان بخش‌های GPU
Last-Level Cache متوسط متوسط تا زیاد کاهش مراجعه مستقیم به VRAM
VRAM کمتر از Cache زیاد Texture، مدل، Buffer و داده محاسباتی
System RAM کمتر بسیار زیاد حافظه اصلی سیستم و گرافیک مجتمع

Register در GPU چیست؟

Register سریع‌ترین نوع حافظه‌ای است که واحدهای
پردازشی GPU برای نگهداری داده‌های فعال استفاده
می‌کنند.

متغیرهای موقت، نتیجه محاسبات میانی، مختصات، اندیس‌ها
و داده‌هایی که هر Thread به‌طور مداوم نیاز دارد،
می‌توانند داخل Register قرار بگیرند.

Registerها داخل یا بسیار نزدیک به بلوک‌های پردازشی
مانند SM، Compute Unit یا Xe Core قرار دارند.


Register حافظه اختصاصی هر Thread است

هر Thread معمولاً مجموعه‌ای از Registerها را برای
داده‌های خودش استفاده می‌کند. تعداد زیاد Threadها
باعث می‌شود ظرفیت کلی Register File اهمیت زیادی
پیدا کند.

Register File چیست؟

Register File مجموعه بزرگی از Registerهای فیزیکی
داخل یک بلوک پردازشی GPU است.

زمانی که یک گروه Thread روی یک SM یا Compute Unit
اجرا می‌شود، بخشی از Register File به آن‌ها اختصاص
پیدا می‌کند.

ظرفیت Register File می‌تواند روی تعداد Threadها یا
گروه‌های کاری هم‌زمان اثر بگذارد.

Register Pressure چیست؟

اگر یک Shader یا Kernel برای هر Thread به تعداد
زیادی Register نیاز داشته باشد، فشار مصرف Register
افزایش پیدا می‌کند.

از آنجا که ظرفیت Register File محدود است، مصرف زیاد
Register می‌تواند تعداد گروه‌های کاری هم‌زمان روی
هر واحد پردازشی را کاهش دهد.

این وضعیت ممکن است Occupancy را کاهش دهد و توانایی
GPU برای پنهان‌کردن تأخیر حافظه را محدود کند.


Register بیشتر همیشه باعث سرعت بیشتر نمی‌شود

Register کافی از مراجعه به حافظه کندتر جلوگیری
می‌کند؛ اما مصرف بیش‌ازحد آن می‌تواند تعداد
Threadهای هم‌زمان را کاهش دهد.

Register Spilling چیست؟

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

این فرایند Register Spilling نام دارد و می‌تواند
باعث افزایش دسترسی به حافظه و کاهش عملکرد شود.

حافظه‌ای که برای Spill استفاده می‌شود ممکن است در
مستندات برنامه‌نویسی با عنوان Local Memory دیده
شود؛ اما از نظر فیزیکی معمولاً داخل VRAM یا مسیر
حافظه عمومی GPU قرار دارد.

Shared Memory در GPU چیست؟

Shared Memory حافظه‌ای سریع و قابل مدیریت است که
گروهی از Threadهای یک بلوک کاری می‌توانند به‌صورت
مشترک از آن استفاده کنند.

این حافظه برای تبادل داده میان Threadها، ذخیره
نتایج میانی و کاهش مراجعه مکرر به VRAM کاربرد دارد.

در NVIDIA معمولاً اصطلاح Shared Memory رایج است.
AMD از اصطلاحاتی مانند Local Data Share و Intel
از نام‌های متناسب با معماری خود استفاده می‌کند.

نام‌های رایج حافظه مشترک در معماری‌های مختلف
شرکت نام رایج سطح اشتراک
NVIDIA Shared Memory میان Threadهای یک Block
AMD Local Data Share یا LDS میان Work-Itemهای یک Workgroup
Intel Shared Local Memory یا ساختار مشابه میان Threadهای گروه کاری

کاربردهای Shared Memory

اشتراک داده

چند Thread می‌توانند داده‌ای را یک بار
بارگذاری و سپس به‌صورت مشترک استفاده کنند.

ضرب ماتریسی

بخش‌هایی از ماتریس در حافظه سریع نگهداری
می‌شوند تا چندین بار استفاده شوند.

پردازش تصویر

ناحیه‌ای از تصویر برای فیلتر، Blur یا
تشخیص لبه داخل Shared Memory ذخیره می‌شود.

Reduction

Threadها نتایج خود را برای محاسبه مجموع،
کمینه یا بیشینه با یکدیگر ترکیب می‌کنند.

Histogram

شمارش داده‌ها ابتدا در حافظه محلی سریع و
سپس در حافظه اصلی ادغام می‌شود.

شبیه‌سازی

داده‌های مجاور در فیزیک، سیالات یا شبکه‌های
محاسباتی میان Threadها به اشتراک گذاشته می‌شوند.

Bank Conflict چیست؟

Shared Memory معمولاً به چند Bank تقسیم می‌شود تا
دسترسی هم‌زمان Threadها امکان‌پذیر باشد.

اگر چند Thread به‌گونه‌ای به داده‌ها دسترسی پیدا
کنند که درخواست‌های آن‌ها روی یک Bank تداخل ایجاد
کند، ممکن است دسترسی‌ها به‌صورت ترتیبی انجام شوند.

این وضعیت Bank Conflict نام دارد و می‌تواند کارایی
Shared Memory را کاهش دهد.


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

تغییر نحوه قرارگیری آرایه‌ها یا افزودن Padding
می‌تواند بعضی Bank Conflictها را کاهش دهد.

Local Memory چیست؟

اصطلاح Local Memory در پلتفرم‌ها و APIهای مختلف
ممکن است معنی متفاوتی داشته باشد.

در بعضی مستندات CUDA، Local Memory به حافظه‌ای
خصوصی برای هر Thread گفته می‌شود که از نظر فیزیکی
ممکن است در VRAM قرار داشته باشد و از Register
بسیار کندتر باشد.

در بعضی استانداردها، واژه Local به حافظه مشترک
میان اعضای یک Workgroup اشاره می‌کند. بنابراین
باید تعریف همان API یا معماری بررسی شود.


Local Memory همیشه داخل تراشه نیست

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

کش L0 در GPU چیست؟

بعضی معماری‌های GPU از سطحی بسیار نزدیک به واحدهای
اجرایی با عنوان L0 Cache استفاده می‌کنند.

L0 ممکن است برای دستورها، داده‌ها یا مسیرهای خاص
داخل یک زیرمجموعه پردازشی طراحی شده باشد.

وجود، اندازه و وظیفه دقیق L0 میان معماری‌های
NVIDIA، AMD و Intel یکسان نیست.

Instruction Cache چیست؟

Instruction Cache دستورهای برنامه یا Shader را
نزدیک به واحدهای اجرایی نگهداری می‌کند.

اگر گروه‌های زیادی از Threadها دستورهای یکسانی را
اجرا کنند، نگهداری این دستورها در Cache باعث کاهش
دسترسی‌های تکراری به حافظه دورتر می‌شود.

Shaderهای بسیار بزرگ یا دارای مسیرهای پیچیده ممکن
است فشار بیشتری روی Instruction Cache وارد کنند.

کش L1 در GPU چیست؟

L1 Cache حافظه‌ای سریع و نزدیک به بلوک‌های پردازشی
است که داده‌های پراستفاده را نگهداری می‌کند.

در بعضی معماری‌ها، L1 Cache و Shared Memory از
بخشی از منابع فیزیکی مشترک استفاده می‌کنند و
ظرفیت میان آن‌ها قابل تنظیم است.

نوع داده‌ای که در L1 نگهداری می‌شود به معماری و
مسیر دسترسی بستگی دارد و ممکن است شامل داده عمومی،
Texture یا اطلاعات Read-Only باشد.

Cache Hit و Cache Miss چیست؟

Cache Hit

داده موردنیاز داخل Cache پیدا می‌شود و
بدون مراجعه به حافظه دورتر در اختیار
واحد پردازشی قرار می‌گیرد.

Cache Miss

داده داخل Cache نیست و باید از سطح
پایین‌تر مانند L2 یا VRAM خوانده شود.

نرخ بالاتر Cache Hit معمولاً باعث کاهش تأخیر و
مصرف پهنای باند حافظه می‌شود.

کش L2 در GPU چیست؟

L2 Cache معمولاً از L1 بزرگ‌تر است و میان تعداد
بیشتری از بلوک‌های پردازشی GPU مشترک است.

بسیاری از درخواست‌های حافظه پیش از رسیدن به VRAM
از L2 عبور می‌کنند.

L2 می‌تواند داده‌های Shader، Texture، Buffer و
بعضی اطلاعات محاسباتی را نگهداری کند.

افزایش ظرفیت یا بهره‌وری L2 می‌تواند وابستگی GPU
به پهنای باند خارجی VRAM را کاهش دهد.

Cache Coherency چیست؟

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

Cache Coherency به سازوکارهایی گفته می‌شود که
سازگاری نسخه‌های مختلف داده را مدیریت می‌کنند.

GPUها ممکن است برای انواع مختلف حافظه و عملیات،
قوانین Coherency متفاوتی داشته باشند و برنامه‌نویس
در بعضی موارد باید از Barrier یا عملیات همگام‌سازی
استفاده کند.

Last-Level Cache چیست؟

Last-Level Cache آخرین سطح Cache پیش از مراجعه به
حافظه خارجی GPU است.

در بعضی معماری‌ها همان L2 نقش آخرین سطح را دارد و
در بعضی طراحی‌ها کش‌های بزرگ‌تری برای کاهش فشار روی
VRAM اضافه شده‌اند.

نام، ظرفیت و ساختار این Cache میان شرکت‌ها و نسل‌ها
متفاوت است.

AMD Infinity Cache چیست؟

Infinity Cache نام کش بزرگ روی تراشه در بعضی
معماری‌های Radeon است.

هدف آن کاهش مراجعه مداوم به حافظه GDDR و افزایش
پهنای باند مؤثر برای داده‌هایی است که قابلیت
استفاده مجدد دارند.

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


Infinity Cache جایگزین VRAM نیست

این کش ظرفیت بسیار کمتری از VRAM دارد و فقط
داده‌های پراستفاده را موقتاً نگهداری می‌کند.

فشرده‌سازی داده در مسیر حافظه GPU

GPUهای مدرن می‌توانند بعضی داده‌های رنگ، عمق یا
Texture را بدون افت قابل مشاهده فشرده کنند.

این کار مقدار داده‌ای را که باید میان Cache و
VRAM جابه‌جا شود کاهش می‌دهد و پهنای باند مؤثر را
افزایش می‌دهد.

نسبت فشرده‌سازی به نوع داده بستگی دارد و همه
اطلاعات با نرخ یکسان فشرده نمی‌شوند.

Memory Controller چیست؟

Memory Controller ارتباط میان GPU، Cache و
تراشه‌های VRAM را مدیریت می‌کند.

این بخش درخواست‌های خواندن و نوشتن را زمان‌بندی،
اولویت‌بندی و میان کانال‌های حافظه توزیع می‌کند.

تعداد کنترل‌کننده‌ها و عرض هر کانال در شکل‌گیری
Bus Width نهایی کارت نقش دارد.

کانال حافظه در کارت گرافیک چیست؟

رابط حافظه GPU معمولاً از چند کانال مستقل تشکیل
می‌شود.

هر کانال بخشی از Bus Width را تأمین می‌کند و به
یک یا چند تراشه حافظه متصل می‌شود.

ترکیب چند کانال می‌تواند رابط‌هایی مانند ۶۴،
۱۲۸، ۱۹۲، ۲۵۶ یا ۳۸۴ بیت ایجاد کند.

Memory Bus و Bus Width چیست؟

Memory Bus مسیر انتقال داده میان GPU و VRAM است.
Bus Width نشان می‌دهد در هر انتقال چه تعداد بیت
می‌تواند میان آن‌ها جابه‌جا شود.

عرض باس بیشتر می‌تواند پهنای باند را افزایش دهد،
اما نوع حافظه و سرعت انتقال نیز اهمیت دارند.

نمونه عرض باس‌های رایج کارت گرافیک
عرض باس رده رایج نکته
۳۲ بیت کارت‌های بسیار اقتصادی پهنای باند محدود
۶۴ بیت اقتصادی و لپ‌تاپی وابستگی زیاد به سرعت حافظه و Cache
۱۲۸ بیت اقتصادی تا میان‌رده بسیار رایج در چندین نسل
۱۹۲ بیت میان‌رده تعادل ظرفیت و پهنای باند
۲۵۶ بیت میان‌رده قدرتمند تا رده‌بالا پهنای باند بیشتر با حافظه مناسب
۳۲۰ یا ۳۸۴ بیت کارت‌های رده‌بالا هزینه، مصرف و پیچیدگی بیشتر


عرض باس بیشتر همیشه به معنی کارت سریع‌تر نیست

یک کارت جدید با باس باریک‌تر، حافظه سریع‌تر و
Cache بزرگ‌تر ممکن است از کارت قدیمی با باس
عریض‌تر عملکرد بهتری داشته باشد.

Memory Clock و Effective Clock چیست؟

Memory Clock به فرکانس کاری حافظه اشاره دارد؛ اما
مقدار نمایش‌داده‌شده در ابزارهای مختلف ممکن است
Clock پایه، Clock واقعی یا نرخ مؤثر انتقال باشد.

حافظه‌های GDDR می‌توانند در هر سیکل چند انتقال
انجام دهند؛ به همین دلیل نرخ مؤثر آن‌ها از Clock
پایه بیشتر است.

هنگام مقایسه باید مشخص شود عدد اعلام‌شده بر حسب
MHz، Gbps یا نرخ مؤثر انتقال است.

پهنای باند حافظه چیست؟

Memory Bandwidth مقدار داده‌ای است که در مدت‌زمان
مشخص میان GPU و VRAM منتقل می‌شود.

پهنای باند معمولاً با واحد گیگابایت بر ثانیه
نمایش داده می‌شود و به سرعت حافظه و عرض باس وابسته
است.


فرمول تقریبی پهنای باند

پهنای باند تقریبی از ضرب نرخ انتقال حافظه در
عرض باس و تقسیم نتیجه بر هشت به دست می‌آید.

Cache، فشرده‌سازی و الگوی دسترسی می‌توانند پهنای
باند مؤثر را نسبت به مقدار خام تغییر دهند.

تأخیر حافظه یا Memory Latency چیست؟

Latency مدت‌زمانی است که از ارسال درخواست حافظه
تا دریافت داده طول می‌کشد.

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

GPU با اجرای Threadهای متعدد و جابه‌جایی میان آن‌ها
تلاش می‌کند تأخیر حافظه را پنهان کند.

ظرفیت VRAM چه تأثیری دارد؟

VRAM داده‌های بزرگ مانند Textureها، مدل‌ها،
Frame Bufferها، داده‌های رندر و مدل‌های هوش مصنوعی
را نگهداری می‌کند.

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


VRAM بیشتر همیشه به معنی GPU سریع‌تر نیست

یک کارت ضعیف با حافظه زیاد ممکن است از کارت
قدرتمندتر با حافظه کمتر کندتر باشد. ظرفیت فقط
یکی از عوامل انتخاب است.

چه داده‌هایی داخل VRAM ذخیره می‌شوند؟

Texture

تصاویر رنگ، Normal Map، Roughness،
Displacement و سایر داده‌های سطح.

Geometry

Vertexها، Indexها، Meshها و داده مدل‌های
سه‌بعدی.

Frame Buffer

تصویر نهایی، Depth، Stencil و Render Targetها.

Shader Data

Constantها، Bufferها و داده‌های موردنیاز
اجرای Shader.

Ray Tracing Data

ساختارهای شتاب‌دهنده، هندسه و داده‌های
مربوط به پرتوها.

AI Models

وزن‌های مدل، Activationها، KV Cache و
داده‌های محاسباتی.

خطای Out of Memory در GPU چیست؟

اگر نرم‌افزار نتواند فضای کافی داخل VRAM برای
داده‌های موردنیاز اختصاص دهد، ممکن است خطای
Out of Memory نمایش داده شود.

این مشکل در رندرهای سنگین، مدل‌های هوش مصنوعی،
بازی‌های با Texture بسیار بزرگ و پروژه‌های تدوین
وضوح‌بالا دیده می‌شود.

  • کاهش وضوح Texture
  • کاهش اندازه Batch
  • استفاده از مدل Quantized
  • کاهش اندازه تصویر یا Render Tile
  • بستن برنامه‌های مصرف‌کننده GPU
  • استفاده از کارت با VRAM بیشتر

Shared GPU Memory در ویندوز چیست؟

ویندوز ممکن است بخشی از RAM سیستم را به‌عنوان
Shared GPU Memory نمایش دهد.

این مقدار به معنی وجود همان ظرفیت حافظه پرسرعت روی
کارت گرافیک نیست.

کارت مجزا در صورت نیاز می‌تواند بخشی از RAM سیستم
را استفاده کند، اما این مسیر معمولاً از VRAM
اختصاصی کندتر است.


Dedicated و Shared را با هم جمع نکنید

اگر ویندوز ۴ گیگابایت Dedicated و ۸ گیگابایت
Shared نشان می‌دهد، کارت شما ۱۲ گیگابایت VRAM
واقعی ندارد.

حافظه گرافیک مجتمع چگونه کار می‌کند؟

گرافیک‌های مجتمع معمولاً VRAM مستقل ندارند و از
RAM سیستم استفاده می‌کنند.

سرعت RAM، تعداد کانال‌ها، تأخیر حافظه و محدودیت
توان پردازنده بر عملکرد گرافیک مجتمع اثر می‌گذارد.

استفاده از حافظه دوکاناله می‌تواند پهنای باند بیشتری
برای Intel HD، UHD، Iris Xe و گرافیک‌های مجتمع AMD
فراهم کند.

حافظه در Quadro، RTX Professional و Radeon Pro

کارت‌های حرفه‌ای ممکن است ظرفیت VRAM بیشتر،
پشتیبانی ECC، درایورهای تخصصی و مدیریت حافظه مناسب
پروژه‌های بزرگ داشته باشند.

Quadro K، M و P معمولاً از حافظه‌های نسل قدیمی‌تر
مانند GDDR5 استفاده می‌کنند. Quadro RTX،
RTX A Series و RTX Professional جدیدتر بیشتر از
GDDR6 و ظرفیت‌های بالاتر بهره می‌برند.

Radeon Pro و Arc Pro نیز بر اساس نسل و مدل، ظرفیت
حافظه و قابلیت‌های متفاوتی ارائه می‌کنند.

حافظه در کارت‌ها و لپ‌تاپ‌های قدیمی

نمونه حافظه در مدل‌های قدیمی و استوک
مدل نوع حافظه رایج ظرفیت‌های متداول نکته
GeForce GT 740M DDR3 یا GDDR5 بسته به نسخه ۱ تا ۲ گیگابایت نوع حافظه حتماً بررسی شود
GTX 960M GDDR5 ۲ یا ۴ گیگابایت برای پروژه‌های جدید محدود است
Quadro K2100M GDDR5 معمولاً ۲ گیگابایت مناسب پروژه‌های سبک قدیمی
Quadro M2000M GDDR5 معمولاً ۴ گیگابایت مناسب CAD متوسط نسل قبل
Quadro P2000 GDDR5 معمولاً ۵ گیگابایت تعادل مناسب برای ورک‌استیشن استوک
GTX 1050 Ti GDDR5 معمولاً ۴ گیگابایت مناسب بازی و طراحی سبک
GTX 1060 GDDR5 ۳ یا ۶ گیگابایت نسخه ۶ گیگابایت محدودیت کمتری دارد
Radeon RX 580 GDDR5 ۴ یا ۸ گیگابایت سلامت کارت دست‌دوم بررسی شود

گلوگاه حافظه GPU چیست؟

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

در این وضعیت، Shader Coreها، CUDA Coreها،
Stream Processorها یا Xe Coreها بخشی از زمان خود
را منتظر رسیدن داده می‌مانند.

ظرفیت ناکافی VRAM

داده‌ها به RAM سیستم منتقل می‌شوند یا
نرم‌افزار مجبور به کاهش کیفیت می‌شود.

پهنای باند محدود

حجم کافی داده در زمان مناسب به واحدهای
پردازشی نمی‌رسد.

تأخیر بالا

پاسخ‌گویی به درخواست‌های حافظه زمان بیشتری
نیاز دارد.

Cache Miss زیاد

داده‌های موردنیاز به‌جای Cache باید از
VRAM خوانده شوند.

دسترسی نامنظم

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

مصرف بیش‌ازحد Register

تعداد Threadهای هم‌زمان کاهش پیدا می‌کند
و پنهان‌سازی تأخیر دشوارتر می‌شود.

الگوی دسترسی به حافظه چرا مهم است؟

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

اگر Threadهای مجاور به آدرس‌های نزدیک و منظم
دسترسی داشته باشند، GPU می‌تواند درخواست‌ها را
مؤثرتر ترکیب کند.

دسترسی‌های پراکنده، نامنظم یا تکراری می‌توانند
پهنای باند بیشتری مصرف کنند و Cache را با داده‌های
کم‌استفاده پر کنند.

دسترسی منظم

  • آدرس‌های نزدیک
  • استفاده بهتر از Cache
  • انتقال مؤثرتر داده
  • درخواست‌های حافظه کمتر

دسترسی نامنظم

  • آدرس‌های پراکنده
  • Cache Miss بیشتر
  • درخواست‌های متعدد
  • تأخیر بالاتر

Memory Coalescing چیست؟

Memory Coalescing به ترکیب چند درخواست حافظه
Threadهای یک گروه در تعداد کمتری تراکنش بزرگ‌تر
گفته می‌شود.

اگر Threadهای مجاور داده‌های پشت‌سرهم را بخوانند،
کنترل‌کننده حافظه می‌تواند انتقال را با بهره‌وری
بالاتری انجام دهد.

دسترسی‌های پراکنده ممکن است به چندین تراکنش جدا
تبدیل شوند و پهنای باند مؤثر را کاهش دهند.

Prefetching چیست؟

Prefetching یعنی داده پیش از لحظه استفاده احتمالی
از حافظه دورتر خوانده و به Cache نزدیک‌تر منتقل شود.

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

Prefetch نامناسب ممکن است پهنای باند و فضای Cache
را با داده‌هایی مصرف کند که هرگز استفاده نمی‌شوند.

Paging و جابه‌جایی داده میان VRAM و RAM

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

این انتقال از طریق PCI Express انجام می‌شود و
معمولاً بسیار کندتر از دسترسی مستقیم GPU به VRAM
است.

نتیجه ممکن است افت نرخ فریم، مکث، کندشدن Viewport،
افزایش زمان رندر یا خطای حافظه باشد.


Shared Memory جای VRAM واقعی را نمی‌گیرد

استفاده از RAM سیستم می‌تواند از بسته‌شدن
برنامه جلوگیری کند، اما سرعت و تأخیر آن با
VRAM اختصاصی برابر نیست.

نقش PCI Express در انتقال داده‌های GPU

PCI Express مسیر اصلی ارتباط کارت گرافیک مجزا با
CPU و RAM سیستم است.

زمانی که داده داخل VRAM وجود ندارد، ممکن است از
RAM سیستم از طریق PCIe منتقل شود.

نسل PCIe و تعداد Laneها روی پهنای باند این ارتباط
اثر می‌گذارند، اما همچنان ارتباط داخلی GPU با
VRAM معمولاً بسیار سریع‌تر است.

Resizable BAR چه ارتباطی با حافظه GPU دارد؟

Resizable BAR به CPU اجازه می‌دهد بخش بزرگ‌تری از
VRAM کارت گرافیک را به‌صورت مستقیم در فضای آدرس
خود مشاهده کند.

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

تأثیر عملکرد به بازی، درایور، معماری GPU،
مادربرد و پردازنده بستگی دارد و همیشه یکسان نیست.

حافظه ECC در کارت گرافیک چیست؟

ECC مخفف
Error-Correcting Code
است و برای شناسایی و اصلاح بعضی خطاهای حافظه
استفاده می‌شود.

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

بعضی کارت‌های حرفه‌ای Quadro، RTX Professional،
Radeon Pro و شتاب‌دهنده‌های دیتاسنتر از ECC
پشتیبانی می‌کنند.


ECC در همه کارت‌های حرفه‌ای وجود ندارد

پشتیبانی ECC به مدل کارت، نوع حافظه، معماری
و تنظیمات درایور بستگی دارد.

خرابی حافظه گرافیکی چه نشانه‌هایی دارد؟

  • نمایش نقاط یا خطوط رنگی
  • ایجاد مربع‌ها و الگوهای غیرعادی
  • خراب‌شدن Textureها
  • بسته‌شدن بازی یا نرم‌افزار
  • خطای Driver Timeout
  • صفحه سیاه زیر بار
  • خطا در تست حافظه GPU
  • ناپایداری در فرکانس حافظه

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

دمای حافظه گرافیکی

تراشه‌های VRAM در زمان بازی، رندر یا استخراج
می‌توانند گرمای قابل‌توجهی تولید کنند.

تماس مناسب Thermal Pad با هیت‌سینک، جریان هوا و
طراحی خنک‌کننده روی دمای حافظه اثر دارند.

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

VRAM مناسب برای بازی

میزان حافظه موردنیاز بازی به وضوح، کیفیت Texture،
Ray Tracing، بسته‌های گرافیکی و طراحی موتور بازی
بستگی دارد.

وقتی مصرف حافظه به سقف VRAM نزدیک شود، ممکن است
Textureها دیر بارگذاری شوند یا مکث ایجاد شود.

عدد مناسب ثابت نیست و باید با بازی‌ها و تنظیمات
موردنظر کاربر سنجیده شود.

VRAM برای AutoCAD و SolidWorks

پروژه‌های دوبعدی سبک معمولاً حافظه گرافیکی زیادی
نیاز ندارند.

در مدل‌سازی سه‌بعدی، Assemblyهای بزرگ، نمایشگرهای
متعدد و Viewportهای باکیفیت، مصرف VRAM افزایش
پیدا می‌کند.

در SolidWorks و نرم‌افزارهای حرفه‌ای، درایور و
گواهی سازگاری نیز در کنار ظرفیت حافظه اهمیت دارند.

VRAM برای Blender و رندر سه‌بعدی

در رندر GPU، مدل‌ها، Textureها، نورها و داده‌های
صحنه باید در حافظه کارت قرار بگیرند.

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

صحنه‌های دارای Textureهای 4K و 8K، Geometry زیاد
و چندین Asset به VRAM بیشتری نیاز دارند.

VRAM برای هوش مصنوعی

در هوش مصنوعی، وزن‌های مدل، Activationها،
Gradientها و داده‌های ورودی داخل حافظه GPU قرار
می‌گیرند.

آموزش مدل معمولاً حافظه بیشتری از اجرای مدل نیاز
دارد.

Quantization، کاهش Batch Size، Offloading و
Gradient Checkpointing از روش‌های کاهش مصرف حافظه
هستند.


برای AI ظرفیت VRAM بسیار مهم است

کارت سریع با حافظه ناکافی ممکن است نتواند مدل
موردنظر را اجرا کند؛ درحالی‌که کارت کندتر با
حافظه بیشتر ممکن است پروژه را کامل اجرا کند.

اشتباهات رایج درباره حافظه GPU

  • جمع‌کردن Dedicated VRAM و Shared Memory
  • مقایسه کارت‌ها فقط بر اساس ظرفیت حافظه
  • تصور اینکه باس عریض‌تر همیشه سریع‌تر است
  • نادیده‌گرفتن نوع حافظه
  • نادیده‌گرفتن Cache و فشرده‌سازی
  • یکی‌دانستن Memory Clock و نرخ مؤثر انتقال
  • تصور اینکه ECC در تمام Quadroها وجود دارد
  • تصور اینکه حافظه بیشتر نرخ فریم را همیشه افزایش می‌دهد
  • نادیده‌گرفتن دمای VRAM در کارت دست‌دوم
  • مقایسه مستقیم پهنای باند نسل‌های مختلف بدون
    توجه به معماری

سؤالات متداول درباره حافظه GPU

VRAM چیست؟

حافظه اختصاصی کارت گرافیک برای نگهداری
Texture، مدل، Frame Buffer و داده‌های
محاسباتی است.

آیا VRAM بیشتر همیشه بهتر است؟

ظرفیت بیشتر محدودیت پروژه‌های بزرگ را کاهش
می‌دهد، اما قدرت GPU، پهنای باند و معماری
نیز اهمیت دارند.

Shared GPU Memory چیست؟

بخشی از RAM سیستم است که GPU در صورت نیاز
می‌تواند از آن استفاده کند.

آیا Shared Memory به اندازه VRAM سریع است؟

معمولاً خیر. کارت مجزا از طریق PCI Express
به RAM سیستم دسترسی دارد و این مسیر کندتر
از VRAM است.

Bus Width چیست؟

عرض مسیر انتقال داده میان GPU و VRAM است
و همراه با سرعت حافظه روی پهنای باند اثر
می‌گذارد.

آیا باس ۲۵۶ بیتی همیشه از ۱۲۸ بیتی سریع‌تر است؟

خیر. نوع حافظه، سرعت انتقال، Cache و
معماری نیز باید مقایسه شوند.

Register Pressure چیست؟

مصرف زیاد Register برای هر Thread است که
می‌تواند تعداد Threadهای هم‌زمان را کاهش
دهد.

Infinity Cache چیست؟

کش بزرگ داخل بعضی GPUهای AMD است که مراجعه
به VRAM را کاهش می‌دهد.

ECC چه کاربردی دارد؟

بعضی خطاهای حافظه را شناسایی و اصلاح می‌کند
و برای محاسبات حساس مفید است.

کمبود VRAM چه نشانه‌ای دارد؟

افت عملکرد، مکث، دیر بارگذاری‌شدن Texture،
خطای Out of Memory یا بسته‌شدن برنامه.

برای Blender چه مقدار VRAM لازم است؟

به حجم صحنه، Textureها و موتور رندر بستگی
دارد و یک مقدار ثابت برای همه پروژه‌ها وجود
ندارد.

برای هوش مصنوعی VRAM مهم‌تر است یا سرعت GPU؟

هر دو مهم‌اند، اما اگر مدل داخل حافظه جا
نشود، سرعت بالاتر GPU قابل استفاده نخواهد
بود.


فصل ۱۵-۶

Thread، Warp، Wavefront، Scheduler و Occupancy در GPU

پردازنده گرافیکی برای اجرای تعداد بسیار زیادی
عملیات موازی، کارها را به Threadها و گروه‌های
پردازشی تقسیم می‌کند. این Threadها در معماری‌های
NVIDIA، AMD و Intel با ساختارها و نام‌گذاری‌های
متفاوت زمان‌بندی و اجرا می‌شوند.

نمای کلی اجرای موازی در GPU

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

این معماری باعث می‌شود پردازنده گرافیکی بتواند
میلیون‌ها پیکسل، رأس، نمونه، پرتو یا عملیات
هوش مصنوعی را به صورت هم‌زمان پردازش کند.

البته GPU تمام Threadها را به صورت کاملاً مستقل
اجرا نمی‌کند؛ بلکه آن‌ها را در قالب گروه‌هایی
سازمان‌دهی می‌کند تا سخت‌افزار بتواند با کمترین
هزینه، بیشترین میزان پردازش موازی را انجام دهد.


تعریف ساده

GPU ابتدا کار بزرگ را به هزاران Thread تقسیم
می‌کند و سپس آن‌ها را به صورت گروهی روی
واحدهای پردازشی اجرا می‌کند.

چرا GPU هزاران Thread را هم‌زمان اجرا می‌کند؟

حافظه گرافیکی نسبت به واحدهای محاسباتی تأخیر
بیشتری دارد. اگر GPU فقط چند Thread اجرا کند،
هنگام انتظار برای دریافت داده بخش زیادی از
سخت‌افزار بیکار خواهد ماند.

به همین دلیل GPU هزاران Thread آماده اجرا نگه
می‌دارد تا هر زمان گروهی منتظر حافظه شد،
گروه دیگری فوراً جایگزین آن شود.

این روش یکی از مهم‌ترین دلایل توان پردازشی بسیار
بالای GPU در بازی، رندر سه‌بعدی و هوش مصنوعی است.

تفاوت مدل اجرای CPU و GPU

مقایسه مدل اجرای CPU و GPU
ویژگی CPU GPU
تعداد Thread کم بسیار زیاد
قدرت هر Thread بسیار زیاد کمتر
هدف طراحی اجرای عمومی پردازش موازی انبوه
تأخیر کم با مخفی‌سازی تأخیر مدیریت می‌شود
مناسب برای سیستم‌عامل، برنامه‌های عمومی بازی، رندر، هوش مصنوعی و پردازش تصویر

Thread در GPU چیست؟

کوچک‌ترین واحد اجرایی در پردازنده گرافیکی
Thread است.

هر Thread مجموعه مشخصی از دستورها را اجرا می‌کند،
Registerهای مخصوص خود را دارد و روی داده‌ای مشخص
کار می‌کند.

برای مثال اگر قرار باشد یک تصویر چهار میلیون
پیکسلی پردازش شود، ممکن است میلیون‌ها Thread ایجاد
شوند و هر Thread مسئول پردازش یک یا چند پیکسل باشد.


مثال ساده

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

تفاوت Thread در CPU و GPU

واژه Thread هم در CPU و هم در GPU استفاده می‌شود،
اما مفهوم و هدف طراحی آن‌ها کاملاً یکسان نیست.

در CPU هر Thread تقریباً یک واحد پردازشی قدرتمند
محسوب می‌شود که می‌تواند وظایف پیچیده، شاخه‌های
شرطی متعدد و دسترسی‌های نامنظم به حافظه را مدیریت
کند.

در مقابل، Threadهای GPU بسیار سبک هستند و برای
اجرای تعداد بسیار زیادی عملیات مشابه طراحی شده‌اند.

مقایسه Thread در CPU و GPU
ویژگی CPU Thread GPU Thread
تعداد کم بسیار زیاد
قدرت هر Thread زیاد کمتر
هدف اجرای برنامه‌های عمومی پردازش موازی گسترده
شاخه‌های شرطی بسیار مناسب مناسب ولی با محدودیت
تأخیر حافظه با Cache مدیریت می‌شود با اجرای هزاران Thread پنهان می‌شود

Thread ID و Thread Index چیست؟

هر Thread دارای شناسه‌ای است که محل آن را در میان
سایر Threadها مشخص می‌کند.

این شناسه برای تعیین داده‌ای که باید پردازش شود
استفاده می‌شود.

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


مثال

Thread شماره ۵۲۳۴ فقط روی داده شماره ۵۲۳۴
عملیات انجام می‌دهد و با سایر Threadها تداخلی
ندارد.

Thread Group چیست؟

مدیریت میلیون‌ها Thread به صورت مستقل امکان‌پذیر
نیست؛ بنابراین GPU آن‌ها را در قالب گروه‌هایی
سازمان‌دهی می‌کند.

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

نام این گروه‌ها در APIهای مختلف متفاوت است؛ برای
مثال در CUDA از Block و در OpenCL از Workgroup
استفاده می‌شود.

Thread Block در CUDA چیست؟

در CUDA مجموعه‌ای از Threadها که روی یک
Streaming Multiprocessor اجرا می‌شوند،
Thread Block نام دارند.

تمام Threadهای یک Block می‌توانند از Shared Memory
مشترک استفاده کنند و با دستورهای همگام‌سازی
یکدیگر را هماهنگ کنند.

اندازه Block هنگام طراحی برنامه انتخاب می‌شود و
روی کارایی GPU تأثیر مستقیم دارد.


نکته

انتخاب Block بسیار کوچک یا بسیار بزرگ ممکن است
باعث کاهش Occupancy و افت عملکرد شود.

Workgroup چیست؟

در OpenCL، Vulkan Compute و بسیاری از APIهای
مدرن، به مجموعه‌ای از Threadها که با هم اجرا
می‌شوند Workgroup گفته می‌شود.

مفهوم Workgroup بسیار شبیه Thread Block در CUDA
است، هرچند جزئیات پیاده‌سازی آن به API و معماری
بستگی دارد.

اعضای یک Workgroup می‌توانند از حافظه مشترک،
Barrier و عملیات هماهنگ‌سازی استفاده کنند.

Grid در پردازش GPU چیست؟

Grid مجموعه کامل Thread Blockها یا Workgroupهایی
است که برای اجرای یک Kernel یا Compute Shader
ایجاد می‌شوند.

هر Grid می‌تواند یک‌بعدی، دوبعدی یا سه‌بعدی باشد.
این ساختار کمک می‌کند داده‌هایی مانند آرایه،
تصویر، ویدئو یا حجم سه‌بعدی به‌شکل منظم میان
Threadها تقسیم شوند.

کاربرد ابعاد مختلف Grid
ساختار Grid نمونه داده کاربرد رایج
یک‌بعدی آرایه یا فهرست پردازش عددی، جست‌وجو و مرتب‌سازی
دوبعدی تصویر یا ماتریس پردازش تصویر، فیلتر و رندر
سه‌بعدی حجم، Voxel یا داده فضایی شبیه‌سازی، پزشکی و رندر حجمی

Dispatch و Compute Dispatch چیست؟

Dispatch دستوری است که اجرای مجموعه‌ای از
Workgroupها یا Threadها را روی GPU آغاز می‌کند.

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

در DirectCompute، Vulkan، OpenCL و سایر رابط‌های
محاسباتی، نام و شیوه تعریف Dispatch متفاوت است؛
اما مفهوم اصلی یکسان باقی می‌ماند.


مرحله ۱


تعیین داده

برنامه مشخص می‌کند چه تعداد عنصر باید
پردازش شوند.


مرحله ۲


انتخاب اندازه گروه

تعداد Threadهای هر Block یا Workgroup
تعیین می‌شود.


مرحله ۳


ایجاد Dispatch

تعداد گروه‌ها در یک، دو یا سه بُعد مشخص
می‌شود.


مرحله ۴


توزیع روی GPU

Scheduler گروه‌ها را میان واحدهای آزاد
توزیع می‌کند.

تفاوت SIMD و SIMT چیست؟

SIMD مخفف
Single Instruction, Multiple Data
است؛ یعنی یک دستور روی چند داده اجرا می‌شود.

SIMT مخفف
Single Instruction, Multiple Threads
است و مدل برنامه‌نویسی رایج در GPUهای NVIDIA را
توصیف می‌کند.

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

مقایسه SIMD و SIMT
معیار SIMD SIMT
دید برنامه‌نویس یک دستور برداری چند Thread مستقل
اجرای سخت‌افزاری یک دستور روی چند Lane یک دستور روی گروهی از Threadها
شاخه شرطی معمولاً با Mask ممکن است Divergence ایجاد کند
کاربرد رایج CPUهای برداری و GPU مدل اجرایی CUDA و GPU

Warp در NVIDIA چیست؟

Warp گروه پایه زمان‌بندی و اجرای Threadها در
بسیاری از GPUهای NVIDIA است.

یک Warp معمولاً شامل ۳۲ Thread است. این Threadها
در حالت عادی دستور مشترکی را اجرا می‌کنند، اما هر
Thread روی داده و Registerهای مخصوص خود کار می‌کند.

Thread Block پیش از اجرا به چند Warp تقسیم می‌شود.
برای نمونه، یک Block دارای ۲۵۶ Thread به هشت Warp
۳۲تایی تقسیم خواهد شد.

نمونه تقسیم Thread Block به Warp
تعداد Thread در Block تعداد Warp وضعیت Warp آخر
۳۲ ۱ کامل
۶۴ ۲ کامل
۱۲۸ ۴ کامل
۲۵۶ ۸ کامل
۲۸۰ ۹ Warp آخر فقط ۲۴ Thread فعال دارد

Wavefront در AMD چیست؟

Wavefront گروهی از Work-Itemها است که در GPUهای
AMD با یکدیگر زمان‌بندی و اجرا می‌شوند.

در بسیاری از معماری‌های قدیمی GCN، اندازه رایج
Wavefront برابر ۶۴ Thread یا Work-Item بود.

معماری‌های جدیدتر RDNA می‌توانند از حالت‌های
Wave32 یا Wave64 استفاده کنند. انتخاب اندازه
Wave به Shader، API، کامپایلر و معماری بستگی دارد.

اندازه Wavefront در خانواده‌های مختلف AMD
خانواده معماری اندازه رایج نمونه محصولات
GCN Wave64 Radeon HD 7000، R9، RX 400 و RX 500
Vega معمولاً Wave64 Radeon RX Vega و Radeon Pro Vega
RDNA Wave32 و در بعضی مسیرها Wave64 Radeon RX 5000
RDNA 2 و جدیدتر متناسب با Shader و معماری Radeon RX 6000 و نسل‌های بعد

اجرای Thread در GPUهای Intel

GPUهای Intel نیز Threadها را در گروه‌های SIMD یا
Subgroup سازمان‌دهی می‌کنند.

عرض اجرای SIMD می‌تواند بر اساس معماری، نوع
Shader، کامپایلر و دستورهای برنامه متفاوت باشد.

در APIهایی مانند OpenCL، SYCL و Vulkan، اصطلاح
Subgroup برای مجموعه‌ای از Invocationها استفاده
می‌شود که می‌توانند عملیات گروهی و ارتباط مستقیم
انجام دهند.

مقایسه Warp، Wavefront و Subgroup

مقایسه گروه‌های اجرایی در NVIDIA، AMD و Intel
شرکت یا رابط نام گروه اندازه رایج نکته مهم
NVIDIA Warp معمولاً ۳۲ Thread واحد اصلی زمان‌بندی Threadها
AMD Wavefront Wave32 یا Wave64 اندازه به معماری و Shader وابسته است
Intel SIMD Group یا Subgroup وابسته به معماری عرض اجرا ممکن است متغیر باشد
Vulkan و OpenCL Subgroup وابسته به سخت‌افزار نباید بدون بررسی، اندازه ثابت فرض شود

Warp Scheduler چیست؟

Warp Scheduler بخشی از GPU است که Warpهای آماده
اجرا را انتخاب می‌کند و دستور بعدی آن‌ها را برای
واحدهای اجرایی می‌فرستد.

یک SM می‌تواند چندین Warp فعال داشته باشد، اما
همه آن‌ها در یک لحظه دستور صادر نمی‌کنند.
Scheduler بررسی می‌کند کدام Warp آماده است و
منابع موردنیاز آن در دسترس قرار دارند.

اگر یک Warp منتظر داده از حافظه باشد، Scheduler
می‌تواند Warp دیگری را انتخاب کند تا واحدهای
پردازشی بیکار نمانند.

Instruction Scheduler چیست؟

Instruction Scheduler مشخص می‌کند کدام دستور،
در چه زمان و روی کدام واحد اجرایی اجرا شود.

دستورها ممکن است مربوط به محاسبات عددی، بارگذاری
حافظه، ذخیره داده، Texture Sampling، عملیات
ماتریسی یا Branch باشند.

Scheduler باید وابستگی میان دستورها را نیز در نظر
بگیرد. اگر نتیجه یک دستور هنوز آماده نشده باشد،
دستور وابسته به آن نمی‌تواند اجرا شود.

نمونه انواع دستورهای زمان‌بندی‌شده در GPU
نوع دستور واحد اجرایی احتمالی نمونه کاربرد
FP32 واحد محاسبات اعشاری Shader و رندر
INT واحد محاسبات صحیح Index، آدرس‌دهی و منطق
Load Load/Store Unit خواندن داده از حافظه
Store Load/Store Unit نوشتن نتیجه در حافظه
Texture TMU نمونه‌برداری و فیلتر بافت
Matrix Tensor Core، XMX یا واحد معادل هوش مصنوعی و ضرب ماتریسی
Branch واحد کنترل جریان شرط و حلقه

Warp آماده و Warp متوقف‌شده چیست؟

وضعیت‌های رایج Warp در زمان اجرا
وضعیت معنی دلیل نمونه
Ready دستور بعدی Warp قابل اجرا است داده و واحد اجرایی آماده‌اند
Stalled on Memory Warp منتظر داده حافظه است Cache Miss یا دسترسی به VRAM
Stalled on Dependency نتیجه دستور قبلی هنوز آماده نیست وابستگی داده
Stalled on Barrier Warp منتظر رسیدن سایر Threadها است Synchronization
Stalled on Resource واحد اجرایی یا صف موردنیاز آزاد نیست رقابت برای منابع
Completed اجرای Warp تمام شده است پایان دستورها

Latency Hiding چگونه انجام می‌شود؟

GPU به‌جای تلاش برای کاهش کامل تأخیر حافظه،
معمولاً آن را با اجرای Warpهای دیگر پنهان می‌کند.

وقتی یک Warp منتظر داده است، Scheduler می‌تواند
دستور Warp آماده دیگری را صادر کند.

اگر تعداد Warpهای فعال کافی باشد، واحدهای اجرایی
می‌توانند در بخش بیشتری از زمان مشغول بمانند.


۱


Warp نخست دستور حافظه می‌فرستد

دریافت داده چندین سیکل زمان نیاز دارد.


۲


Warp نخست متوقف می‌شود

تا آماده‌شدن داده، قابل صدور نیست.


۳


Scheduler Warp دیگری را انتخاب می‌کند

دستورهای مستقل Warp دوم اجرا می‌شوند.


۴


داده Warp نخست آماده می‌شود

Warp دوباره وارد فهرست آماده‌ها می‌شود.

جابه‌جایی میان گروه‌های Thread در GPU

GPU می‌تواند میان Warpها یا Wavefrontهای فعال
بسیار سریع جابه‌جا شود؛ زیرا وضعیت اجرایی آن‌ها
مانند Registerها از قبل روی تراشه نگهداری می‌شود.

این جابه‌جایی با Context Switch سنگین میان
Threadهای CPU یکسان نیست و معمولاً هزینه بسیار
کمتری دارد.

هدف اصلی این سازوکار، پنهان‌کردن تأخیر و استفاده
مداوم از واحدهای اجرایی است.

Branch Divergence چیست؟

Branch Divergence زمانی رخ می‌دهد که Threadهای
یک Warp یا Wavefront در یک شرط، مسیرهای متفاوتی
انتخاب کنند.

از آنجا که اعضای گروه معمولاً دستور مشترکی را
اجرا می‌کنند، سخت‌افزار ممکن است هر مسیر را
جداگانه اجرا و Threadهای مسیر دیگر را موقتاً
غیرفعال کند.

Warp Serialization چیست؟

Warp Serialization به حالتی گفته می‌شود که
عملیات اعضای یک Warp به‌جای اجرای هم‌زمان، در
چند مرحله جدا انجام شوند.

Branch Divergence، بعضی دسترسی‌های حافظه،
Atomic Operationهای پرتداخل و Bank Conflict
می‌توانند باعث نوعی Serialization شوند.

نتیجه معمولاً کاهش بهره‌وری و طولانی‌ترشدن زمان
اجرای Warp است.

دلایل رایج Serialization در GPU
عامل اثر راهکار احتمالی
Branch Divergence اجرای جداگانه مسیرهای شرطی گروه‌بندی داده‌های مشابه
Bank Conflict دسترسی ترتیبی به Shared Memory اصلاح چیدمان داده
Atomic Contention انتظار Threadها برای یک آدرس کاهش اشتراک نقطه نوشتن
دسترسی پراکنده حافظه تراکنش‌های بیشتر Coalescing بهتر

Reconvergence چیست؟

پس از پایان مسیرهای متفاوت یک Branch، Threadهای
گروه دوباره در نقطه مشترکی به یکدیگر می‌رسند.

این فرایند Reconvergence نام دارد و پس از آن
اعضای گروه می‌توانند اجرای دستور مشترک را ادامه
دهند.

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

مقایسه مفهومی زمان‌بندی در NVIDIA، AMD و Intel

نام‌گذاری اجزای زمان‌بندی در معماری‌های مختلف
شرکت گروه اجرایی بلوک پردازشی حافظه مشترک رایج
NVIDIA Warp SM Shared Memory
AMD Wavefront CU یا WGP LDS
Intel Subgroup یا SIMD Group Xe Core و ساختارهای مرتبط Shared Local Memory

Occupancy در GPU چیست؟

Occupancy نسبت تعداد Warpها، Wavefrontها یا
Threadهای فعال به حداکثر تعداد قابل پشتیبانی در
هر واحد پردازشی GPU است.

این معیار نشان می‌دهد چه مقدار از ظرفیت اجرایی
SM، Compute Unit یا بلوک مشابه توسط گروه‌های
فعال اشغال شده است.

Occupancy بالاتر معمولاً Warpهای آماده بیشتری در
اختیار Scheduler قرار می‌دهد و می‌تواند به
پنهان‌کردن تأخیر حافظه کمک کند.

آیا Occupancy بیشتر همیشه به معنی عملکرد بهتر است؟

خیر. Occupancy بالا فقط یکی از عوامل عملکرد است و
به‌تنهایی سرعت بیشتر را تضمین نمی‌کند.

یک Kernel ممکن است با Occupancy متوسط، استفاده
بسیار خوبی از واحدهای محاسباتی داشته باشد و سریع‌تر
از Kernel دیگری با Occupancy بالا اجرا شود.

اگر برنامه به حافظه وابستگی کمی داشته باشد یا
محاسبات سنگین و مستقل اجرا کند، افزایش Occupancy
ممکن است سود محدودی ایجاد کند.

رابطه Occupancy با عملکرد
وضعیت نتیجه احتمالی توضیح
Occupancy بسیار پایین احتمال افت عملکرد Warp آماده کافی برای پنهان‌کردن
تأخیر وجود ندارد
Occupancy متوسط ممکن است کاملاً مناسب باشد منابع بیشتری برای هر Thread باقی
می‌ماند
Occupancy بسیار بالا لزوماً سریع‌تر نیست ممکن است محدودیت دیگری مانند حافظه
یا دستور وجود داشته باشد
Occupancy بالا با Register کم احتمال Spilling کاهش Register می‌تواند دسترسی به
حافظه را افزایش دهد

عوامل محدودکننده Occupancy

مهم‌ترین عوامل محدودکننده تعداد Threadهای فعال
عامل نحوه ایجاد محدودیت پیامد احتمالی
تعداد Register هر Thread بخشی از Register File را
اشغال می‌کند
کاهش تعداد Warpهای مقیم
Shared Memory هر Block بخشی از حافظه مشترک را
رزرو می‌کند
کاهش تعداد Blockهای هم‌زمان
اندازه Thread Block Blockهای بسیار بزرگ منابع بیشتری
مصرف می‌کنند
جای‌گیری دشوارتر روی SM
سقف Thread سخت‌افزار هر واحد پردازشی حداکثر Thread مشخصی
پشتیبانی می‌کند
محدودیت مستقل از حافظه
سقف Warp یا Wavefront تعداد گروه‌های مقیم محدود است توقف افزایش Occupancy
سقف تعداد Block تعداد Blockهای مقیم در هر واحد
محدود است
Blockهای کوچک همیشه بهتر نیستند

تأثیر Register بر Occupancy

هر Thread برای نگهداری داده‌های موقت خود تعدادی
Register مصرف می‌کند.

اگر هر Thread Register زیادی نیاز داشته باشد،
Register File سریع‌تر پر می‌شود و تعداد Threadهای
هم‌زمان کاهش پیدا می‌کند.

کاهش مصرف Register می‌تواند Occupancy را افزایش
دهد؛ اما اگر بیش‌ازحد انجام شود، Register Spilling
و دسترسی بیشتر به حافظه ایجاد خواهد شد.

تأثیر Shared Memory بر Occupancy

هر Thread Block یا Workgroup می‌تواند مقداری از
Shared Memory واحد پردازشی را رزرو کند.

اگر هر Block بخش بزرگی از Shared Memory را مصرف
کند، تعداد Blockهایی که هم‌زمان روی SM یا Compute
Unit قرار می‌گیرند کاهش پیدا می‌کند.

استفاده مناسب از Shared Memory می‌تواند دسترسی به
VRAM را کاهش دهد و با وجود Occupancy کمتر، عملکرد
نهایی را افزایش دهد.

اندازه Block چه اثری بر Occupancy دارد؟

اندازه Block تعیین می‌کند هر گروه چند Thread داشته
باشد و به چند Warp یا Wavefront تقسیم شود.

Block بسیار کوچک ممکن است نتواند تمام ظرفیت واحد
پردازشی را استفاده کند. Block بسیار بزرگ نیز ممکن
است به دلیل محدودیت Register یا Shared Memory
تعداد گروه‌های مقیم را کاهش دهد.

اثر احتمالی اندازه Thread Block
اندازه Block مزیت احتمالی محدودیت احتمالی
بسیار کوچک مصرف منابع کمتر برای هر Block تعداد Warp کم و استفاده ضعیف از SM
متوسط تعادل مناسب منابع و تعداد Warp نیازمند آزمون عملی
بسیار بزرگ Threadهای بیشتر در هر Block کاهش تعداد Blockهای هم‌زمان
غیرمضرب اندازه Warp انعطاف در بعضی الگوریتم‌ها ایجاد Warp نیمه‌خالی

Active Warp و Resident Warp چیست؟

Resident Warp به Warpi گفته می‌شود که منابع لازم
برای آن روی واحد پردازشی رزرو شده و وضعیت اجرایی
آن داخل GPU قرار دارد.

Active Warp معمولاً Warpi است که هنوز اجرای آن
کامل نشده و می‌تواند در چرخه زمان‌بندی شرکت کند.

همه Warpهای Resident در هر لحظه آماده صدور دستور
نیستند؛ بعضی ممکن است منتظر حافظه، Barrier یا نتیجه
دستور قبلی باشند.

تفاوت وضعیت‌های Warp
اصطلاح تعریف قابلیت صدور فوری دستور
Resident Warp منابع آن روی SM رزرو شده است لزوماً نه
Active Warp اجرای آن هنوز پایان نیافته است وابسته به وضعیت
Eligible Warp دستور بعدی آن قابل صدور است بله
Stalled Warp منتظر رویداد یا منبع است خیر

مثال ساده محاسبه مفهومی Occupancy

فرض کنید یک SM حداکثر توان نگهداری ۶۴ Warp فعال
را دارد، اما به دلیل مصرف Register و Shared Memory
فقط ۳۲ Warp روی آن قرار گرفته‌اند.

در این مثال Occupancy مفهومی برابر نصف ظرفیت
سخت‌افزار است.

این عدد به‌تنهایی مشخص نمی‌کند Kernel سریع یا کند
است؛ زیرا ممکن است همان ۳۲ Warp برای مشغول نگه
داشتن واحدهای اجرایی کافی باشند.

چگونه Occupancy را بهینه کنیم؟

روش‌های رایج بهینه‌سازی Occupancy
روش مزیت خطر یا محدودیت
کاهش Register افزایش Threadهای مقیم احتمال Register Spilling
کاهش Shared Memory هر Block افزایش Blockهای هم‌زمان افزایش مراجعه به VRAM
تغییر اندازه Block جای‌گیری بهتر روی SM کاهش کارایی الگوریتم
کاهش پیچیدگی Kernel مصرف منابع کمتر نیاز به چند Dispatch جدا
استفاده از ابزار Profiling شناسایی محدودیت واقعی نیاز به آزمون روی سخت‌افزار هدف

Synchronization در GPU چیست؟

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

Synchronization مکانیزمی است که باعث می‌شود گروهی
از Threadها قبل از ادامه اجرای برنامه، منتظر
رسیدن سایر اعضای گروه بمانند.

این قابلیت از تولید داده‌های ناقص، خواندن اطلاعات
اشتباه و ایجاد Race Condition جلوگیری می‌کند.

دلایل استفاده از Synchronization
کاربرد دلیل نمونه
اشتراک داده جلوگیری از خواندن داده ناقص Shared Memory
محاسبات گروهی اطمینان از پایان مرحله قبلی Reduction
پردازش ماتریسی هماهنگی میان Tileها Tensor Core
پردازش تصویر آماده بودن همسایه‌ها Blur و Filter
شبیه‌سازی جلوگیری از استفاده از داده قدیمی Fluid Simulation

Barrier چیست؟

Barrier نقطه‌ای در برنامه است که تمام Threadهای
یک گروه باید به آن برسند تا اجرای مرحله بعد آغاز
شود.

اگر حتی یک Thread دیرتر برسد، سایر اعضای همان
گروه منتظر خواهند ماند.

Thread 0 ─────────────┐
Thread 1 ───────┐     │
Thread 2 ─────────────┤
Thread 3 ──┐          │
            ▼
         Barrier
            │
            ▼
   Continue Execution

Memory Barrier چیست؟

Memory Barrier تضمین می‌کند عملیات خواندن و
نوشتن حافظه با ترتیب مشخصی برای سایر Threadها
قابل مشاهده باشد.

این مکانیزم هنگام استفاده از Shared Memory،
Global Memory و عملیات موازی اهمیت زیادی دارد.

بدون Memory Barrier ممکن است بعضی Threadها
داده‌های قدیمی را مشاهده کنند.

Atomic Operation چیست؟

Atomic Operation عملیاتی است که به‌صورت تجزیه‌ناپذیر
روی یک مقدار حافظه انجام می‌شود؛ یعنی Threadهای دیگر
نمی‌توانند همان مقدار را در میانه عملیات تغییر دهند.

این قابلیت زمانی مهم است که چند Thread بخواهند
هم‌زمان یک شمارنده، Histogram، آدرس مشترک یا ساختار
داده یکسان را به‌روزرسانی کنند.

بدون Atomic Operation ممکن است چند Thread مقدار
قدیمی را بخوانند و نتیجه بعضی به‌روزرسانی‌ها از بین
برود.

عملیات Atomic رایج در GPU
عملیات وظیفه نمونه کاربرد
Atomic Add افزودن مقدار به متغیر مشترک شمارنده و Histogram
Atomic Sub کم‌کردن مقدار مدیریت شمارنده منابع
Atomic Min نگهداری کوچک‌ترین مقدار جست‌وجوی کمینه
Atomic Max نگهداری بزرگ‌ترین مقدار جست‌وجوی بیشینه
Compare and Swap مقایسه مقدار و جایگزینی شرطی Lock و ساختار داده هم‌زمان
Atomic Exchange جایگزینی مقدار به‌صورت اتمیک علامت‌گذاری وضعیت

Atomic Contention چیست؟

اگر تعداد زیادی Thread بخواهند هم‌زمان یک آدرس
حافظه را با عملیات Atomic تغییر دهند، درخواست‌ها
ممکن است پشت‌سرهم اجرا شوند.

این وضعیت Atomic Contention نام دارد و می‌تواند
اجرای موازی را به گلوگاه تبدیل کند.

هرچه تعداد Threadهای درگیر و تمرکز آن‌ها روی یک
آدرس بیشتر باشد، احتمال Serialization نیز بیشتر
می‌شود.

Race Condition چیست؟

Race Condition زمانی رخ می‌دهد که نتیجه برنامه به
ترتیب زمان‌بندی و اجرای Threadها وابسته باشد.

اگر دو یا چند Thread بدون هماهنگی روی یک داده
مشترک بخوانند یا بنویسند، نتیجه می‌تواند در هر
اجرا متفاوت باشد.

Race Condition ممکن است باعث خروجی اشتباه، ناپایداری،
خطای تصویری یا خراب‌شدن داده شود.

الگوهای رایج Race Condition
نوع تداخل توضیح خطر
Write After Write چند Thread روی یک آدرس می‌نویسند یکی از نتایج از بین می‌رود
Read After Write Thread داده‌ای را پیش از کامل‌شدن
نوشتن می‌خواند
دریافت مقدار قدیمی یا ناقص
Write After Read داده پیش از پایان استفاده Thread
دیگر تغییر می‌کند
نتیجه غیرقابل پیش‌بینی

مثال ساده Race Condition

فرض کنید مقدار یک شمارنده برابر ۱۰ است و دو Thread
هم‌زمان می‌خواهند آن را یک واحد افزایش دهند.

استفاده از Atomic Add می‌تواند تضمین کند هر افزایش
بدون ازبین‌رفتن نتیجه Thread دیگر انجام شود.

Data Hazard چیست؟

Data Hazard زمانی ایجاد می‌شود که ترتیب اجرای
دستورها و دسترسی به داده برای صحت نتیجه اهمیت
داشته باشد.

این وابستگی ممکن است داخل یک Thread، میان Threadهای
یک گروه یا میان چند Dispatch ایجاد شود.

Barrier، Atomic Operation، Memory Fence و طراحی
درست الگوریتم از ابزارهای مدیریت این وابستگی‌ها
هستند.

Lock و Spinlock در GPU

Lock مکانیزمی برای محدودکردن دسترسی هم‌زمان به
یک منبع مشترک است.

Spinlock حالتی است که Thread تا آزادشدن Lock در
یک حلقه منتظر می‌ماند.

استفاده نادرست از Spinlock در GPU می‌تواند تعداد
زیادی Thread را مشغول انتظار کند و کارایی را به‌شدت
کاهش دهد.

Deadlock در پردازش GPU چیست؟

Deadlock زمانی رخ می‌دهد که چند Thread یا گروه
برای منابع یا رویدادهایی منتظر یکدیگر بمانند و
هیچ‌کدام نتوانند ادامه دهند.

Barrier شرطی، Lockهای تو در تو، انتظار حلقه‌ای و
هماهنگی نادرست میان Threadها از دلایل رایج Deadlock
هستند.

دلایل رایج Deadlock در GPU
علت وضعیت راهکار
Barrier داخل شرط فقط بخشی از Threadها به Barrier
می‌رسند
اطمینان از رسیدن تمام اعضای گروه
Lock حلقه‌ای هر Thread منتظر منبع Thread دیگر است ترتیب ثابت دریافت Lock
Spinlock نامناسب Threadها بدون پیشرفت منتظر می‌مانند استفاده از الگوریتم بدون Lock
هماهنگی میان Blockها فرض هم‌زمانی Blockهایی که ممکن است
هم‌زمان مقیم نباشند
تقسیم کار به چند Dispatch

چرا Barrier داخل شرط خطرناک است؟

اگر فقط بعضی Threadهای یک Workgroup وارد مسیر شرطی
شوند و به Barrier برسند، سایر Threadها ممکن است
هرگز به همان Barrier نرسند.

در نتیجه Threadهای رسیده برای همیشه منتظر باقی
می‌مانند و برنامه متوقف می‌شود یا رفتار تعریف‌نشده
ایجاد می‌کند.

اصول همگام‌سازی امن در GPU

روش‌های کاهش خطاهای هم‌زمانی
اصل توضیح
کاهش داده مشترک تا جای ممکن هر Thread روی داده
مستقل کار کند
استفاده محدود از Atomic Atomic فقط در نقاط لازم استفاده شود
Barrier یکنواخت تمام Threadهای گروه باید به Barrier
برسند
تقسیم الگوریتم مراحل پیچیده به چند Kernel یا Dispatch
تقسیم شوند
استفاده از Shared Memory محلی رقابت روی Global Memory کاهش پیدا کند
Profiling و Validation خطاهای هم‌زمانی روی سخت‌افزار هدف
بررسی شوند

Cooperative Groups چیست؟

Cooperative Groups روشی برای تعریف و مدیریت
گروه‌های مختلف Thread در برنامه‌های موازی است.

به‌جای اینکه برنامه فقط کل Thread Block را به‌عنوان
یک گروه در نظر بگیرد، می‌تواند زیرگروه‌های کوچک‌تر
یا مجموعه‌های بزرگ‌تری از Threadها را برای همکاری
و همگام‌سازی ایجاد کند.

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

نمونه گروه‌های همکاری در پردازش GPU
نوع گروه اعضا کاربرد
Thread Block Group تمام Threadهای یک Block همگام‌سازی و Shared Memory
Tiled Group زیرمجموعه‌ای با اندازه مشخص عملیات گروهی کوچک‌تر
Warp-Level Group Threadهای یک Warp Shuffle، Vote و Reduction
Grid Group مجموعه بزرگ‌تری از Blockها هماهنگی گسترده در اجرای سازگار

عملیات Subgroup و Warp-Level

اعضای یک Warp، Wavefront یا Subgroup می‌توانند
بعضی عملیات را بدون استفاده مستقیم از Shared
Memory انجام دهند.

این عملیات برای تبادل سریع داده، رأی‌گیری جمعی،
یافتن Threadهای فعال و انجام Reductionهای کوچک
کاربرد دارند.

عملیات رایج در سطح Warp یا Subgroup
عملیات وظیفه نمونه کاربرد
Shuffle انتقال مستقیم مقدار میان Laneها Reduction و Scan
Ballot ساخت Mask از نتیجه شرط Threadها تشخیص اعضای فعال
Any بررسی درست‌بودن شرط برای حداقل یک عضو خروج زودهنگام گروهی
All بررسی درست‌بودن شرط برای همه اعضا تصمیم‌گیری جمعی
Match شناسایی اعضای دارای مقدار مشابه گروه‌بندی داده

Parallel Reduction چیست؟

Parallel Reduction روشی برای تبدیل مجموعه بزرگی
از داده‌ها به یک نتیجه کوچک‌تر مانند مجموع،
میانگین، کمینه یا بیشینه است.

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

کاربردهای Parallel Reduction
عملیات نتیجه نمونه کاربرد
Sum مجموع داده‌ها آمار و تحلیل عددی
Minimum کوچک‌ترین مقدار جست‌وجوی کمینه
Maximum بزرگ‌ترین مقدار جست‌وجوی بیشینه
Average میانگین پردازش تصویر و داده
Logical Reduction نتیجه AND یا OR بررسی شرط جمعی

Prefix Sum یا Scan چیست؟

Prefix Sum عملیاتی است که برای هر عنصر، مجموع
عناصر قبلی یا عناصر قبلی به‌علاوه خود آن را
محاسبه می‌کند.

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

تفاوت Inclusive و Exclusive Scan
نوع Scan ورودی خروجی نمونه
Inclusive ۱، ۲، ۳، ۴ ۱، ۳، ۶، ۱۰
Exclusive ۱، ۲، ۳، ۴ ۰، ۱، ۳، ۶

ساخت Histogram روی GPU

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

چالش اصلی این است که Threadهای متعدد ممکن است
بخواهند یک شمارنده مشترک را هم‌زمان افزایش دهند.

برای کاهش رقابت، معمولاً هر Block یک Histogram
محلی در Shared Memory می‌سازد و در پایان نتایج
محلی با یکدیگر ادغام می‌شوند.


۱


تقسیم داده

هر Thread بخشی از تصویر یا آرایه را
پردازش می‌کند.


۲


شمارش محلی

هر Block شمارنده‌های محلی خود را می‌سازد.


۳


همگام‌سازی

Threadها پس از پایان شمارش محلی هماهنگ
می‌شوند.


۴


ادغام نتایج

Histogramهای محلی در خروجی نهایی جمع
می‌شوند.

مرتب‌سازی موازی روی GPU

الگوریتم‌هایی مانند Radix Sort، Bitonic Sort و
Merge Sort می‌توانند برای اجرای موازی روی GPU
طراحی شوند.

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

چند الگوریتم مرتب‌سازی مناسب GPU
الگوریتم مزیت محدودیت
Radix Sort مناسب کلیدهای عددی نیاز به چند مرحله عبور
Bitonic Sort الگوی منظم و قابل موازی‌سازی برای داده بسیار بزرگ همیشه بهینه نیست
Merge Sort مناسب داده‌های عمومی نیاز به حافظه میانی

اجرای محاسبات ماتریسی توسط Threadها

ضرب ماتریسی یکی از مهم‌ترین عملیات در هوش مصنوعی،
شبیه‌سازی، گرافیک و محاسبات علمی است.

ماتریس‌های بزرگ به Tileهای کوچک‌تر تقسیم می‌شوند
و هر Block یا Workgroup مسئول پردازش بخشی از
خروجی است.

داده‌های Tile می‌توانند در Shared Memory قرار
بگیرند تا چندین بار بدون مراجعه مکرر به VRAM
استفاده شوند.

مقایسه Reduction، Scan و Histogram

مقایسه الگوریتم‌های پایه پردازش موازی
الگوریتم ورودی خروجی چالش اصلی
Reduction آرایه بزرگ یک یا چند مقدار خلاصه ترکیب مرحله‌ای داده‌ها
Scan آرایه ترتیبی مجموع‌های پیشوندی حفظ ارتباط ترتیب عناصر
Histogram داده دسته‌بندی‌شونده شمارنده هر دسته Atomic Contention
Matrix Multiply دو ماتریس ماتریس نتیجه پهنای باند و استفاده مجدد داده

نقش Threadها در بازی و رندر گرافیکی

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

موتور بازی یا نرم‌افزار سه‌بعدی حجم بزرگی از
داده‌ها را به GPU می‌فرستد و سخت‌افزار آن‌ها را
میان هزاران Thread تقسیم می‌کند.

عملکرد نهایی به هماهنگی میان Shaderها، حافظه،
Scheduler، TMU، ROP و واحدهای اختصاصی بستگی دارد.

نمونه وظایف Threadها در مسیر رندر
مرحله وظیفه Thread داده پردازش‌شده
Vertex Shader محاسبه موقعیت و ویژگی رأس Vertex، Normal و مختصات
Pixel Shader محاسبه رنگ و نور Fragment Texture، Material و نور
Compute Shader اجرای افکت یا محاسبه عمومی تصویر، Buffer و داده عددی
Ray Tracing Shader پردازش پرتو و برخورد هندسه و ساختار شتاب‌دهنده
Post Processing پردازش پیکسل‌های تصویر نهایی Frame Buffer و Render Target

اجرای Thread در موتورهای بازی

موتورهای بازی از GPU برای پردازش نور، سایه،
Texture، ذرات، انعکاس، Ambient Occlusion،
Anti-Aliasing و بسیاری از افکت‌های تصویری استفاده
می‌کنند.

هر Draw Call یا Dispatch می‌تواند هزاران Thread
ایجاد کند. تعداد و نوع Threadها به پیچیدگی Shader،
وضوح تصویر و تعداد اشیای صحنه وابسته است.

در وضوح‌های بالاتر، تعداد Fragmentها افزایش
پیدا می‌کند و فشار بیشتری روی Pixel Shaderها،
حافظه و مراحل خروجی رندر وارد می‌شود.

نقش Threadها در Ray Tracing

در Ray Tracing تعداد زیادی پرتو از دوربین، منابع
نور یا نقاط برخورد تولید می‌شوند.

هر Thread می‌تواند یک یا چند پرتو را پردازش کند،
ساختار شتاب‌دهنده را پیمایش کند و نتیجه برخورد را
برای Shaderهای بعدی آماده سازد.

پرتوها ممکن است مسیرها و تعداد برخوردهای متفاوتی
داشته باشند. این تفاوت می‌تواند باعث Divergence
میان Threadهای یک Warp یا Wavefront شود.

منابع واگرایی Thread در Ray Tracing
عامل اثر نتیجه احتمالی
مسیر متفاوت پرتو پیمایش متفاوت ساختار هندسی Divergence بیشتر
Material متفاوت اجرای Shaderهای گوناگون کاهش یکپارچگی Warp
تعداد Bounce متفاوت طول اجرای نامساوی Threadهای غیرفعال بیشتر
Miss و Hit متفاوت مسیرهای برنامه متفاوت Serialization برخی مسیرها

نقش Threadها در هوش مصنوعی

مدل‌های هوش مصنوعی شامل تعداد بسیار زیادی عملیات
ماتریسی، برداری و انتقال داده هستند.

Threadها بخش‌های مختلف ماتریس، Tensor یا Batch را
پردازش می‌کنند و داده‌ها را برای CUDA Core،
Tensor Core، XMX یا واحدهای مشابه آماده می‌سازند.

عملکرد مناسب به چیدمان حافظه، اندازه Tile، نوع
داده، Occupancy و هماهنگی میان Threadها وابسته است.

نقش Threadها در مراحل هوش مصنوعی
مرحله وظیفه Threadها منبع مهم
بارگذاری وزن‌ها انتقال بخش‌های مدل به حافظه سریع VRAM و پهنای باند
ضرب ماتریسی تقسیم محاسبات میان Tileها Tensor Core و Shared Memory
Activation اجرای تابع روی عناصر خروجی Shader Core و Register
Reduction جمع یا نرمال‌سازی داده Subgroup و Shared Memory
Attention پردازش ماتریس‌های Query، Key و Value VRAM، Cache و واحد ماتریسی

اجرای Thread در مدل‌های زبانی بزرگ

در مدل‌های زبانی، Threadها در عملیات ضرب ماتریسی،
Attention، نرمال‌سازی، نمونه‌گیری و مدیریت
KV Cache مشارکت می‌کنند.

ظرفیت VRAM تعیین می‌کند چه مقدار از وزن مدل و
KV Cache روی GPU باقی بماند.

اگر بخشی از مدل به RAM یا CPU منتقل شود، Threadهای
GPU ممکن است منتظر انتقال داده بمانند و استفاده
از واحدهای محاسباتی کاهش پیدا کند.

نقش Threadها در پردازش ویدئو

بخشی از پردازش ویدئو توسط موتورهای اختصاصی Encode
و Decode انجام می‌شود، اما Shaderها و Compute
Threadها نیز در افکت، تصحیح رنگ، Scaling،
Denoising و پردازش فریم نقش دارند.

نرم‌افزارهایی مانند Premiere Pro، DaVinci Resolve
و After Effects ممکن است بسته به افکت و کدک از
مسیرهای متفاوت GPU استفاده کنند.

تقسیم وظایف ویدئویی میان واحدهای GPU
وظیفه واحد اصلی نقش Threadهای عمومی
Decode موتور رمزگشایی پردازش تکمیلی فریم
Encode موتور رمزگذاری آماده‌سازی و افکت
Color Grading Shader و Compute پردازش پیکسل‌ها
Noise Reduction Compute و AI تحلیل همسایگی فریم
Scaling Shader یا واحد رسانه نمونه‌برداری و بازسازی تصویر

نقش Threadها در AutoCAD، SolidWorks و نرم‌افزارهای CAD

در نرم‌افزارهای CAD، GPU بیشتر برای نمایش Viewport،
رسم خطوط، سایه‌زنی، Anti-Aliasing و نمایش مدل
سه‌بعدی استفاده می‌شود.

هرچه Assembly، تعداد قطعات، خطوط و افکت‌های Viewport
بیشتر باشد، تعداد بیشتری Thread و منابع گرافیکی
درگیر می‌شوند.

بااین‌حال بسیاری از عملیات مدل‌سازی، بازسازی Feature
و محاسبات هندسی همچنان به CPU وابسته‌اند.

نقش GPU در چند نرم‌افزار مهندسی
نرم‌افزار وظیفه رایج GPU عامل مهم دیگر
AutoCAD نمایش دوبعدی و سه‌بعدی قدرت تک‌هسته‌ای CPU
SolidWorks Viewport و RealView درایور حرفه‌ای و CPU
CATIA نمایش Assembly و مدل گواهی ISV و VRAM
Siemens NX Viewport و Visualization درایور و پیچیدگی پروژه
Revit نمایش سه‌بعدی و افکت‌ها CPU و RAM سیستم

اجرای Thread در Quadro و کارت‌های حرفه‌ای

کارت‌های Quadro، RTX Professional، Radeon Pro و
Arc Pro از اصول کلی اجرای موازی مشابه GPUهای
مصرف‌کننده استفاده می‌کنند.

تفاوت اصلی می‌تواند در تعداد واحدهای فعال، ظرفیت
VRAM، قابلیت ECC، توان مصرفی، Firmware و درایور
حرفه‌ای باشد.

درایور حرفه‌ای می‌تواند نحوه اجرای Shaderها،
مدیریت حافظه و پایداری Viewport را برای نرم‌افزارهای
تخصصی بهینه کند.

نقش معماری Thread در خانواده‌های حرفه‌ای
خانواده گروه اجرایی کاربرد رایج
NVIDIA Quadro Warp CAD، مدل‌سازی و Visualization
NVIDIA RTX Professional Warp و واحدهای RTX رندر، AI و طراحی حرفه‌ای
AMD Radeon Pro Wavefront CAD، محتوا و محاسبات حرفه‌ای
Intel Arc Pro Subgroup و SIMD تولید محتوا و ورک‌استیشن

اجرای Thread در GPUهای قدیمی

کارت‌های قدیمی نیز از اجرای گروهی Threadها استفاده
می‌کنند، اما ظرفیت Register، Cache، تعداد Scheduler
و ویژگی‌های معماری آن‌ها محدودتر است.

نمونه معماری Thread در کارت‌های قدیمی و استوک
مدل یا خانواده معماری گروه اجرایی محدودیت امروز
Quadro K2100M Kepler Warp ۳۲تایی VRAM و توان محدود
Quadro M2000M Maxwell Warp ۳۲تایی فاقد واحدهای جدید AI و RT
Quadro P2000 Pascal Warp ۳۲تایی بدون RT Core اختصاصی
GTX 960M Maxwell Warp ۳۲تایی توان و حافظه محدود لپ‌تاپی
GTX 1060 Pascal Warp ۳۲تایی محدودیت در AI و Ray Tracing جدید
Radeon RX 580 Polaris / GCN Wave64 مصرف برق و نبود RT اختصاصی
Radeon Pro WX 7100 Polaris Wave64 محدودیت نسل معماری
Intel HD 4000 نسل قدیمی Intel SIMD توان پردازشی و حافظه مشترک محدود

فهرست مطالب فصل الگوهای دسترسی به حافظه GPU
بخش عنوان موضوع اصلی سطح مطالعه
۱
مفهوم Memory Access
آشنایی با نحوه دسترسی Threadها به حافظه
مقدماتی
۲
Coalesced Memory Access
ترکیب درخواست‌های حافظه و افزایش پهنای باند مؤثر
متوسط
۳
Uncoalesced Memory Access
دسترسی پراکنده و افزایش تعداد تراکنش‌های حافظه
متوسط
۴
Memory Alignment
هم‌ترازی آدرس‌ها و چیدمان صحیح داده‌ها
پیشرفته
۵
Strided Access
دسترسی Threadها به داده‌ها با فاصله ثابت
پیشرفته
۶
Random Access
دسترسی تصادفی و تأثیر آن بر Cache و VRAM
پیشرفته
۷
Gather و Scatter
خواندن و نوشتن داده از آدرس‌های پراکنده
پیشرفته
۸
Cache-Friendly Access
طراحی الگوی دسترسی مناسب برای افزایش Cache Hit
متوسط
۹
مقایسه روش‌های دسترسی
مقایسه سرعت، تأخیر، Cache و پهنای باند
متوسط
۱۰
بهینه‌سازی دسترسی به حافظه
روش‌های کاهش تراکنش و افزایش بهره‌وری GPU
پیشرفته
۱۱
نمونه در GPUهای قدیمی
GTX، Quadro، Radeon و گرافیک‌های قدیمی Intel
متوسط
۱۲
کاربرد در کارت‌های حرفه‌ای
Quadro، RTX Professional، Radeon Pro و Arc Pro
متوسط
۱۳
اشتباهات رایج
خطاهای متداول در تحلیل و برنامه‌نویسی حافظه
مقدماتی
۱۴
خلاصه فصل
مرور نکات مهم و نتیجه‌گیری نهایی
مقدماتی
۱۵
سؤالات متداول
پاسخ به پرسش‌های رایج کاربران
مقدماتی

Memory Access در GPU چیست؟

Memory Access به فرایند خواندن داده از حافظه یا
نوشتن نتیجه در حافظه توسط Threadهای GPU گفته می‌شود.

هر Thread برای اجرای دستورهای خود ممکن است به
Register، Shared Memory، Cache، VRAM یا حافظه
سیستم دسترسی پیدا کند.

سرعت این دسترسی‌ها یکسان نیست. Register و Shared
Memory معمولاً بسیار سریع‌تر از VRAM هستند، اما
ظرفیت محدودتری دارند.

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

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

مسیر دسترسی Thread به حافظه

درخواست حافظه ممکن است ابتدا در Cacheهای نزدیک
جست‌وجو شود. اگر داده در Cache موجود باشد،
درخواست سریع‌تر پاسخ داده می‌شود.

اگر داده داخل Cache پیدا نشود، درخواست باید به
سطح پایین‌تر حافظه و در نهایت VRAM ارسال شود.

انواع اصلی دسترسی حافظه در GPU

دسته‌بندی الگوهای رایج دسترسی به حافظه
نوع دسترسی ساختار آدرس‌ها بهره‌وری احتمالی نمونه کاربرد
Sequential آدرس‌های متوالی بسیار مناسب پردازش آرایه و تصویر
Coalesced درخواست‌های مجاور Threadهای یک گروه بسیار مناسب خواندن بردار و ماتریس
Strided آدرس‌ها با فاصله ثابت وابسته به اندازه Stride پردازش ستون‌های ماتریس
Random آدرس‌های پراکنده و نامنظم معمولاً ضعیف‌تر گراف و ساختارهای نامنظم
Gather خواندن از چند آدرس پراکنده وابسته به Cache نمونه‌برداری و جست‌وجو
Scatter نوشتن در چند آدرس پراکنده ممکن است پرتداخل باشد ساخت خروجی و Histogram

تفاوت خواندن و نوشتن حافظه

عملیات Read داده را از حافظه دریافت می‌کند،
درحالی‌که عملیات Write نتیجه را در آدرس مشخصی
ذخیره می‌کند.

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

نوشتن هم‌زمان چند Thread روی یک آدرس می‌تواند
Race Condition ایجاد کند و ممکن است به Atomic
Operation نیاز داشته باشد.

مقایسه عملیات خواندن و نوشتن حافظه
معیار Memory Read Memory Write
جهت انتقال حافظه به واحد پردازشی واحد پردازشی به حافظه
استفاده از Cache معمولاً گسترده وابسته به سیاست معماری
خطر تداخل کمتر بیشتر
نیاز احتمالی به Atomic معمولاً ندارد در نوشتن مشترک ممکن است لازم باشد

Memory Transaction چیست؟

GPU برای هر مقدار کوچک الزاماً یک انتقال جداگانه
انجام نمی‌دهد. درخواست‌های Threadها می‌توانند در
تراکنش‌های بزرگ‌تر حافظه ترکیب شوند.

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

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

چه عواملی بر سرعت دسترسی حافظه اثر دارند؟

عوامل مؤثر بر کارایی دسترسی Threadها به حافظه
عامل اثر نتیجه احتمالی
نزدیکی آدرس‌ها امکان ترکیب درخواست‌ها تراکنش کمتر
Memory Alignment قرارگیری داده روی مرز مناسب انتقال مؤثرتر
اندازه داده تعیین حجم هر درخواست مصرف پهنای باند متفاوت
Cache Hit Rate کاهش مراجعه به VRAM تأخیر کمتر
Stride افزایش فاصله آدرس‌ها احتمال تراکنش بیشتر
Branch Divergence تغییر الگوی فعال‌بودن Threadها دسترسی نامنظم‌تر
Atomic Contention رقابت برای آدرس مشترک Serialization
پهنای باند VRAM سقف انتقال داده محدودیت در بارهای سنگین

تفاوت Memory-Bound و Compute-Bound

مقایسه گلوگاه حافظه و گلوگاه محاسبات
معیار Memory-Bound Compute-Bound
عامل محدودکننده انتقال یا تأخیر حافظه توان واحدهای محاسباتی
وضعیت Shader Core بخشی از زمان منتظر داده بیشتر زمان در حال محاسبه
بهبود مؤثر Cache، Coalescing و کاهش انتقال کاهش دستور و افزایش توان Compute
نمونه جابه‌جایی آرایه بزرگ با محاسبه کم ضرب ماتریسی سنگین

Coalesced Memory Access چیست؟

Coalesced Memory Access زمانی رخ می‌دهد که
Threadهای مجاور یک Warp، Wavefront یا Subgroup
به آدرس‌های نزدیک و منظم حافظه دسترسی داشته باشند.

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

نتیجه این فرایند کاهش تعداد تراکنش‌ها، استفاده
بهتر از پهنای باند و کاهش زمان انتظار Threadها است.

ساختار یک دسترسی Coalesced

چرا Coalescing اهمیت دارد؟

حافظه خارجی GPU مانند GDDR یا HBM داده را در
بلوک‌ها و تراکنش‌های مشخص منتقل می‌کند.

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

دسترسی Coalesced کمک می‌کند داده منتقل‌شده با
نیاز واقعی Threadها تطابق بیشتری داشته باشد.

مزایای دسترسی Coalesced
مزیت اثر مستقیم نتیجه احتمالی
تراکنش کمتر درخواست‌های Threadها ترکیب می‌شوند کاهش فشار روی حافظه
استفاده بهتر از پهنای باند داده منتقل‌شده بیشتر استفاده می‌شود سرعت بالاتر Kernel
Cache Line مؤثرتر Threadهای مجاور از داده‌های یک بلوک
استفاده می‌کنند
Cache Hit بیشتر
تأخیر قابل پنهان‌سازی درخواست‌های حافظه سریع‌تر تکمیل می‌شوند Warpهای متوقف‌شده کمتر
مصرف انرژی کمتر انتقال‌های اضافی کاهش پیدا می‌کنند بهره‌وری بالاتر GPU

مثال دسترسی Coalesced به آرایه

فرض کنید هر Thread باید یک عنصر از یک آرایه بزرگ
را پردازش کند.

اگر Thread شماره صفر عنصر صفر، Thread شماره یک
عنصر یک و Thread شماره دو عنصر دو را بخواند،
دسترسی‌ها منظم و مجاور خواهند بود.

دسترسی سطری به ماتریس

در بسیاری از زبان‌ها، عناصر هر سطر ماتریس به‌صورت
پشت‌سرهم در حافظه ذخیره می‌شوند.

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

پردازش ستونی همان ماتریس ممکن است فاصله بیشتری
میان آدرس‌ها ایجاد کند و به Strided Access تبدیل
شود.

مقایسه دسترسی سطری و ستونی به ماتریس
روش دسترسی الگوی آدرس وضعیت احتمالی
دسترسی سطری عناصر متوالی مناسب برای Coalescing
دسترسی ستونی عناصر با فاصله ثابت احتمال Strided Access
دسترسی Tile-Based بلوک‌های کوچک و محلی مناسب برای Cache و Shared Memory

تفاوت Structure of Arrays و Array of Structures

نحوه چیدمان داده‌های ساختاریافته می‌تواند بر
Coalescing تأثیر زیادی داشته باشد.

در Array of Structures، تمام ویژگی‌های هر عنصر
کنار یکدیگر ذخیره می‌شوند.

در Structure of Arrays، هر ویژگی در یک آرایه
جداگانه قرار می‌گیرد.

مقایسه AoS و SoA
چیدمان ساختار حافظه مزیت محدودیت
Array of Structures تمام ویژگی‌های هر عنصر کنار هم مناسب دسترسی کامل به هر شیء دسترسی یک ویژگی ممکن است پراکنده شود
Structure of Arrays هر ویژگی در آرایه جدا مناسب دسترسی گروهی Threadها مدیریت ساختار پیچیده‌تر

اندازه داده و Coalescing

اندازه هر عنصر نیز بر تعداد تراکنش‌ها اثر دارد.
Thread ممکن است داده‌ای ۱، ۲، ۴، ۸ یا ۱۶ بایتی
بخواند.

اگر اندازه و هم‌ترازی داده با نیاز سخت‌افزار
هماهنگ باشد، دسترسی مؤثرتر انجام می‌شود.

ساختارهایی با Padding نامناسب یا اندازه غیرمعمول
می‌توانند مرز تراکنش را بشکنند و انتقال بیشتری
ایجاد کنند.

اثر اندازه داده بر دسترسی حافظه
اندازه عنصر نمونه نوع داده نکته
۱ بایت Byte یا Char ممکن است چند مقدار در یک تراکنش قرار گیرند
۲ بایت FP16 یا Int16 رایج در AI و پردازش تصویر
۴ بایت FP32 یا Int32 یکی از اندازه‌های رایج و مناسب
۸ بایت FP64 یا Int64 پهنای باند بیشتری مصرف می‌کند
۱۶ بایت Vector چهارتایی هم‌ترازی مناسب اهمیت بیشتری دارد

Coalesced Write چیست؟

Coalescing فقط به عملیات Read محدود نیست. نوشتن
Threadهای مجاور در آدرس‌های نزدیک نیز می‌تواند
با تراکنش‌های مؤثرتری انجام شود.

اگر هر Thread نتیجه خود را در یک عنصر متوالی از
آرایه خروجی بنویسد، الگوی Write معمولاً منظم خواهد
بود.

نوشتن در آدرس‌های پراکنده می‌تواند تراکنش بیشتر،
فشار بالاتر روی Cache و احتمال تداخل ایجاد کند.

محدودیت‌های دسترسی Coalesced

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

در چنین شرایطی، استفاده از Cache، مرتب‌سازی داده،
گروه‌بندی Workload یا تغییر چیدمان حافظه می‌تواند
بخشی از هزینه را کاهش دهد.

عواملی که Coalescing را دشوار می‌کنند
عامل مشکل ایجادشده راهکار احتمالی
داده نامنظم آدرس‌های پراکنده مرتب‌سازی یا گروه‌بندی داده
Branch Divergence فقط بخشی از Threadها دسترسی دارند همگن‌سازی Workload
ساختار AoS فاصله میان ویژگی‌های مشابه استفاده از SoA
Stride بزرگ عبور از چندین بلوک حافظه Transpose یا Tile-Based Processing
Alignment نامناسب شکستن تراکنش روی چند مرز Padding و هم‌ترازی مناسب

کاربرد Coalesced Access در نرم‌افزارهای مختلف

اهمیت دسترسی منظم در کاربردهای مختلف GPU
کاربرد نوع داده اهمیت Coalescing
پردازش تصویر پیکسل‌های مجاور بسیار زیاد
ضرب ماتریسی سطرها، ستون‌ها و Tileها بسیار زیاد
رندر Vertex، Texture و Buffer زیاد
هوش مصنوعی Tensor و Weight بسیار زیاد
شبیه‌سازی Grid و داده‌های همسایه زیاد
پردازش گراف Node و Edge پراکنده دشوار ولی مهم

Random Memory Access چیست؟

Random Memory Access به حالتی گفته می‌شود که
Threadهای GPU داده‌های موردنیاز خود را از آدرس‌های
کاملاً نامنظم و غیرقابل پیش‌بینی دریافت می‌کنند.

برخلاف Coalesced Access که آدرس‌ها کنار هم قرار
دارند، در Random Access هر Thread ممکن است به
نقطه‌ای کاملاً متفاوت از حافظه مراجعه کند.

این الگو معمولاً باعث افزایش Cache Miss،
افزایش Memory Transaction و کاهش کارایی GPU
می‌شود.

نمونه دسترسی تصادفی

Memory

0   1   2   3   4   5   6   7

12  18  31  44  51  70  83  99

Thread0 → 83

Thread1 → 12

Thread2 → 44

Thread3 → 99

Thread4 → 18

Thread5 → 70

Random Pattern

تأثیر Random Access بر عملکرد GPU

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

اثر دسترسی تصادفی بر منابع GPU
بخش اثر Random Access
Memory Transaction افزایش تعداد انتقال‌ها
Cache افزایش Cache Miss
پهنای باند استفاده غیربهینه
Scheduler افزایش زمان انتظار Threadها
GPU Utilization کاهش بهره‌وری واقعی

Random Access در چه کاربردهایی دیده می‌شود؟

نمونه کاربردهای دارای دسترسی تصادفی
کاربرد دلیل
Ray Tracing برخورد پرتوها با سطوح مختلف
پردازش Graph ارتباط نامنظم گره‌ها
دیتابیس GPU جستجوی آدرس‌های متنوع
هوش مصنوعی برخی عملیات Sparse Tensor
شبیه‌سازی دسترسی به ذرات پراکنده

Random Access در کارت‌های حرفه‌ای

کارت‌های Quadro، RTX Professional، Radeon Pro و
Arc Pro نیز از همین اصول پیروی می‌کنند.

تفاوت اصلی در ظرفیت Cache، سرعت VRAM،
پهنای باند حافظه و معماری کنترل‌کننده حافظه است.

حتی در کارت‌های حرفه‌ای، Random Access شدید
می‌تواند باعث کاهش محسوس راندمان شود.

نمونه کارت‌های حرفه‌ای
کارت گرافیک کاربرد رایج اهمیت مدیریت حافظه
Quadro P2000 CAD زیاد
RTX A2000 طراحی و AI بسیار زیاد
RTX 4000 Ada ورک‌استیشن بسیار زیاد
Radeon Pro W6600 طراحی صنعتی زیاد
Intel Arc Pro A40 Visualization زیاد

نمونه در GPUهای قدیمی

اثر Random Access در کارت‌های استوک
مدل معماری نتیجه
Quadro K2100M Kepler افت محسوس پهنای باند
Quadro M2000M Maxwell افزایش Cache Miss
GTX 970M Maxwell کاهش راندمان Compute
GTX 1060 Pascal افزایش زمان انتظار Threadها
Radeon RX580 Polaris افت کارایی حافظه

Gather Access چیست؟

Gather Access الگویی از دسترسی حافظه است که در آن
هر Thread داده‌های موردنیاز خود را از چندین آدرس
مختلف حافظه جمع‌آوری (Gather) می‌کند.

مقصد همه این داده‌ها یک Thread است، اما منابع
آن‌ها در نقاط مختلف حافظه قرار دارند.

این روش در پردازش تصویر، هوش مصنوعی، فیلترها،
Texture Sampling، دیتابیس و پردازش گراف بسیار
رایج است.

ساختار Gather Access

Memory

A1
A7
A21
A43

   │
   │
   ▼

Single Thread

Result

یک Thread اطلاعات خود را از چندین آدرس مختلف
جمع‌آوری کرده و نتیجه را تولید می‌کند.

کاربردهای Gather Access

کاربردهای متداول Gather
کاربرد نمونه استفاده میزان استفاده
Texture Sampling خواندن چند Pixel بسیار زیاد
Ray Tracing داده‌های پراکنده صحنه زیاد
هوش مصنوعی Sparse Tensor زیاد
پردازش تصویر فیلترهای همسایگی بسیار زیاد
Graph Processing خواندن گره‌های مختلف زیاد

اثر Gather بر عملکرد GPU

عملکرد Gather به فاصله آدرس‌ها، وضعیت Cache،
پهنای باند حافظه و نوع الگوریتم بستگی دارد.

اگر داده‌ها در Cache موجود باشند، هزینه Gather
بسیار کمتر خواهد بود.

عوامل مؤثر بر سرعت Gather
عامل اثر
Cache Hit افزایش سرعت
Cache Miss مراجعه به VRAM
فاصله آدرس‌ها افزایش Transaction
پهنای باند محدودکننده سرعت
Memory Latency افزایش زمان انتظار

نمونه در کارت‌های قدیمی

عملکرد Gather در نسل‌های مختلف GPU
کارت گرافیک وضعیت Gather
Quadro K2100M وابسته به Cache
Quadro K2200M مناسب برای CAD
Quadro M2000M بهتر از Maxwell قدیمی
GTX 970M عملکرد خوب در Texture
GTX 1060 Cache مؤثرتر
RTX A2000 بسیار مناسب

Scatter Access چیست؟

Scatter Access برعکس Gather Access است. در این
روش یک یا چند Thread نتایج محاسبات خود را در
آدرس‌های مختلف حافظه ذخیره می‌کنند.

مقصد داده‌ها معمولاً پراکنده است و ممکن است
هر Thread در موقعیت متفاوتی از حافظه عملیات
نوشتن (Write) را انجام دهد.

Scatter در بسیاری از الگوریتم‌های پردازش تصویر،
شبیه‌سازی، هوش مصنوعی و پردازش داده‌های بزرگ
استفاده می‌شود.

ساختار Scatter Access

One Thread

      │
      ▼

Write

 ├──► Address 5

 ├──► Address 19

 ├──► Address 81

 └──► Address 204

یک Thread نتیجه پردازش را در چندین آدرس
مختلف حافظه ذخیره می‌کند.

تفاوت Gather و Scatter

مقایسه Gather و Scatter
ویژگی Gather Scatter
عملیات اصلی خواندن نوشتن
مسیر داده چند آدرس → یک Thread یک Thread → چند آدرس
استفاده از Cache زیاد وابسته به معماری
احتمال برخورد کم زیاد
نیاز به Atomic معمولاً خیر گاهی ضروری

نقش Atomic Operation در Scatter

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

برای جلوگیری از این مشکل، GPU از
Atomic Operation
استفاده می‌کند.

عملیات Atomic تضمین می‌کند که هر بار فقط یک
Thread بتواند مقدار آن آدرس را تغییر دهد.

کاربردهای Scatter Access

نمونه کاربردهای Scatter
نرم‌افزار یا کاربرد نمونه عملیات
Blender تولید بافرهای خروجی
Unreal Engine Compute Shader
CUDA Histogram
OpenCL Parallel Reduction
هوش مصنوعی بروزرسانی Weightها
شبیه‌سازی ثبت نتایج ذرات

Scatter در کارت‌های حرفه‌ای

Scatter Access در کارت‌های حرفه‌ای مانند
Quadro، RTX Ada، Radeon Pro و Intel Arc Pro
نیز اهمیت زیادی دارد.

هرچه Cache، حافظه اشتراکی (Shared Memory)
و پهنای باند VRAM قوی‌تر باشند، هزینه اجرای
Scatter کاهش پیدا می‌کند.

نمونه GPUهای مناسب Scatter
مدل کاربرد
Quadro P2000 CAD و Visualization
RTX A2000 AI و Render
RTX 4000 Ada Workstation
Radeon Pro W6600 طراحی صنعتی
Intel Arc Pro A40 پردازش گرافیکی

Cache-Friendly Access چیست؟

Cache-Friendly Access به الگویی از دسترسی حافظه
گفته می‌شود که احتمال پیداشدن داده در Cache را
افزایش می‌دهد و مراجعه مستقیم به VRAM را کاهش
می‌دهد.

اگر Threadها در مدت کوتاه چند بار از داده‌های نزدیک
یا یکسان استفاده کنند، Cache می‌تواند آن داده‌ها
را نگه دارد و درخواست‌های بعدی را سریع‌تر پاسخ دهد.

چیدمان منظم داده، پردازش بلوکی، استفاده مجدد از
اطلاعات و محدودکردن Working Set از مهم‌ترین اصول
طراحی دسترسی Cache-Friendly هستند.

Temporal Locality و Spatial Locality

بهره‌وری Cache تا حد زیادی به دو مفهوم
Temporal Locality
و
Spatial Locality
وابسته است.

مقایسه Temporal و Spatial Locality
نوع Locality مفهوم نمونه اثر بر Cache
Temporal Locality استفاده دوباره از همان داده در
فاصله زمانی کوتاه
خواندن چندباره یک Tile ماتریس افزایش احتمال Cache Hit
Spatial Locality استفاده از داده‌های نزدیک به
آدرس فعلی
پردازش عناصر متوالی آرایه استفاده بهتر از Cache Line

نمونه الگوی Cache-Friendly

Working Set چیست؟

Working Set مجموعه داده‌هایی است که یک Kernel،
Shader یا مرحله پردازشی در یک بازه کوتاه به‌طور
فعال استفاده می‌کند.

اگر Working Set داخل ظرفیت Cache جا شود، بخش
بزرگی از درخواست‌ها می‌توانند بدون مراجعه به
VRAM پاسخ داده شوند.

اگر Working Set بسیار بزرگ باشد، داده‌های مفید
مرتباً از Cache خارج می‌شوند و Cache Miss افزایش
پیدا می‌کند.

Cache Thrashing چیست؟

Cache Thrashing زمانی رخ می‌دهد که داده‌های موردنیاز
با سرعت زیادی وارد Cache و بلافاصله با داده‌های
دیگر جایگزین شوند.

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

Working Set بزرگ، دسترسی پراکنده و رقابت چند
Kernel یا واحد پردازشی برای Cache می‌توانند باعث
Thrashing شوند.

دلایل و پیامدهای Cache Thrashing
عامل اتفاق ایجادشده پیامد
Working Set بزرگ داده‌ها در Cache جا نمی‌شوند Cache Miss بیشتر
Random Access Cache Lineهای متعدد بارگذاری می‌شوند استفاده مجدد کمتر
چند جریان داده داده‌های یکدیگر را جایگزین می‌کنند کاهش Locality
Tile نامناسب اندازه بلوک از ظرفیت Cache بیشتر است مراجعه مکرر به VRAM

Tiling چگونه بهره‌وری Cache را افزایش می‌دهد؟

Tiling یعنی داده بزرگ به بلوک‌های کوچک‌تر تقسیم
شود تا هر بلوک در Cache یا Shared Memory جا بگیرد.

به‌جای پردازش یک ماتریس یا تصویر کامل، GPU ابتدا
یک Tile کوچک را بارگذاری می‌کند، چندین عملیات روی
آن انجام می‌دهد و سپس به Tile بعدی می‌رود.

این روش استفاده مجدد از داده را افزایش و حجم
انتقال میان VRAM و واحدهای پردازشی را کاهش می‌دهد.

ترتیب حلقه‌ها و دسترسی به حافظه

ترتیب اجرای حلقه‌ها می‌تواند تعیین کند داده‌ها
به‌صورت متوالی یا با Stride بزرگ خوانده شوند.

در ماتریس Row-Major، پردازش عناصر هر سطر معمولاً
Locality بهتری از پردازش ستونی دارد.

تغییر ترتیب حلقه‌ها یا استفاده از Transpose می‌تواند
الگوی دسترسی را Cache-Friendlyتر کند.

اثر ترتیب پردازش ماتریس
روش الگوی حافظه بهره‌وری Cache
پردازش سطری آدرس‌های متوالی معمولاً بالا
پردازش ستونی Stride برابر عرض سطر معمولاً کمتر
پردازش Tile-Based بلوک‌های کوچک محلی بسیار مناسب
Transpose اولیه تبدیل دسترسی ستونی به متوالی وابسته به هزینه Transpose

Data Reuse چیست؟

Data Reuse یعنی داده‌ای که یک‌بار از حافظه خوانده
شده است، پیش از خارج‌شدن از Cache یا Shared Memory
چندین بار استفاده شود.

ضرب ماتریسی، Convolution، فیلتر تصویر و محاسبات
همسایگی نمونه‌هایی هستند که می‌توانند از استفاده
مجدد گسترده داده بهره ببرند.

نمونه‌های استفاده مجدد از داده
کاربرد داده قابل استفاده مجدد محل نگهداری مناسب
Matrix Multiply Tileهای ماتریس A و B Shared Memory و Cache
Convolution پیکسل‌های مشترک پنجره‌های مجاور L1 و Shared Memory
Texture Sampling Texelهای نزدیک Texture Cache
Ray Tracing بخش‌هایی از BVH و Material Cacheهای داخلی GPU
AI Inference Weightهای یک لایه Cache و Shared Memory

چیدمان داده مناسب Cache

محل قرارگیری فیلدها، اندازه ساختارها و ترتیب
آرایه‌ها می‌تواند تعیین کند چه مقدار داده مفید
داخل هر Cache Line قرار بگیرد.

اگر یک Kernel فقط یک ویژگی از مجموعه اشیا را
پردازش کند، Structure of Arrays معمولاً Locality
بهتری نسبت به Array of Structures ایجاد می‌کند.

اگر تمام ویژگی‌های هر شیء هم‌زمان استفاده شوند،
Array of Structures نیز ممکن است انتخاب مناسبی
باشد.

اهمیت Cache-Friendly Access در کاربردهای مختلف

اهمیت Locality و Cache در بارهای کاری GPU
کاربرد داده اصلی روش بهینه‌سازی اهمیت
بازی Texture، Vertex و Buffer مرتب‌سازی و Locality فضایی زیاد
Blender Mesh، Texture و BVH Tiling و Data Reuse بسیار زیاد
SolidWorks Geometry و Viewport Buffer Batch و چیدمان منظم زیاد
هوش مصنوعی Weight، Tensor و Activation Tiling و Fusion بسیار زیاد
ویرایش ویدئو فریم و Buffer پردازش بلوکی زیاد
Ray Tracing BVH، Geometry و Material گروه‌بندی پرتوهای مشابه بسیار زیاد

Cache-Friendly Access در کارت‌های قدیمی و حرفه‌ای

در GPUهای قدیمی که Cache کوچک‌تر و پهنای باند
محدودتری دارند، طراحی Cache-Friendly اهمیت بیشتری
پیدا می‌کند.

مدل‌هایی مانند Quadro K2100M، Quadro K2200M،
Quadro M2000M، GTX 960M و GTX 970M در برابر
Working Set بزرگ یا Random Access زودتر با گلوگاه
حافظه مواجه می‌شوند.

کارت‌های جدیدتر مانند RTX A2000، RTX 4000 Ada،
Radeon Pro و Intel Arc Pro Cache و سیستم حافظه
پیشرفته‌تری دارند، اما همچنان از Locality مناسب
سود می‌برند.

اهمیت بهینه‌سازی Cache در چند نسل GPU
خانواده محدودیت رایج اهمیت Cache-Friendly Access
Quadro K Series Cache و VRAM محدودتر بسیار زیاد
Quadro M Series ظرفیت محدود در لپ‌تاپ‌های قدیمی بسیار زیاد
Quadro P Series نبود Cacheهای بزرگ نسل جدید زیاد
RTX Professional Working Set سنگین رندر و AI بسیار زیاد
Radeon Pro وابستگی به معماری و Infinity Cache زیاد
Intel Arc Pro وابستگی به چیدمان داده و درایور زیاد

چک‌لیست طراحی دسترسی Cache-Friendly

موارد مهم برای افزایش بهره‌وری Cache
بررسی هدف
داده‌های مجاور با هم پردازش شوند افزایش Spatial Locality
داده خوانده‌شده دوباره استفاده شود افزایش Temporal Locality
Working Set کوچک نگه داشته شود جلوگیری از Cache Thrashing
پردازش به Tile تقسیم شود جاگیری بهتر در Cache
چیدمان AoS و SoA مقایسه شود کاهش داده بلااستفاده
Random Access کاهش یابد کاهش Cache Miss
ابزار Profiling استفاده شود شناسایی گلوگاه واقعی

مقایسه کامل الگوهای دسترسی به حافظه GPU

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

بااین‌حال، دسترسی‌های منظم و مجاور معمولاً پهنای
باند مؤثرتری ایجاد می‌کنند و دسترسی‌های پراکنده
فشار بیشتری بر Cache و VRAM وارد می‌کنند.

مقایسه کلی الگوهای دسترسی حافظه در GPU
الگوی دسترسی ساختار آدرس‌ها تعداد تراکنش بهره‌وری Cache کارایی معمول
Coalesced منظم و مجاور کم زیاد بسیار عالی
Uncoalesced پراکنده یا نامرتب زیاد کمتر ضعیف‌تر
Strided فاصله ثابت میان آدرس‌ها وابسته به Stride متوسط تا ضعیف وابسته به فاصله
Random غیرقابل پیش‌بینی معمولاً زیاد معمولاً ضعیف پایین‌تر
Gather خواندن از چند آدرس وابسته به پراکندگی وابسته به Locality متوسط
Scatter نوشتن در چند آدرس وابسته به پراکندگی وابسته به معماری متوسط تا ضعیف
Cache-Friendly نزدیک و دارای استفاده مجدد کاهش مراجعه به VRAM بسیار زیاد بسیار عالی

انتخاب الگوی مناسب برای هر نوع پردازش

الگوهای مناسب برای کاربردهای مختلف
نوع پردازش الگوی مطلوب الگوی اجتناب‌پذیر راهکار اصلی
پردازش آرایه Coalesced و Sequential Random نگاشت هر Thread به عنصر مجاور
پردازش تصویر Tile-Based و Cache-Friendly Gather پراکنده بارگذاری ناحیه محلی در Shared Memory
ضرب ماتریسی Coalesced و Tiled Stride بزرگ Transpose یا بازچینی داده
پردازش گراف Gather گروه‌بندی‌شده Random کاملاً پراکنده مرتب‌سازی گره‌ها و یال‌ها
Ray Tracing گروه‌بندی پرتوهای مشابه دسترسی کاملاً واگرا افزایش Coherence پرتوها
هوش مصنوعی Tiled، Coalesced و Data Reuse Tensor نامتراکم بدون ساختار Layout مناسب و Kernel Fusion
Histogram Scatter محلی Atomic مشترک سراسری شمارنده محلی و ادغام نهایی

روش‌های بهینه‌سازی دسترسی به حافظه GPU

هدف بهینه‌سازی حافظه این است که مقدار داده مفید
منتقل‌شده افزایش پیدا کند، تعداد تراکنش‌های اضافی
کاهش یابد و Threadها مدت کمتری منتظر حافظه بمانند.

مهم‌ترین روش‌های بهینه‌سازی Memory Access
روش هدف مزیت خطر یا محدودیت
Coalescing ترکیب درخواست‌های مجاور تراکنش کمتر نیازمند چیدمان مناسب داده
Memory Alignment قرارگیری داده روی مرز مناسب جلوگیری از انتقال چندبخشی ممکن است Padding افزایش یابد
Tiling کوچک‌کردن Working Set استفاده مجدد از داده پیچیدگی بیشتر Kernel
Shared Memory کاهش دسترسی تکراری به VRAM تأخیر کمتر محدودیت ظرفیت و Bank Conflict
Structure of Arrays کنار هم قراردادن ویژگی‌های مشابه Coalescing بهتر دسترسی کامل به هر شیء پیچیده‌تر می‌شود
Data Reordering نزدیک‌کردن داده‌های مرتبط Locality بیشتر هزینه مرتب‌سازی
Kernel Fusion کاهش نوشتن و خواندن میانی انتقال حافظه کمتر مصرف Register بیشتر
Prefetching آماده‌سازی زودهنگام داده پنهان‌کردن تأخیر Prefetch اشتباه پهنای باند مصرف می‌کند
Compression کاهش حجم انتقال پهنای باند مؤثر بیشتر همه داده‌ها قابل فشرده‌سازی نیستند

فرایند مرحله‌به‌مرحله بهینه‌سازی حافظه


مرحله ۱


شناسایی گلوگاه

مشخص شود Kernel واقعاً Memory-Bound است
یا محدودیت اصلی از بخش دیگری ایجاد می‌شود.


مرحله ۲


بررسی الگوی آدرس

آدرس‌های خوانده‌شده توسط Threadهای یک
Warp یا Wavefront تحلیل شوند.


مرحله ۳


اندازه‌گیری Cache

نرخ Cache Hit، Cache Miss و میزان مراجعه
به VRAM بررسی شود.


مرحله ۴


اصلاح Data Layout

AoS، SoA، Alignment، Padding و ترتیب
عناصر مقایسه شوند.


مرحله ۵


استفاده از حافظه نزدیک‌تر

داده‌های پرتکرار در Register، Cache یا
Shared Memory نگهداری شوند.


مرحله ۶


آزمون مجدد

تغییرات با ابزار Profiling و روی سخت‌افزار
هدف اندازه‌گیری شوند.

معیارهای مهم در بررسی عملکرد حافظه

معیارهای مفید برای تحلیل Memory Access
معیار چه چیزی را نشان می‌دهد؟ نشانه احتمالی مشکل
Memory Throughput حجم انتقال واقعی داده فاصله زیاد با ظرفیت سخت‌افزار
Cache Hit Rate درصد درخواست‌های پاسخ‌داده‌شده از Cache نرخ بسیار پایین
Memory Transactions تعداد انتقال‌های موردنیاز تراکنش زیاد برای داده کم
Global Load Efficiency نسبت داده مفید به داده منتقل‌شده هدررفت پهنای باند
Global Store Efficiency بهره‌وری عملیات نوشتن Scatter پراکنده
Memory Stall زمان انتظار Warpها برای داده تأخیر یا پهنای باند ناکافی
Atomic Contention میزان رقابت روی آدرس مشترک Serialization زیاد
Shared Memory Bank Conflict تداخل دسترسی به Bankها دسترسی ترتیبی ناخواسته

هزینه‌ها و مصالحه‌های بهینه‌سازی حافظه

بهینه‌سازی یک بخش ممکن است فشار بیشتری به منبع
دیگری وارد کند. برای مثال، Kernel Fusion انتقال
حافظه را کاهش می‌دهد، اما ممکن است مصرف Register
را افزایش دهد.

نمونه مصالحه‌ها در بهینه‌سازی Memory Access
تغییر مزیت هزینه احتمالی
استفاده بیشتر از Shared Memory کاهش مراجعه به VRAM کاهش Occupancy
Kernel Fusion حذف Buffer میانی Register Pressure بیشتر
Padding Alignment و Bank Conflict بهتر مصرف حافظه بیشتر
Data Reordering Locality بهتر هزینه پیش‌پردازش
Prefetching کاهش زمان انتظار مصرف پهنای باند و Cache
Tile بزرگ‌تر Data Reuse بیشتر مصرف Shared Memory بیشتر

بهترین روش‌ها برای طراحی دسترسی حافظه در GPU

در پروژه‌های حرفه‌ای، افزایش تعداد هسته‌های پردازشی یا
فرکانس GPU همیشه باعث افزایش سرعت برنامه نمی‌شود.
در بسیاری از موارد، نحوه دسترسی به حافظه مهم‌ترین عامل
تعیین‌کننده عملکرد نهایی است.

برنامه‌نویسان CUDA، OpenCL، Vulkan Compute و DirectX Compute
معمولاً پیش از هرگونه بهینه‌سازی پردازشی، الگوی دسترسی
حافظه را بررسی می‌کنند.

مهم‌ترین توصیه‌های مهندسی

بهترین روش‌های بهینه‌سازی Memory Access
توصیه دلیل نتیجه
استفاده از Coalesced Access کاهش تعداد Memory Transaction افزایش پهنای باند مؤثر
کوچک نگه داشتن Working Set جلوگیری از Cache Thrashing افزایش Cache Hit
استفاده از Tiling افزایش استفاده مجدد از داده کاهش مراجعه به VRAM
استفاده از Shared Memory کاهش تأخیر حافظه اجرای سریع‌تر Kernel
کاهش Random Access افزایش Locality افزایش کارایی Cache
استفاده از Profiler یافتن گلوگاه واقعی جلوگیری از بهینه‌سازی اشتباه

سؤالات متداول درباره دسترسی به حافظه GPU

Memory Access در GPU چیست؟

Memory Access به فرایند خواندن داده از
Register، Shared Memory، Cache، VRAM یا
حافظه سیستم و همچنین نوشتن نتیجه در این
حافظه‌ها گفته می‌شود.

چرا الگوی دسترسی حافظه بر سرعت GPU اثر دارد؟

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

Coalesced Memory Access چیست؟

حالتی است که Threadهای مجاور یک Warp،
Wavefront یا Subgroup به آدرس‌های مجاور و
منظم حافظه دسترسی دارند و درخواست‌های آن‌ها
در تعداد کمی تراکنش ترکیب می‌شود.

آیا Coalesced Access همیشه سریع‌ترین روش است؟

برای انتقال آرایه‌ها و داده‌های منظم معمولاً
بسیار مؤثر است؛ اما عملکرد نهایی به Cache،
نوع داده، Alignment، معماری GPU و الگوریتم
نیز بستگی دارد.

Uncoalesced Access چیست؟

زمانی رخ می‌دهد که Threadهای یک گروه به
آدرس‌های پراکنده، نامرتب یا دور از یکدیگر
دسترسی داشته باشند و سخت‌افزار مجبور به
انجام تراکنش‌های بیشتری شود.

Strided Access چیست؟

الگویی است که در آن Threadهای متوالی به
آدرس‌هایی با فاصله ثابت دسترسی دارند. این
فاصله Stride نامیده می‌شود و افزایش آن
می‌تواند کارایی حافظه را کاهش دهد.

آیا Stride برابر یک مناسب است؟

معمولاً بله. Stride برابر یک یعنی عناصر
متوالی خوانده یا نوشته می‌شوند و در بسیاری
از موارد شرایط مناسبی برای Coalescing ایجاد
می‌شود.

Random Access چه مشکلی برای GPU ایجاد می‌کند؟

دسترسی تصادفی می‌تواند تعداد تراکنش‌های
حافظه و Cache Miss را افزایش دهد و باعث
انتظار بیشتر Warpها برای دریافت داده شود.

آیا Random Access همیشه قابل حذف است؟

خیر. الگوریتم‌هایی مانند پردازش گراف،
Ray Tracing، جست‌وجوی درختی و Sparse
Computing ذاتاً دارای دسترسی‌های نامنظم
هستند؛ اما می‌توان داده‌ها را گروه‌بندی یا
مرتب کرد تا Locality افزایش یابد.

تفاوت Gather و Scatter چیست؟

Gather معمولاً داده را از چند آدرس مختلف
می‌خواند و برای یک محاسبه جمع‌آوری می‌کند؛
Scatter نتیجه را در چند آدرس مختلف حافظه
می‌نویسد.

چرا Scatter ممکن است به Atomic Operation نیاز داشته باشد؟

اگر چند Thread هم‌زمان بخواهند یک آدرس
مشترک را تغییر دهند، ممکن است بخشی از
به‌روزرسانی‌ها از بین برود. عملیات Atomic
دسترسی به آن مقدار مشترک را کنترل می‌کند.

Atomic Operation چه اثری بر عملکرد دارد؟

Atomic برای صحت داده ضروری است، اما اگر
Threadهای زیادی روی یک آدرس مشترک رقابت
کنند، عملیات ممکن است به‌صورت ترتیبی انجام
شود و سرعت کاهش یابد.

Memory Alignment چیست؟

Alignment به قرارگیری داده روی مرزهایی
گفته می‌شود که با اندازه و روش انتقال
سخت‌افزار هماهنگ هستند. هم‌ترازی مناسب
می‌تواند تعداد تراکنش‌های اضافی را کاهش دهد.

Padding چیست و چرا استفاده می‌شود؟

Padding فضای خالی کنترل‌شده‌ای است که میان
فیلدها یا ردیف‌های داده قرار می‌گیرد تا
Alignment بهتر شود یا از بعضی Bank Conflictها
جلوگیری شود.

آیا Padding باعث افزایش مصرف حافظه می‌شود؟

بله. Padding مقداری فضای اضافه مصرف می‌کند؛
اما اگر باعث کاهش تراکنش حافظه یا جلوگیری
از تداخل شود، این افزایش ظرفیت می‌تواند
ارزشمند باشد.

Cache-Friendly Access چیست؟

الگویی است که استفاده مجدد از داده‌های
نزدیک یا یکسان را افزایش می‌دهد تا درخواست‌های
بیشتری از Cache پاسخ داده شوند و مراجعه به
VRAM کاهش پیدا کند.

Temporal Locality چیست؟

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

Spatial Locality چیست؟

یعنی پس از دسترسی به یک آدرس، داده‌های
نزدیک به همان آدرس نیز به‌زودی موردنیاز
باشند.

Working Set چیست؟

Working Set مجموعه داده‌هایی است که یک
Kernel یا Shader در یک بازه کوتاه به‌طور
فعال استفاده می‌کند. کوچک‌بودن آن می‌تواند
احتمال جاگیری داده‌ها در Cache را افزایش دهد.

Cache Thrashing چیست؟

زمانی رخ می‌دهد که داده‌ها پیش از استفاده
مجدد، مرتباً از Cache خارج و با داده‌های
دیگر جایگزین شوند. این وضعیت باعث Cache
Miss و مراجعه مکرر به VRAM می‌شود.

Tiling چگونه سرعت دسترسی حافظه را افزایش می‌دهد؟

Tiling داده بزرگ را به بخش‌های کوچک‌تر
تقسیم می‌کند تا هر بخش در Cache یا Shared
Memory قرار بگیرد و چندین بار استفاده شود.

تفاوت Array of Structures و Structure of Arrays چیست؟

در Array of Structures تمام ویژگی‌های هر
شیء کنار هم قرار می‌گیرند؛ در Structure of
Arrays هر ویژگی در آرایه‌ای مستقل ذخیره
می‌شود. SoA برای پردازش گروهی یک ویژگی
معمولاً Coalescing بهتری ایجاد می‌کند.

آیا Shared Memory همیشه باعث افزایش سرعت می‌شود؟

خیر. Shared Memory زمانی مفید است که داده
چندین بار استفاده شود. مصرف بیش‌ازحد آن
می‌تواند Occupancy را کاهش دهد و چیدمان
نامناسب نیز Bank Conflict ایجاد کند.

Memory-Bound بودن برنامه یعنی چه؟

یعنی سرعت برنامه بیشتر توسط تأخیر یا
پهنای باند حافظه محدود شده است، نه توان
واحدهای محاسباتی GPU.

چگونه بفهمیم Kernel به حافظه محدود شده است؟

باید با ابزارهای Profiling معیارهایی مانند
Memory Throughput، Cache Hit Rate، تعداد
تراکنش‌ها، Load Efficiency و زمان انتظار
Warpها بررسی شوند.

آیا VRAM بیشتر مشکل Memory Access را حل می‌کند؟

خیر. ظرفیت بیشتر کمک می‌کند داده‌های بزرگ‌تر
روی کارت قرار بگیرند، اما الگوی دسترسی
نامناسب، Cache Miss و تراکنش‌های اضافی را
به‌تنهایی برطرف نمی‌کند.

آیا پهنای باند بالاتر همیشه عملکرد بیشتری ایجاد می‌کند؟

نه لزوماً. اگر برنامه Compute-Bound باشد
یا داده‌ها به‌صورت نامناسب و پراکنده خوانده
شوند، افزایش پهنای باند خام ممکن است تأثیر
محدودی داشته باشد.

آیا کارت‌های Quadro قدیمی از Coalescing استفاده می‌کنند؟

بله. GPUهای قدیمی NVIDIA مانند Quadroهای
مبتنی بر Kepler، Maxwell و Pascal نیز از
اجرای Warp و ترکیب درخواست‌های حافظه بهره
می‌برند؛ هرچند جزئیات معماری آن‌ها متفاوت
است.

برای Blender ظرفیت VRAM مهم‌تر است یا الگوی دسترسی حافظه؟

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

برای هوش مصنوعی چرا Data Layout اهمیت دارد؟

زیرا Tensorها و ماتریس‌ها باید با قالبی
ذخیره شوند که واحدهای محاسباتی و ماتریسی
بتوانند داده را با تراکنش‌های منظم و استفاده
مجدد بالا دریافت کنند.


فصل فرکانس، توان و مصرف انرژی GPU

فرکانس GPU، توان مصرفی، ولتاژ، TGP، TDP و مدیریت انرژی

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

فهرست فصل فرکانس، توان و مصرف انرژی GPU
بخش عنوان موضوع اصلی سطح مطالعه
۱
فرکانس GPU چیست؟
مفهوم Clock و سیکل کاری پردازنده گرافیکی
مقدماتی
۲
Base Clock چیست؟
فرکانس پایه و شرایط تضمین‌شده کاری
مقدماتی
۳
Boost Clock چیست؟
افزایش پویا و خودکار فرکانس GPU
مقدماتی
۴
Clock Domainهای مختلف GPU
فرکانس هسته، Shader، حافظه و موتورهای رسانه
متوسط
۵
فرکانس حافظه و نرخ مؤثر انتقال
تفاوت Clock واقعی، Effective Clock و Gbps
متوسط
۶
ولتاژ GPU چیست؟
ارتباط ولتاژ با فرکانس، توان و پایداری
متوسط
۷
منحنی ولتاژ و فرکانس
رفتار پویا در نقاط مختلف Voltage/Frequency
پیشرفته
۸
توان مصرفی GPU
مصرف انرژی هسته، حافظه و اجزای جانبی
مقدماتی
۹
تفاوت TDP، TGP و TBP
اصطلاحات توان در NVIDIA، AMD و سازندگان سیستم
متوسط
۱۰
Power Limit چیست؟
سقف توان و اثر آن بر Boost Clock
متوسط
۱۱
Power Throttling چیست؟
کاهش فرکانس هنگام رسیدن به محدودیت توان
متوسط
۱۲
Thermal Throttling چیست؟
کاهش سرعت برای کنترل دما
مقدماتی
۱۳
حسگرهای دمای GPU
Core Temperature، Hotspot و Memory Junction
متوسط
۱۴
تأثیر سیستم خنک‌کننده
رابطه دما، Boost، نویز و پایداری
مقدماتی
۱۵
محدودیت توان GPUهای لپ‌تاپی
تفاوت توان یک مدل مشابه در لپ‌تاپ‌های مختلف
متوسط
۱۶
NVIDIA Dynamic Boost
تقسیم پویا توان میان CPU و GPU لپ‌تاپ
متوسط
۱۷
Performance State یا P-State
حالت‌های مختلف فرکانس و مصرف انرژی
پیشرفته
۱۸
مصرف انرژی در حالت Idle
کاهش فرکانس و خاموش‌کردن بخش‌های بلااستفاده
مقدماتی
۱۹
اورکلاک GPU
افزایش فرکانس هسته و حافظه
پیشرفته
۲۰
Undervolting چیست؟
کاهش ولتاژ برای کنترل توان و دما
پیشرفته
۲۱
بهره‌وری انرژی GPU
عملکرد به‌ازای وات و مقایسه نسل‌ها
متوسط
۲۲
توان در Quadro و کارت‌های حرفه‌ای
پایداری، محدودیت توان و بارهای کاری طولانی
متوسط
۲۳
نمونه در GPUهای قدیمی
Quadro K، M، P و GTXهای قدیمی
متوسط
۲۴
اهمیت توان هنگام خرید
بررسی آداپتور، باتری، خنک‌کننده و عملکرد
مقدماتی
۲۵
اشتباهات رایج
خطاهای متداول در مقایسه فرکانس و توان
مقدماتی
۲۶
خلاصه فصل
مرور نکات اصلی فرکانس و مصرف انرژی
مقدماتی
۲۷
سؤالات متداول
پاسخ به پرسش‌های رایج کاربران
مقدماتی

فرکانس GPU چیست؟

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

برای مثال، فرکانس ۱۵۰۰ مگاهرتز به این معنی است که
مدار مربوطه در شرایط مشخص می‌تواند حدود یک‌ونیم
میلیارد چرخه در ثانیه داشته باشد.

بااین‌حال، هر چرخه لزوماً معادل یک عملیات کامل
نیست. تعداد دستورهای اجراشده در هر چرخه به معماری،
نوع واحد پردازشی، پهنای اجرا، Scheduler و نوع
دستور وابسته است.

آیا فرکانس بیشتر همیشه به معنی GPU سریع‌تر است؟

خیر. دو GPU با فرکانس یکسان می‌توانند عملکرد کاملاً
متفاوتی داشته باشند؛ زیرا تعداد هسته‌ها، معماری،
Cache، پهنای باند حافظه، واحدهای اختصاصی و توان
مصرفی آن‌ها متفاوت است.

حتی در یک معماری مشابه نیز افزایش فرکانس زمانی
مفید است که محدودیت دما، توان یا پهنای باند حافظه
مانع استفاده کامل از آن نشود.

عواملی که همراه با فرکانس بر عملکرد GPU اثر دارند
عامل نقش اثر احتمالی
معماری تعیین توان انجام کار در هر چرخه اختلاف عملکرد حتی در Clock یکسان
تعداد هسته‌ها تعیین میزان پردازش موازی توان عملیاتی بیشتر
پهنای باند حافظه تأمین داده برای واحدهای پردازشی جلوگیری از گلوگاه حافظه
Power Limit محدودکردن توان مصرفی کاهش یا حفظ Boost Clock
دما تعیین فضای حرارتی برای Boost احتمال Thermal Throttling
نوع بار کاری تعیین واحدهای فعال GPU رفتار فرکانسی متفاوت

Base Clock چیست؟

Base Clock فرکانس پایه‌ای است که سازنده برای یک
GPU در شرایط تعریف‌شده اعلام می‌کند.

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

GPUهای جدید دائماً فرکانس خود را بر اساس دما،
ولتاژ، Power Limit، نوع بار کاری و ظرفیت سیستم
خنک‌کننده تغییر می‌دهند.

Boost Clock چیست؟

Boost Clock فرکانسی است که GPU در صورت مناسب‌بودن
شرایط توان، دما و ولتاژ می‌تواند به‌صورت خودکار
به آن برسد یا حتی در بعضی لحظات از آن عبور کند.

سیستم مدیریت فرکانس به‌طور پیوسته حسگرهای مختلف را
بررسی می‌کند و بالاترین نقطه پایدار و مجاز را
انتخاب می‌کند.

به همین دلیل دو کارت دارای GPU یکسان ممکن است به
علت تفاوت خنک‌کننده، BIOS، Power Limit یا طراحی
برد، فرکانس واقعی متفاوتی داشته باشند.

تفاوت Base Clock و Boost Clock

مقایسه فرکانس پایه و فرکانس بوست GPU
معیار Base Clock Boost Clock
مفهوم فرکانس مرجع پایه فرکانس افزایش‌یافته پویا
ثابت‌بودن در عمل ثابت نیست کاملاً وابسته به شرایط
وابستگی به دما کمتر بسیار زیاد
وابستگی به Power Limit محدود مستقیم
کاربرد در مقایسه مرجع اولیه مشخصات تخمین بهتر عملکرد لحظه‌ای
عملکرد طولانی‌مدت به‌تنهایی تعیین‌کننده نیست به خنک‌کننده و توان وابسته است

Sustained Clock یا فرکانس پایدار چیست؟

Sustained Clock فرکانسی است که GPU می‌تواند در یک
بار کاری طولانی‌مدت بدون افت شدید حفظ کند.

این مقدار معمولاً برای ارزیابی رندر طولانی،
شبیه‌سازی، هوش مصنوعی و بازی ممتد از Boost لحظه‌ای
مهم‌تر است.

لپ‌تاپی که در چند ثانیه اول فرکانس بالایی نشان
می‌دهد، ممکن است پس از گرم‌شدن به فرکانس بسیار
پایین‌تری برسد.

Effective Clock در هسته GPU چیست؟

بعضی ابزارها علاوه بر Clock گزارش‌شده، مقدار
Effective Clock را نیز نمایش می‌دهند.

Clock گزارش‌شده ممکن است نقطه فرکانسی انتخاب‌شده
توسط کنترل‌کننده باشد؛ اما Effective Clock نشان
می‌دهد هسته در عمل چه مقدار از زمان با آن نرخ
مشغول اجرای مفید بوده است.

توقف واحدها، محدودیت توان، Clock Gating، انتظار
برای حافظه و بار کاری ناقص می‌توانند باعث تفاوت
میان Clock اعلام‌شده و Clock مؤثر شوند.

تفاوت Clock گزارش‌شده و Effective Clock
معیار Clock گزارش‌شده Effective Clock
مفهوم نقطه فرکانسی انتخاب‌شده نرخ مؤثر فعالیت واقعی
اثر Idle Cycle ممکن است نشان داده نشود در مقدار نهایی منعکس می‌شود
کاربرد بررسی رفتار Boost تحلیل استفاده واقعی از فرکانس

Clock Domainهای مختلف در GPU

تمام اجزای GPU الزاماً با یک فرکانس واحد کار
نمی‌کنند. معماری می‌تواند چند Clock Domain مستقل
داشته باشد که هرکدام بر اساس نیاز خود تنظیم شوند.

جداشدن Domainها کمک می‌کند بخش‌های بلااستفاده با
فرکانس پایین‌تر کار کنند و مصرف انرژی کاهش یابد.

نمونه Clock Domainهای رایج در پردازنده گرافیکی
Clock Domain بخش تحت‌تأثیر کاربرد
Core Clock بخش اصلی GPU Shader، Compute و Raster
Shader Clock واحدهای Shader در برخی نسل‌های قدیمی اجرای دستورهای محاسباتی
Memory Clock VRAM و رابط حافظه انتقال داده
Fabric یا Interconnect Clock ارتباط داخلی بخش‌های GPU جابه‌جایی داده میان بلوک‌ها
Video Engine Clock موتور Encode و Decode پردازش ویدئو
Display Clock موتور نمایشگر خروجی تصویر و مدیریت مانیتور

Shader Clock در GPUهای قدیمی

در بعضی نسل‌های قدیمی NVIDIA، فرکانس واحدهای
Shader با Core Clock یکسان نبود و با ضریب بالاتری
کار می‌کرد.

در معماری‌های جدیدتر، ساختار Clock Domainها تغییر
کرده و مقایسه مستقیم Shader Clock قدیمی با Core
Clock نسل‌های جدید معتبر نیست.

فرکانس حافظه (Memory Clock) چیست؟

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

هرچه Memory Clock بیشتر باشد، در صورت ثابت بودن
عرض باس و نوع حافظه، پهنای باند قابل دسترس نیز
افزایش پیدا می‌کند.

البته سرعت واقعی انتقال داده فقط به فرکانس حافظه
وابسته نیست و نوع حافظه، فناوری انتقال و عرض باس
نیز نقش مهمی دارند.

تفاوت فرکانس واقعی و Effective Memory Clock

در بسیاری از حافظه‌های گرافیکی مانند GDDR5،
GDDR6 و GDDR6X عددی که در مشخصات مشاهده می‌شود
معمولاً نرخ مؤثر انتقال داده است، نه فرکانس واقعی
نوسان مدار حافظه.

تفاوت Clock واقعی و Effective Clock حافظه
ویژگی Clock واقعی Effective Clock
مفهوم فرکانس فیزیکی حافظه نرخ مؤثر انتقال داده
کاربرد طراحی سخت‌افزار محاسبه پهنای باند
عدد درج‌شده در تبلیغات معمولاً خیر معمولاً بله

رفتار فرکانس در انواع حافظه

مقایسه فناوری‌های مختلف حافظه گرافیکی
نوع حافظه نرخ انتقال کاربرد رایج
GDDR5 تا حدود 8Gbps کارت‌های قدیمی
GDDR6 12 تا 20Gbps اغلب GPUهای جدید
GDDR6X تا بیش از 24Gbps کارت‌های رده‌بالا
HBM2 و HBM3 بسیار بالا شتاب‌دهنده‌های حرفه‌ای

رابطه Memory Clock و پهنای باند

افزایش Memory Clock معمولاً باعث افزایش پهنای
باند حافظه می‌شود، اما فقط زمانی که عرض باس
تغییر نکند.

به همین دلیل ممکن است یک کارت دارای Memory Clock
بالاتر، به علت باس باریک‌تر، پهنای باند کمتری
نسبت به کارت دیگر داشته باشد.

Memory Clock
       │
       ▼

Transfer Rate
       │
       ▼

Memory Bus Width
       │
       ▼

Memory Bandwidth

نمونه‌هایی از فرکانس حافظه در GPUهای مختلف

نمونه فرکانس حافظه چند کارت گرافیک
مدل نوع حافظه نرخ مؤثر
Quadro K2200 GDDR5 حدود 5Gbps
Quadro P2000 GDDR5 حدود 7Gbps
RTX A2000 GDDR6 حدود 12Gbps
RTX 4090 GDDR6X حدود 21Gbps
H100 HBM3 بسیار بالا

ولتاژ GPU چیست؟

ولتاژ (Voltage) نیروی الکتریکی موردنیاز برای
عملکرد ترانزیستورهای پردازنده گرافیکی را فراهم
می‌کند. بدون ولتاژ کافی، مدارها نمی‌توانند
تغییر وضعیت داده و محاسبات را انجام دهند.

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

ارتباط ولتاژ و فرکانس

برای اجرای پایدار در فرکانس‌های بالاتر، معمولاً
باید ولتاژ نیز افزایش یابد تا ترانزیستورها بتوانند
سریع‌تر تغییر وضعیت دهند.

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

Higher Clock
      │
      ▼
Needs Higher Voltage
      │
      ▼
Higher Power
      │
      ▼
Higher Temperature

منحنی Voltage/Frequency

GPUهای مدرن تنها یک مقدار ولتاژ یا یک فرکانس
ثابت ندارند، بلکه از یک منحنی ولتاژ-فرکانس
(Voltage/Frequency Curve) استفاده می‌کنند.

کنترل‌کننده داخلی GPU با توجه به بار کاری،
دما، توان و کیفیت تراشه، مناسب‌ترین نقطه این
منحنی را انتخاب می‌کند.

رفتار تقریبی منحنی ولتاژ و فرکانس
ولتاژ فرکانس قابل دستیابی مصرف انرژی
پایین پایین کم
متوسط متوسط متوسط
بالا زیاد زیاد

تنظیم پویای ولتاژ

GPUهای امروزی به‌صورت مداوم ولتاژ خود را تغییر
می‌دهند. هنگام اجرای کارهای سبک، ولتاژ کاهش پیدا
می‌کند و هنگام پردازش‌های سنگین دوباره افزایش
می‌یابد.

این فناوری با نام‌هایی مانند Dynamic Voltage،
DVFS یا Adaptive Voltage شناخته می‌شود.

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

اثر افزایش ولتاژ

پیامدهای افزایش ولتاژ GPU
اثر نتیجه
پایداری بیشتر امکان رسیدن به فرکانس بالاتر
مصرف انرژی افزایش توان مصرفی
دما تولید گرمای بیشتر
فشار روی مدار تغذیه افزایش بار VRM
طول عمر در ولتاژهای بسیار بالا ممکن است
کاهش یابد

چه بخشی ولتاژ GPU را کنترل می‌کند؟

کنترل ولتاژ توسط همکاری Firmware، BIOS کارت،
درایور، کنترل‌کننده توان داخلی GPU و مدار VRM
انجام می‌شود.

این بخش‌ها به‌طور مداوم اطلاعات مربوط به دما،
جریان، توان و فرکانس را بررسی کرده و مناسب‌ترین
ولتاژ را انتخاب می‌کنند.

Driver
   │
   ▼
GPU Firmware
   │
   ▼
Power Controller
   │
   ▼
VRM
   │
   ▼
GPU Core

مدیریت ولتاژ در کارت‌های حرفه‌ای

در کارت‌های حرفه‌ای مانند NVIDIA RTX Ada،
Quadro، AMD Radeon Pro و Intel Arc Pro، کنترل
ولتاژ معمولاً محافظه‌کارانه‌تر از کارت‌های گیمینگ
انجام می‌شود.

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

مدیریت ولتاژ در انواع GPU
خانواده اولویت طراحی
GeForce عملکرد لحظه‌ای و بازی
RTX Professional پایداری طولانی‌مدت
Radeon Pro عملکرد پایدار ورک‌استیشن
Intel Arc Pro تعادل عملکرد و مصرف انرژی

توان مصرفی GPU چیست؟

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

مصرف توان ثابت نیست و بر اساس نوع بار کاری،
فرکانس، ولتاژ، دما، تعداد واحدهای فعال و سرعت
حافظه تغییر می‌کند.

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

کدام بخش‌های کارت گرافیک انرژی مصرف می‌کنند؟

مصرف انرژی کارت گرافیک فقط مربوط به هسته اصلی
GPU نیست. حافظه، مدار تغذیه، کنترل‌کننده‌ها،
موتورهای رسانه و حتی فن‌ها نیز بخشی از توان
دریافت‌شده را مصرف می‌کنند.

اجزای مؤثر بر توان مصرفی کارت گرافیک
بخش وظیفه سهم احتمالی در مصرف
GPU Core اجرای Shader، Compute و رندر معمولاً بیشترین سهم
VRAM نگهداری و انتقال داده قابل‌توجه، به‌ویژه در حافظه‌های سریع
Memory Controller مدیریت ارتباط GPU و حافظه وابسته به بار حافظه
RT و Matrix Units Ray Tracing و محاسبات ماتریسی وابسته به نوع بار کاری
Video Engine Encode و Decode معمولاً کمتر از بار سه‌بعدی کامل
VRM تبدیل و تنظیم ولتاژ بخشی از توان به‌صورت تلفات
فن‌ها و مدارهای جانبی خنک‌سازی و کنترل برد سهم کمتر

تفاوت توان Static و Dynamic

مصرف انرژی تراشه را می‌توان به‌صورت مفهومی به دو
بخش توان ایستا و توان پویا تقسیم کرد.

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

مقایسه توان ایستا و پویا در GPU
نوع توان علت عوامل مؤثر
Dynamic Power تغییر وضعیت مدارها هنگام پردازش فرکانس، ولتاژ و میزان فعالیت
Static Power نشت جریان ترانزیستورها دما، فرآیند ساخت و ولتاژ

چرا مصرف توان در برنامه‌های مختلف متفاوت است؟

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

رفتار مصرف توان در چند نوع بار کاری
بار کاری بخش‌های فعال رفتار توان
بازی Shader، TMU، ROP، Cache و VRAM متغیر و وابسته به صحنه
رندر GPU Compute، حافظه و گاهی RT Core بالا و نسبتاً پایدار
هوش مصنوعی Matrix Unit، Compute و VRAM بالا و وابسته به مدل
Encode ویدئو موتور رسانه و بخشی از حافظه معمولاً کمتر از رندر سه‌بعدی کامل
CAD Viewport Shader، Raster و Buffer متغیر و وابسته به پیچیدگی مدل
Idle Display Engine و بخش‌های ضروری بسیار پایین‌تر

کارت گرافیک انرژی خود را از کجا دریافت می‌کند؟

کارت گرافیک دسکتاپ می‌تواند بخشی از توان خود را
از اسلات PCI Express و بخش دیگر را از کابل‌های
مستقیم منبع تغذیه دریافت کند.

در لپ‌تاپ، انرژی GPU از مدار تغذیه مادربرد تأمین
می‌شود و محدودیت آن به طراحی دستگاه، آداپتور،
باتری و سیستم خنک‌کننده وابسته است.

بازده مدار VRM چه اثری بر مصرف دارد؟

مدار VRM ولتاژ ورودی منبع تغذیه را به ولتاژهای
پایین و دقیق موردنیاز هسته GPU و حافظه تبدیل
می‌کند.

این تبدیل کاملاً بدون اتلاف نیست و بخشی از انرژی
به گرما تبدیل می‌شود. کیفیت طراحی، تعداد فازها،
نوع قطعات و دمای VRM بر بازده آن اثر دارند.

VRM ضعیف یا بسیار گرم ممکن است پایداری فرکانس را
کاهش دهد یا باعث محدودشدن توان کارت شود.

تفاوت TDP، TGP و TBP چیست؟

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

این اصطلاحات همیشه دقیقاً یک محدوده یکسان را
اندازه‌گیری نمی‌کنند؛ بنابراین مقایسه مستقیم
اعداد بدون توجه به تعریف سازنده می‌تواند گمراه‌کننده
باشد.

مقایسه مفهومی اصطلاحات توان GPU
اصطلاح مفهوم عمومی محدوده احتمالی نکته مهم
TDP شاخص طراحی حرارتی گرمایی که سیستم خنک‌کننده باید مدیریت کند الزاماً مصرف دقیق لحظه‌ای نیست
TGP توان کلی پردازنده یا زیرسیستم گرافیکی معمولاً GPU و اجزای وابسته تعریف دقیق به سازنده وابسته است
TBP توان کلی برد هسته، حافظه و اجزای کارت به توان کل کارت نزدیک‌تر است
Board Power توان اندازه‌گیری‌شده یا محدودشده برد کل کارت گرافیک ممکن است لحظه‌ای یا میانگین باشد

چرا TGP در لپ‌تاپ اهمیت بیشتری دارد؟

یک مدل GPU لپ‌تاپی ممکن است در دستگاه‌های مختلف
با سقف توان متفاوت تنظیم شود.

نسخه کم‌مصرف‌تر معمولاً فرکانس پایدار پایین‌تری
دارد، درحالی‌که نسخه پرتوان‌تر در صورت وجود
خنک‌کننده مناسب می‌تواند عملکرد بیشتری ارائه دهد.

به همین دلیل نام GPU به‌تنهایی برای مقایسه دو
لپ‌تاپ کافی نیست و باید توان واقعی یا محدوده TGP
آن‌ها نیز بررسی شود.

اثر تفاوت TGP در GPUهای لپ‌تاپی
TGP پایین‌تر TGP بالاتر
مصرف و گرمای کمتر عملکرد بالقوه بیشتر
مناسب دستگاه باریک‌تر نیازمند خنک‌کننده قوی‌تر
فشار کمتر بر آداپتور و باتری مصرف انرژی و صدای فن بیشتر
Boost پایدار پایین‌تر Boost پایدار بالاتر در شرایط مناسب

Power Limit چیست؟

Power Limit سقفی است که مشخص می‌کند کارت گرافیک
در یک بازه زمانی چه مقدار توان الکتریکی می‌تواند
مصرف کند.

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

Power Limit برای جلوگیری از فشار بیش‌ازحد بر مدار
تغذیه، منبع انرژی، آداپتور، باتری و سیستم خنک‌کننده
استفاده می‌شود.

Power Limit چگونه عمل می‌کند؟

GPU برای رسیدن به فرکانس بالاتر معمولاً به ولتاژ
و توان بیشتری نیاز دارد. کنترل‌کننده داخلی بررسی
می‌کند که افزایش فرکانس باعث عبور از سقف توان
نشود.

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

تفاوت Power Limit و TGP

TGP معمولاً مشخصه‌ای برای توان طراحی‌شده زیرسیستم
گرافیکی است، درحالی‌که Power Limit محدودیتی است
که Firmware یا BIOS برای کنترل مصرف واقعی اعمال
می‌کند.

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

مقایسه Power Limit و TGP
معیار Power Limit TGP
مفهوم سقف اجرایی مصرف توان مشخصه توان زیرسیستم گرافیکی
محل تنظیم BIOS، Firmware یا نرم‌افزار طراحی و مشخصات سازنده
قابلیت تغییر در بعضی کارت‌ها قابل تنظیم است معمولاً مشخصه محصول است
اثر مستقیم محدودکردن Boost و مصرف لحظه‌ای تعیین کلاس توان و خنک‌کننده

افزایش Power Limit چه اثری دارد؟

در بعضی کارت‌های دسکتاپ، نرم‌افزارهای تنظیم GPU
اجازه می‌دهند Power Limit در محدوده‌ای مشخص افزایش
پیدا کند.

افزایش این مقدار به معنی افزایش مستقیم فرکانس نیست؛
بلکه فضای بیشتری در اختیار سیستم Boost قرار می‌دهد
تا در صورت مناسب‌بودن دما و ولتاژ، فرکانس بالاتری
حفظ شود.

پیامدهای احتمالی افزایش Power Limit
اثر نتیجه احتمالی
فضای توان بیشتر حفظ Boost Clock بالاتر
مصرف برق بیشتر فشار بیشتر بر منبع تغذیه و آداپتور
تولید گرمای بیشتر افزایش دما و سرعت فن
فشار بیشتر بر VRM نیاز به مدار تغذیه و خنک‌کننده مناسب
احتمال محدودیت حرارتی تبدیل Power Limit به Thermal Limit

کاهش Power Limit چه کاربردی دارد؟

کاهش Power Limit می‌تواند برای کنترل دما، کاهش
صدای فن، کاهش مصرف انرژی و افزایش پایداری سیستم
خنک‌کننده مفید باشد.

در بعضی GPUها، کاهش محدود توان افت عملکرد کمی
ایجاد می‌کند؛ زیرا بخش پایانی منحنی فرکانس و
ولتاژ بهره‌وری پایینی دارد.

این روش برای ورک‌استیشن‌های کوچک، لپ‌تاپ‌های
قدیمی، سیستم‌های کم‌صدا و کارت‌هایی با خنک‌کننده
محدود کاربرد دارد.

مزایا و محدودیت‌های کاهش Power Limit
مزیت محدودیت
دمای کمتر کاهش احتمالی فرکانس
صدای فن کمتر افت عملکرد در بارهای سنگین
مصرف انرژی کمتر نیاز به آزمون برای یافتن نقطه مناسب
فشار کمتر بر VRM و آداپتور محدودیت در رندر یا محاسبات طولانی

Power Throttling چیست؟

Power Throttling زمانی رخ می‌دهد که GPU به سقف
توان تعیین‌شده برسد و برای جلوگیری از عبور از آن،
فرکانس یا ولتاژ خود را کاهش دهد.

این وضعیت لزوماً نشانه خرابی نیست؛ بلکه بخشی از
رفتار طبیعی سیستم مدیریت توان است.

اگر Power Throttling دائماً رخ دهد، ممکن است کارت
در بار کاری موردنظر به توان بیشتری نیاز داشته باشد
یا طراحی دستگاه عمداً برای مصرف پایین‌تر تنظیم شده
باشد.

نشانه‌های Power Throttling

نشانه‌های احتمالی محدودشدن GPU توسط توان
نشانه توضیح
رسیدن مصرف به سقف مشخص توان گزارش‌شده نزدیک Power Limit باقی می‌ماند
افت دوره‌ای فرکانس Clock برای حفظ سقف توان کاهش پیدا می‌کند
دمای قابل‌قبول همراه با افت Clock محدودیت احتمالاً حرارتی نیست
نمایش Power Limit در ابزار مانیتورینگ دلیل محدودیت توسط حسگر یا Firmware ثبت می‌شود
عملکرد متفاوت در بارهای مختلف بعضی Workloadها توان بیشتری مصرف می‌کنند

تفاوت Power Throttling و Thermal Throttling

مقایسه محدودیت توان و محدودیت دما
معیار Power Throttling Thermal Throttling
عامل اصلی رسیدن به سقف توان رسیدن به سقف دما
دمای GPU ممکن است کاملاً مناسب باشد معمولاً بالا است
راهکار اصلی اصلاح محدودیت توان یا بهره‌وری بهبود خنک‌کننده
اثر افزایش فن ممکن است تأثیر کمی داشته باشد معمولاً مفید است
اثر Undervolting کاهش مصرف و حفظ فرکانس کاهش توان و دما

محدودیت توان در GPUهای لپ‌تاپی

در لپ‌تاپ، Power Limit فقط به خود GPU وابسته نیست.
CPU، GPU، حافظه، باتری و سایر اجزا از ظرفیت مشترک
آداپتور و سیستم خنک‌کننده استفاده می‌کنند.

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

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

عوامل تعیین‌کننده Power Limit لپ‌تاپ
عامل اثر
توان آداپتور تعیین بودجه کل انرژی دستگاه
سیستم خنک‌کننده تعیین توان قابل حفظ در مدت طولانی
مصرف CPU کاهش یا افزایش توان قابل اختصاص به GPU
BIOS سازنده تعیین سقف‌ها و رفتار Boost
حالت عملکرد دستگاه تغییر توان میان Silent، Balanced و Performance
کار با باتری کاهش شدید توان و فرکانس در بسیاری از مدل‌ها

رفتار توان در لپ‌تاپ‌های ورک‌استیشن

لپ‌تاپ‌های ورک‌استیشن قدیمی مجهز به Quadro K،
M یا P معمولاً با توان‌های محافظه‌کارانه طراحی
شده‌اند تا پایداری در رندر، CAD و محاسبات طولانی
حفظ شود.

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

هنگام خرید دستگاه استوک، فقط نام Quadro کافی نیست
و باید توان پایدار، دما، فرکانس و وضعیت آداپتور
زیر بار بررسی شود.

Thermal Throttling چیست؟

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

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

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

Thermal Throttling چگونه اتفاق می‌افتد؟

پس از کاهش فرکانس و ولتاژ، توان مصرفی و گرمای
تولیدشده کمتر می‌شود. اگر دما دوباره کاهش پیدا
کند، سیستم Boost می‌تواند فرکانس را افزایش دهد.

Thermal Limit چیست؟

Thermal Limit دمایی است که کنترل‌کننده GPU پس از
رسیدن به آن، رفتار فرکانس و ولتاژ را برای کنترل
گرما تغییر می‌دهد.

این مقدار میان معماری‌ها، مدل‌ها، BIOSها و
محصولات دسکتاپ یا لپ‌تاپی متفاوت است.

Thermal Limit را نباید با دمای خرابی تراشه یکی
دانست. محدودیت حرارتی معمولاً پیش از رسیدن به
شرایط خطرناک فعال می‌شود.

نشانه‌های Thermal Throttling

نشانه‌های احتمالی محدودشدن GPU توسط دما
نشانه توضیح
دمای بالا دما نزدیک محدودیت تعیین‌شده باقی می‌ماند
افت فرکانس پس از چند دقیقه خنک‌کننده در شروع سرد است اما به‌تدریج اشباع می‌شود
نوسان Clock GPU میان Boost و فرکانس پایین‌تر جابه‌جا می‌شود
افزایش سرعت فن سیستم برای کنترل دما تلاش می‌کند
افت FPS یا سرعت رندر کاهش فرکانس باعث افت عملکرد پایدار می‌شود
ثبت Thermal Limit ابزار مانیتورینگ دلیل محدودیت را حرارتی نشان می‌دهد

دلایل رایج Thermal Throttling

مهم‌ترین دلایل افزایش بیش‌ازحد دمای GPU
علت اثر راهکار احتمالی
گردوغبار کاهش عبور هوا از هیت‌سینک تمیزکردن سیستم خنک‌کننده
خمیر حرارتی خشک‌شده انتقال ضعیف گرما از تراشه تعویض اصولی خمیر حرارتی
فرسودگی Thermal Pad افزایش دمای VRAM یا VRM استفاده از Pad با ضخامت مناسب
فن ضعیف یا خراب کاهش جریان هوا بررسی، تعمیر یا تعویض فن
تهویه نامناسب کیس تجمع هوای گرم اطراف کارت اصلاح ورودی و خروجی هوا
توان مصرفی بالا تولید گرمای بیشتر از ظرفیت خنک‌کننده کاهش Power Limit یا Undervolting
دمای محیط بالا کاهش اختلاف دمای خنک‌کننده با محیط بهبود تهویه محیط
مسدودبودن دریچه لپ‌تاپ کاهش هوای ورودی قراردادن دستگاه روی سطح مناسب

حسگرهای دمای GPU

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

به همین دلیل عددی که با عنوان GPU Temperature
نمایش داده می‌شود الزاماً گرم‌ترین نقطه کارت نیست.

دماهای رایج گزارش‌شده در کارت گرافیک
حسگر محل یا مفهوم کاربرد
GPU Core Temperature دمای عمومی یا میانگین هسته بررسی وضعیت کلی تراشه
Hotspot Temperature گرم‌ترین نقطه اندازه‌گیری‌شده روی Die تشخیص تمرکز گرما یا تماس نامناسب
Memory Junction دمای داخلی یا نقطه اتصال حافظه بررسی وضعیت VRAM
VRM Temperature دمای مدار تغذیه بررسی فشار روی MOSFET و فازها
Board Temperature دمای بخش‌هایی از برد تحلیل تهویه کلی کارت

Hotspot Temperature چیست؟

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

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

اختلاف زیاد میان Core Temperature و Hotspot
می‌تواند در بعضی موارد نشانه توزیع نامناسب خمیر
حرارتی، فشار نابرابر هیت‌سینک یا تمرکز طبیعی بار
کاری باشد.

Memory Junction Temperature چیست؟

Memory Junction Temperature دمای مربوط به تراشه‌های
VRAM یا گرم‌ترین نقطه اندازه‌گیری‌شده در حافظه
گرافیکی است.

حافظه‌های پرسرعت، به‌ویژه در بارهای سنگین انتقال
داده، می‌توانند گرمای قابل‌توجهی تولید کنند.

Thermal Pad نامناسب، تماس ضعیف با هیت‌سینک یا
جریان هوای کم می‌تواند باعث افزایش دمای حافظه شود.

سیستم خنک‌کننده چه اثری بر عملکرد GPU دارد؟

خنک‌کننده بهتر فقط دمای پایین‌تری ایجاد نمی‌کند؛
بلکه می‌تواند فضای حرارتی بیشتری برای حفظ Boost
Clock فراهم کند.

اگر GPU در دمای پایین‌تر و بدون رسیدن به محدودیت
حرارتی کار کند، فرکانس پایدار در بازی، رندر و
پردازش‌های طولانی بهتر حفظ می‌شود.

اثر کیفیت خنک‌کننده بر رفتار GPU
خنک‌کننده ضعیف خنک‌کننده مناسب
افزایش سریع دما کنترل بهتر دمای تراشه
افت زودهنگام Boost حفظ فرکانس پایدارتر
صدای زیاد فن امکان عملکرد کم‌صداتر
فشار بیشتر بر قطعات شرایط حرارتی متعادل‌تر
احتمال نوسان عملکرد عملکرد یکنواخت‌تر

انواع سیستم خنک‌کننده GPU

مقایسه روش‌های رایج خنک‌سازی کارت گرافیک
نوع خنک‌کننده ویژگی کاربرد رایج
Passive بدون فن و کاملاً بی‌صدا GPUهای کم‌مصرف
Blower خروج مستقیم هوای گرم از کیس ورک‌استیشن و کیس‌های فشرده
Open-Air چند فن و هیت‌سینک بزرگ کارت‌های دسکتاپ عمومی و گیمینگ
Vapor Chamber توزیع بهتر گرما روی سطح خنک‌کننده کارت‌های قدرتمند و لپ‌تاپ‌ها
Liquid Cooling انتقال گرما با مایع سیستم‌های رده‌بالا
Shared Laptop Heatpipe اشتراک بخشی از خنک‌کننده CPU و GPU لپ‌تاپ‌های باریک و ورک‌استیشن

Thermal Throttling در لپ‌تاپ‌ها

لپ‌تاپ‌ها فضای محدودتری برای هیت‌سینک، فن و عبور
هوا دارند. در بسیاری از مدل‌ها CPU و GPU نیز
بخشی از سیستم خنک‌کننده را با یکدیگر به اشتراک
می‌گذارند.

هنگام بار هم‌زمان CPU و GPU، حرارت تولیدشده می‌تواند
باعث کاهش توان یا فرکانس یکی از این دو قطعه شود.

لپ‌تاپ‌های ضخیم‌تر لزوماً همیشه سریع‌تر نیستند،
اما معمولاً فضای بیشتری برای خنک‌کننده و حفظ توان
پایدار دارند.

NVIDIA Dynamic Boost چیست؟

Dynamic Boost قابلیتی در بعضی لپ‌تاپ‌های مجهز به
پردازنده گرافیکی NVIDIA است که توان قابل‌استفاده
را به‌صورت پویا میان CPU و GPU تقسیم می‌کند.

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

در بارهای CPU-محور نیز ممکن است سهم بیشتری از توان
به پردازنده مرکزی اختصاص داده شود.

Dynamic Boost چگونه کار می‌کند؟

Firmware، درایور و کنترل‌کننده توان دستگاه به‌طور
پیوسته بار CPU، بار GPU، دما و توان کل سیستم را
بررسی می‌کنند.

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

چه عواملی بر Dynamic Boost اثر دارند؟

عوامل تعیین‌کننده تقسیم پویا توان
عامل اثر
نوع بار کاری تعیین می‌کند CPU یا GPU به توان بیشتری نیاز دارد
دمای CPU و GPU قطعه گرم‌تر ممکن است توان کمتری دریافت کند
توان آداپتور سقف بودجه انرژی کل سیستم را تعیین می‌کند
طراحی خنک‌کننده توان قابل حفظ در بار طولانی را محدود می‌کند
حالت عملکرد لپ‌تاپ پروفایل Silent، Balanced یا Performance رفتار توان را تغییر می‌دهد
BIOS و Firmware محدوده جابه‌جایی توان و اولویت‌ها را تعیین می‌کند

مزایا و محدودیت‌های Dynamic Boost

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

بودجه مشترک توان و حرارت CPU و GPU

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

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

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

اثر نوع بار بر تقسیم توان لپ‌تاپ
نوع بار وضعیت CPU وضعیت GPU نتیجه احتمالی
بازی GPU-محور متوسط سنگین توان بیشتر برای GPU
شبیه‌سازی CPU-محور سنگین سبک توان بیشتر برای CPU
رندر ترکیبی سنگین سنگین رقابت برای توان و خنک‌کننده
پخش ویدئو سبک موتور رسانه فعال مصرف کلی پایین‌تر

Performance State یا P-State چیست؟

P-State حالت عملکرد و مصرف انرژی GPU را مشخص
می‌کند. هر حالت می‌تواند محدوده متفاوتی از فرکانس،
ولتاژ و فعالیت واحدهای داخلی داشته باشد.

GPU هنگام تغییر بار کاری میان این حالت‌ها جابه‌جا
می‌شود تا تعادل مناسبی میان عملکرد و مصرف انرژی
ایجاد کند.

نام‌گذاری و تعداد P-Stateها میان سازندگان و نسل‌های
مختلف یکسان نیست.

نمونه حالت‌های عملکرد GPU

حالت‌های مفهومی عملکرد و مصرف انرژی GPU
حالت فرکانس مصرف انرژی کاربرد
High Performance بالا بالا بازی، رندر و Compute
Medium Performance متوسط متوسط Viewport و کار سبک‌تر
Video State متناسب با موتور رسانه پایین‌تر Decode و Encode
Idle State بسیار پایین حداقل دسکتاپ و کارهای ساده
Sleep یا Power-Gated خاموش یا نزدیک صفر بسیار کم بخش‌های بلااستفاده GPU

Clock Gating چیست؟

Clock Gating روشی برای متوقف‌کردن سیگنال Clock در
بخش‌هایی از GPU است که در لحظه استفاده نمی‌شوند.

وقتی یک واحد Clock دریافت نکند، تغییر وضعیت کمتری
در ترانزیستورهای آن رخ می‌دهد و توان پویا کاهش پیدا
می‌کند.

این روش می‌تواند بدون خاموش‌کردن کامل بخش مربوطه،
مصرف انرژی را در زمان‌های کوتاه کاهش دهد.

Power Gating چیست؟

Power Gating روشی عمیق‌تر برای کاهش مصرف است که
جریان برق بخش‌های بلااستفاده تراشه را تا حد زیادی
قطع می‌کند.

این روش توان ایستا و نشت جریان را کاهش می‌دهد، اما
بازگرداندن بخش خاموش‌شده به حالت فعال ممکن است
زمان و انرژی بیشتری نسبت به Clock Gating نیاز
داشته باشد.

مقایسه Clock Gating و Power Gating
معیار Clock Gating Power Gating
روش توقف سیگنال Clock قطع یا کاهش شدید جریان برق
کاهش توان پویا زیاد زیاد
کاهش نشت جریان محدود بیشتر
سرعت بازگشت سریع معمولاً کندتر
کاربرد توقف‌های کوتاه بیکاری طولانی‌تر

مصرف انرژی GPU در حالت Idle

در حالت Idle، فرکانس هسته و حافظه کاهش پیدا می‌کند
و بسیاری از واحدهای پردازشی وارد حالت Clock-Gated
یا Power-Gated می‌شوند.

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

تعداد مانیتورها، وضوح، نرخ تازه‌سازی، HDR و نوع
اتصال می‌توانند روی فرکانس حافظه و مصرف Idle اثر
بگذارند.

عوامل افزایش مصرف GPU در حالت Idle
عامل اثر احتمالی
چند مانیتور افزایش فعالیت Display Engine و حافظه
نرخ تازه‌سازی بالا جلوگیری از کاهش کامل Memory Clock
وضوح بالا افزایش پهنای باند خروجی تصویر
برنامه‌های شتاب‌یافته فعال نگه‌داشتن بخشی از GPU
ضبط صفحه یا Overlay فعالیت موتور رسانه یا Shader
تنظیمات درایور جلوگیری از ورود به حالت کم‌مصرف

نقش گرافیک ترکیبی در کاهش مصرف لپ‌تاپ

بسیاری از لپ‌تاپ‌ها از گرافیک مجتمع برای کارهای
سبک و از GPU مجزا برای بارهای سنگین استفاده می‌کنند.

در صورت عدم نیاز، GPU مجزا می‌تواند وارد حالت
کم‌مصرف یا تقریباً خاموش شود تا عمر باتری افزایش
پیدا کند.

برنامه‌ای که به‌اشتباه GPU مجزا را فعال نگه دارد
می‌تواند مصرف باتری و دمای Idle را افزایش دهد.

Overclocking یا اورکلاک GPU چیست؟

Overclocking به افزایش فرکانس هسته، حافظه یا هر دو
نسبت به تنظیمات پیش‌فرض سازنده گفته می‌شود.

هدف اورکلاک افزایش عملکرد در بازی، رندر، پردازش
محاسباتی یا سایر بارهای کاری است؛ اما نتیجه نهایی
به ظرفیت خنک‌کننده، Power Limit، ولتاژ و کیفیت
تراشه بستگی دارد.

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

تفاوت اورکلاک هسته و حافظه

مقایسه افزایش فرکانس هسته و VRAM
نوع اورکلاک بخش تحت‌تأثیر کاربردهای حساس خطاهای احتمالی
Core Overclock هسته و واحدهای پردازشی GPU Shader، Compute، رندر و بازی Crash، ریست درایور یا Artifact
Memory Overclock VRAM و مسیر انتقال حافظه بارهای وابسته به پهنای باند خطای حافظه، بافت خراب یا کاهش عملکرد
Core و Memory هم‌زمان کل زیرسیستم گرافیکی بارهای ترکیبی تشخیص دشوارتر عامل ناپایداری

چه عواملی اورکلاک GPU را محدود می‌کنند؟

مهم‌ترین محدودیت‌های اورکلاک کارت گرافیک
محدودیت اثر نشانه احتمالی
Power Limit جلوگیری از حفظ فرکانس بالاتر رسیدن مداوم به محدودیت توان
Thermal Limit کاهش Boost در اثر دما افت فرکانس پس از گرم‌شدن
ولتاژ محدودیت پایداری در Clock بالاتر Crash یا خطای محاسباتی
کیفیت تراشه تفاوت ظرفیت اورکلاک میان نمونه‌ها نتیجه متفاوت در دو کارت مشابه
VRM محدودیت جریان و توان پایدار افزایش دمای مدار تغذیه
محدودیت BIOS جلوگیری از تغییر بعضی پارامترها قفل‌بودن Power Limit یا Voltage
خنک‌کننده حافظه محدودیت Memory Overclock افزایش دمای VRAM یا خطای حافظه

نشانه‌های ناپایداری اورکلاک

خطاهای رایج ناشی از اورکلاک ناپایدار
نشانه علت احتمالی اقدام مناسب
بسته‌شدن برنامه Core Clock یا Memory Clock بیش‌ازحد کاهش تدریجی فرکانس
ریست درایور ناپایداری هسته یا ولتاژ ناکافی بازگشت به تنظیم پایدارتر
نقاط یا خطوط رنگی خطای VRAM یا Shader کاهش Memory Clock یا Core Clock
افت ناگهانی عملکرد Power یا Thermal Throttling بررسی توان، دما و Effective Clock
نتیجه محاسباتی اشتباه خطای خاموش در Compute تست صحت خروجی، نه فقط نبود Crash
هنگ کامل سیستم تنظیم بسیار ناپایدار بازگرداندن تنظیمات پیش‌فرض

اورکلاک GPU در لپ‌تاپ

اورکلاک در لپ‌تاپ معمولاً محدودتر از دسکتاپ است؛
زیرا GPU، CPU، VRM و حافظه در فضای کوچکی قرار دارند
و ظرفیت دفع حرارت محدود است.

بعضی سازندگان امکان تغییر محدود Core Clock یا
Memory Clock را فراهم می‌کنند، اما Power Limit و
Voltage معمولاً قفل یا بسیار محدود هستند.

در لپ‌تاپ‌های استوک و ورک‌استیشن‌های قدیمی، سرویس
خنک‌کننده و سلامت آداپتور معمولاً اهمیت بیشتری از
اورکلاک دارند.

Undervolting چیست؟

Undervolting به کاهش ولتاژ GPU در یک فرکانس مشخص
گفته می‌شود.

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

اگر تراشه بتواند همان فرکانس را با ولتاژ کمتر
پایدار نگه دارد، فضای بیشتری در محدودیت توان و
حرارت ایجاد می‌شود.

مزایای احتمالی Undervolting

اثرات احتمالی کاهش ولتاژ GPU
مزیت نتیجه
توان مصرفی کمتر کاهش فشار بر منبع تغذیه و آداپتور
دمای پایین‌تر کاهش احتمال Thermal Throttling
صدای فن کمتر عملکرد آرام‌تر سیستم
Sustained Clock بهتر حفظ فرکانس پایدار در سقف توان مشخص
بهره‌وری بالاتر عملکرد بیشتر به‌ازای هر وات
فشار کمتر بر VRM گرمای کمتر مدار تغذیه

محدودیت‌ها و خطرهای Undervolting

کاهش بیش‌ازحد ولتاژ می‌تواند باعث ناپایداری،
بسته‌شدن برنامه، ریست درایور یا خطای محاسباتی شود.

هر تراشه کیفیت متفاوتی دارد و تنظیم پایدار یک GPU
الزاماً روی نمونه دیگر قابل استفاده نیست.

مشکلات احتمالی Undervolting ناپایدار
مشکل علت راهکار
Crash ولتاژ ناکافی برای فرکانس انتخاب‌شده افزایش جزئی ولتاژ یا کاهش Clock
ریست درایور ناپایداری لحظه‌ای اصلاح نقطه Voltage/Frequency
افت عملکرد انتخاب فرکانس هدف بسیار پایین تنظیم منحنی متعادل‌تر
خطای Compute ناپایداری بدون نشانه تصویری تست صحت محاسبات و رندر
بازگشت تنظیم پس از Restart محدودیت نرم‌افزار یا درایور ذخیره پروفایل و بررسی سازگاری

تفاوت Undervolting و کاهش Power Limit

مقایسه دو روش کاهش مصرف و دمای GPU
معیار Undervolting کاهش Power Limit
روش کاهش ولتاژ در فرکانس مشخص کاهش سقف توان مجاز
کنترل فرکانس امکان حفظ Clock هدف کنترل خودکار توسط Boost
پیچیدگی نیازمند تنظیم و تست دقیق‌تر ساده‌تر
افت عملکرد در تنظیم مناسب ممکن است بسیار کم باشد به میزان کاهش سقف توان وابسته است
خطر ناپایداری در ولتاژ بسیار پایین وجود دارد معمولاً کمتر

بهره‌وری انرژی GPU چیست؟

بهره‌وری انرژی نشان می‌دهد GPU در برابر هر وات
مصرف انرژی چه مقدار عملکرد ارائه می‌کند.

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

این معیار برای لپ‌تاپ، ورک‌استیشن، سرور، هوش
مصنوعی و سیستم‌های کم‌صدا اهمیت زیادی دارد.

چه عواملی عملکرد به‌ازای وات را تعیین می‌کنند؟

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

نقطه بهینه بهره‌وری GPU

بیشتر GPUها در حداکثر فرکانس و ولتاژ خود بهترین
عملکرد به‌ازای وات را ندارند.

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

مدیریت توان در Quadro و کارت‌های حرفه‌ای

کارت‌های حرفه‌ای مانند NVIDIA Quadro، سری RTX
Professional، AMD Radeon Pro و Intel Arc Pro برای
بارهای کاری طولانی، پایداری درایور و عملکرد یکنواخت
طراحی می‌شوند.

در این محصولات، بیشترین Boost لحظه‌ای همیشه هدف
اصلی نیست. سازنده ممکن است فرکانس، ولتاژ و Power
Limit را محافظه‌کارانه‌تر تنظیم کند تا کارت در
رندرهای چندساعته، محاسبات مهندسی و پروژه‌های حساس
رفتار قابل‌پیش‌بینی‌تری داشته باشد.

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

مقایسه رفتار توان کارت حرفه‌ای و گیمینگ

تفاوت‌های رایج در مدیریت توان کارت‌های حرفه‌ای و گیمینگ
معیار کارت حرفه‌ای کارت گیمینگ
اولویت اصلی پایداری، سازگاری و عملکرد یکنواخت بیشترین عملکرد در بازی و بار لحظه‌ای
رفتار Boost معمولاً کنترل‌شده‌تر معمولاً تهاجمی‌تر
بار کاری هدف CAD، رندر، شبیه‌سازی و محاسبات طولانی بازی، تولید محتوا و استفاده عمومی
خنک‌کننده متناسب با ورک‌استیشن و کار مداوم متنوع و گاهی متمرکز بر Boost بالا
محدودیت توان ممکن است محافظه‌کارانه‌تر باشد در مدل‌های رده‌بالا معمولاً بالاتر است
تنظیم دستی ممکن است محدودتر باشد معمولاً انعطاف بیشتری دارد

چرا بسیاری از کارت‌های حرفه‌ای از خنک‌کننده Blower استفاده می‌کنند؟

خنک‌کننده Blower هوای گرم را از داخل کارت عبور
داده و مستقیماً از پشت کیس خارج می‌کند.

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

در مقابل، Blower ممکن است صدای بیشتری تولید کند و
در یک کارت منفرد، دمای بالاتری نسبت به خنک‌کننده
Open-Air داشته باشد.

مزایا و محدودیت‌های خنک‌کننده Blower
مزیت محدودیت
خروج مستقیم گرما از کیس صدای بیشتر فن
مناسب چند کارت نزدیک به هم سطح هیت‌سینک محدودتر
رفتار حرارتی قابل‌پیش‌بینی دمای بالاتر در بعضی مدل‌ها
مناسب کیس‌های ورک‌استیشن Boost کمتر از طراحی‌های بزرگ Open-Air

رفتار توان در رندر و محاسبات طولانی

در بارهای کوتاه، GPU ممکن است برای چند ثانیه یا
چند دقیقه Boost بالایی حفظ کند؛ اما در پردازش‌های
طولانی، تعادل حرارتی سیستم اهمیت بیشتری پیدا می‌کند.

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

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


مرحله ۱


شروع بار کاری

GPU سرد است و فضای حرارتی زیادی دارد.


مرحله ۲


Boost اولیه

فرکانس به بالاترین مقدار مجاز نزدیک می‌شود.


مرحله ۳


اشباع حرارتی

دمای GPU، VRAM و خنک‌کننده افزایش پیدا می‌کند.


مرحله ۴


فرکانس پایدار

Clock در نقطه متعادل توان و دما تثبیت می‌شود.

ECC چه اثری بر توان و عملکرد دارد؟

برخی کارت‌ها و شتاب‌دهنده‌های حرفه‌ای از حافظه ECC
یا سازوکارهای تشخیص و اصلاح خطا پشتیبانی می‌کنند.

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

فعال‌بودن ECC ممکن است مقداری از ظرفیت حافظه،
پهنای باند یا توان پردازشی را مصرف کند، اما در
پروژه‌های حساس، صحت داده معمولاً مهم‌تر از این
سربار محدود است.

رفتار توان در GPUهای قدیمی و لپ‌تاپ‌های استوک

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

بااین‌حال، بسیاری از آن‌ها به دلیل Power Limit
پایین‌تر، همچنان برای CAD سبک، کارهای اداری،
آموزش و پروژه‌های نیمه‌حرفه‌ای قابل استفاده‌اند.

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

ویژگی‌های توان چند خانواده قدیمی GPU
مدل یا خانواده نسل رفتار رایج نکته خرید
Quadro K2100M Kepler توان متوسط و Boost محدودتر بررسی خنک‌کننده و آداپتور
Quadro K2200M Maxwell اولیه بهره‌وری بهتر از نسل Kepler توجه به دمای طولانی‌مدت
Quadro M1000M Maxwell مناسب ورک‌استیشن میان‌رده قدیمی بررسی ظرفیت VRAM
Quadro M2000M Maxwell عملکرد بهتر با توان کنترل‌شده تست فرکانس پایدار زیر بار
Quadro P1000 Pascal بهره‌وری مناسب در توان پایین مناسب CAD سبک و متوسط
Quadro P2000 Pascal تعادل خوب توان و عملکرد بررسی نوع دسکتاپ یا لپ‌تاپی
GTX 960M Maxwell محدود به توان لپ‌تاپی مناسب پروژه‌های سبک‌تر
GTX 1060 Laptop Pascal توان بالاتر و نیاز به خنک‌کننده بهتر بررسی عملکرد هم‌زمان CPU و GPU
Radeon Pro WX 4170 Polaris مصرف متوسط در ورک‌استیشن موبایل بررسی سازگاری درایور نرم‌افزار
Radeon RX 580 Polaris مصرف نسبتاً بالا در بار کامل نیازمند منبع تغذیه و تهویه مناسب

مشکلات رایج توان در لپ‌تاپ‌های قدیمی

عوامل کاهش عملکرد GPU در لپ‌تاپ‌های استوک
مشکل اثر روش بررسی
آداپتور ضعیف محدودشدن Power Limit بررسی وات و شناسه آداپتور
باتری خراب ناتوانی در جبران پیک مصرف تست دستگاه با باتری سالم
گردوغبار Thermal Throttling بررسی دما و جریان هوا
خمیر حرارتی فرسوده افت Sustained Clock مقایسه دمای شروع و دمای پایدار
BIOS قدیمی مدیریت نامناسب توان یا فن بررسی نسخه و مستندات سازنده
فن فرسوده کاهش ظرفیت خنک‌کننده بررسی صدا و سرعت فن
Thermal Pad نامناسب افزایش دمای VRAM یا VRM بررسی تعمیرات قبلی دستگاه

هنگام خرید GPU یا لپ‌تاپ، توان مصرفی را چگونه بررسی کنیم؟

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

این موضوع در لپ‌تاپ‌های گیمینگ، ورک‌استیشن‌های
استوک و مدل‌های باریک اهمیت بیشتری دارد؛ زیرا
سازنده می‌تواند همان تراشه را با Power Limit
متفاوت عرضه کند.

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

چک‌لیست توان GPU هنگام خرید لپ‌تاپ

موارد مهم برای بررسی توان و عملکرد GPU لپ‌تاپی
مورد بررسی چرا مهم است؟ روش بررسی
TGP یا Power Limit تعیین‌کننده فضای توان GPU است مشخصات رسمی و ابزار مانیتورینگ
توان آداپتور باید توان CPU، GPU و سایر اجزا را تأمین کند بررسی وات درج‌شده روی آداپتور
اصالت آداپتور آداپتور ناسازگار می‌تواند توان را محدود کند بررسی مدل، ولتاژ، جریان و شناسه سازنده
طراحی خنک‌کننده تعیین‌کننده توان پایدار در بار طولانی است بررسی تعداد فن، هیت‌پایپ و خروجی هوا
اشتراک خنک‌کننده CPU و GPU بار CPU می‌تواند توان و دمای GPU را تغییر دهد بررسی طراحی داخلی و تست بار ترکیبی
فرکانس پایدار عملکرد واقعی را بهتر از Boost لحظه‌ای نشان می‌دهد تست چنددقیقه‌ای یا طولانی زیر بار
دمای Core و Hotspot وضعیت انتقال حرارت و خنک‌کننده را نشان می‌دهد استفاده از ابزار مانیتورینگ
صدای فن نشان‌دهنده فشار خنک‌کننده و سلامت فن است شنیدن صدا در حالت Idle و Load
حالت کار با باتری عملکرد GPU بدون آداپتور معمولاً کاهش می‌یابد مقایسه عملکرد با برق و باتری
پروفایل‌های عملکرد Silent، Balanced و Performance توان متفاوتی دارند بررسی نرم‌افزار سازنده لپ‌تاپ

بررسی توان GPU در لپ‌تاپ ورک‌استیشن استوک

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

مدل‌های مجهز به Quadro قدیمی ممکن است هنوز برای
AutoCAD، SolidWorks، CATIA، Revit، Maya یا Blender
سبک مناسب باشند؛ اما باید توان پایدار و وضعیت
حرارتی آن‌ها بررسی شود.

تست‌های پیشنهادی برای ورک‌استیشن استوک
تست هدف نشانه مشکل
تست بار GPU بررسی Clock، Power و دما افت سریع و مداوم فرکانس
تست هم‌زمان CPU و GPU بررسی بودجه مشترک توان و حرارت افت شدید عملکرد یکی از قطعات
بررسی آداپتور اطمینان از تأمین توان کامل محدودشدن فرکانس یا پیام آداپتور ناشناخته
بررسی فن کنترل سلامت مکانیکی و جریان هوا صدای ساییدگی، توقف یا سرعت نامنظم
تست VRAM بررسی سلامت حافظه گرافیکی Artifact، خطا یا Crash
تست نرم‌افزار واقعی بررسی عملکرد در کاربرد هدف ناپایداری فقط در پروژه سنگین
بررسی دمای Idle تشخیص فعالیت غیرعادی یا خنک‌کننده ضعیف دمای بالا بدون بار قابل‌توجه

هنگام خرید کارت گرافیک دسکتاپ چه مواردی را بررسی کنیم؟

بررسی توان و سازگاری کارت گرافیک دسکتاپ
مورد اهمیت نکته
منبع تغذیه تأمین توان پایدار کارت و کل سیستم فقط وات اسمی کافی نیست؛ کیفیت مهم است
کانکتور برق سازگاری فیزیکی و الکتریکی نوع و تعداد اتصال‌ها بررسی شود
فضای کیس نصب کارت و عبور مناسب هوا طول، ضخامت و ارتفاع کارت بررسی شود
تهویه کیس دفع گرمای GPU ورودی و خروجی هوا متعادل باشد
نوع خنک‌کننده اثر بر دما، صدا و Boost Blower و Open-Air کاربرد متفاوت دارند
توان پایدار کارت تعیین مصرف واقعی زیر بار به نسخه سفارشی سازنده نیز وابسته است
دمای VRAM و VRM پایداری در بارهای طولانی فقط دمای Core کافی نیست
نویز کیفیت تجربه استفاده سرعت فن زیر بار بررسی شود

اهمیت توان GPU در کاربردهای مختلف

اثر Power Limit و خنک‌کننده در کاربردهای مختلف
کاربرد نوع بار عامل مهم اهمیت توان پایدار
AutoCAD متغیر و وابسته به Viewport درایور، CPU و فرکانس پایدار متوسط
SolidWorks Viewport و نمایش Assembly Quadro، درایور حرفه‌ای و خنک‌کننده متوسط تا زیاد
Blender رندر طولانی و Compute VRAM، توان و Sustained Clock بسیار زیاد
Maya Viewport، شبیه‌سازی و رندر تعادل CPU، GPU و حافظه زیاد
ویرایش ویدئو Decode، افکت، Color و Export موتور رسانه، VRAM و توان پایدار زیاد
هوش مصنوعی Matrix و Memory Intensive VRAM، پهنای باند و Power Limit بسیار زیاد
بازی بار پویا و ترکیبی Boost، دما و توان زیاد
کار اداری سبک مصرف Idle و گرافیک مجتمع کم

اشتباهات رایج درباره فرکانس و توان GPU

باورهای اشتباه رایج درباره Clock، TGP و دمای GPU
باور اشتباه واقعیت
فرکانس بیشتر همیشه یعنی GPU سریع‌تر معماری، تعداد واحدها و حافظه نیز تعیین‌کننده‌اند
دو لپ‌تاپ با GPU یکسان عملکرد برابر دارند TGP، خنک‌کننده و BIOS می‌توانند متفاوت باشند
Boost Clock همیشه ثابت می‌ماند Boost به توان، دما و نوع بار وابسته است
TDP همان مصرف دقیق برق است TDP معمولاً یک شاخص طراحی حرارتی است
TGP بالاتر همیشه بهتر است خنک‌کننده و بهره‌وری معماری نیز اهمیت دارند
دمای پایین همیشه نشان‌دهنده عملکرد بهتر است ممکن است GPU توسط Power Limit محدود شده باشد
استفاده ۱۰۰ درصد یعنی حداکثر توان نوع واحدهای فعال و Workload توان را تعیین می‌کند
اورکلاک همیشه سرعت را افزایش می‌دهد محدودیت توان و دما ممکن است نتیجه را خنثی کند
Undervolting همیشه بدون خطر است ولتاژ بسیار پایین می‌تواند ناپایداری ایجاد کند
آداپتور با وات مشابه حتماً مناسب است ولتاژ، جریان، کانکتور و شناسایی سازنده مهم‌اند
تست چندثانیه‌ای برای لپ‌تاپ استوک کافی است اشباع حرارتی ممکن است بعداً ظاهر شود
فقط دمای Core باید بررسی شود Hotspot، VRAM و VRM نیز مهم هستند

سؤالات متداول درباره فرکانس، توان و دمای GPU

فرکانس GPU چیست؟

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

آیا فرکانس بیشتر همیشه به معنی عملکرد بهتر است؟

خیر. معماری، تعداد هسته‌ها، پهنای باند
حافظه، Cache، Power Limit و نوع بار کاری
نیز بر عملکرد اثر دارند.

تفاوت Base Clock و Boost Clock چیست؟

Base Clock فرکانس مرجع پایه است، درحالی‌که
Boost Clock فرکانسی پویا است که GPU در صورت
مناسب‌بودن دما، توان و ولتاژ به آن می‌رسد.

آیا GPU همیشه با Boost Clock اعلام‌شده کار می‌کند؟

خیر. فرکانس واقعی به دما، محدودیت توان،
ولتاژ، نوع بار کاری، خنک‌کننده و تنظیمات
سازنده بستگی دارد.

Sustained Clock چیست؟

Sustained Clock فرکانسی است که GPU می‌تواند
در یک بار کاری طولانی بدون افت شدید حفظ کند.
این معیار برای رندر، هوش مصنوعی و شبیه‌سازی
بسیار مهم است.

Effective Clock چه تفاوتی با Clock معمولی دارد؟

Clock معمولی نقطه فرکانسی انتخاب‌شده را نشان
می‌دهد، اما Effective Clock میزان فعالیت
واقعی هسته را با درنظرگرفتن توقف‌ها و چرخه‌های
بدون کار مفید منعکس می‌کند.

Memory Clock چیست؟

Memory Clock فرکانس کاری حافظه گرافیکی است
و همراه با نوع حافظه و عرض باس، پهنای باند
VRAM را تعیین می‌کند.

تفاوت Clock واقعی حافظه و نرخ مؤثر چیست؟

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

آیا Memory Clock بالاتر همیشه پهنای باند بیشتری دارد؟

فقط در صورت ثابت‌بودن عرض باس و نوع حافظه.
کارت دارای حافظه سریع‌تر اما باس باریک‌تر
ممکن است پهنای باند کمتری داشته باشد.

ولتاژ GPU چه نقشی دارد؟

ولتاژ انرژی لازم برای تغییر وضعیت
ترانزیستورها را فراهم می‌کند. فرکانس‌های
بالاتر معمولاً به ولتاژ بیشتری برای حفظ
پایداری نیاز دارند.

چرا افزایش ولتاژ دمای GPU را بالا می‌برد؟

ولتاژ بیشتر معمولاً توان مصرفی و گرمای
تولیدشده را افزایش می‌دهد و فشار بیشتری
بر تراشه و مدار VRM وارد می‌کند.

منحنی Voltage/Frequency چیست؟

مجموعه‌ای از نقاط ولتاژ و فرکانس است که GPU
بر اساس بار کاری، توان و دما از میان آن‌ها
نقطه مناسب را انتخاب می‌کند.

توان مصرفی GPU شامل چه بخش‌هایی می‌شود؟

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

تفاوت TDP، TGP و TBP چیست؟

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

آیا TDP همان مصرف واقعی برق است؟

لزوماً خیر. TDP اغلب برای طراحی خنک‌کننده
استفاده می‌شود و ممکن است با مصرف لحظه‌ای
یا حداکثر توان واقعی برابر نباشد.

Power Limit چیست؟

Power Limit سقف توانی است که GPU اجازه دارد
در یک بازه مشخص مصرف کند. رسیدن به این سقف
می‌تواند باعث کاهش فرکانس شود.

آیا افزایش Power Limit همیشه عملکرد را بیشتر می‌کند؟

خیر. اگر محدودیت اصلی دما، ولتاژ، حافظه یا
خنک‌کننده باشد، افزایش Power Limit ممکن است
فقط مصرف برق و گرما را بیشتر کند.

کاهش Power Limit چه فایده‌ای دارد؟

می‌تواند دما، صدای فن و مصرف انرژی را کاهش
دهد. در بعضی GPUها افت عملکرد محدود است،
زیرا بخش پایانی منحنی فرکانس بهره‌وری کمی دارد.

Power Throttling چیست؟

زمانی رخ می‌دهد که GPU برای باقی‌ماندن در
محدوده Power Limit، فرکانس یا ولتاژ خود را
کاهش دهد.

Thermal Throttling چیست؟

زمانی رخ می‌دهد که دمای GPU به محدوده
حرارتی تعیین‌شده برسد و کارت برای کنترل
گرما، سرعت خود را کاهش دهد.

چگونه Power Throttling را از Thermal Throttling تشخیص دهیم؟

باید هم‌زمان دما، توان، فرکانس و دلیل
محدودیت ثبت‌شده توسط ابزار مانیتورینگ بررسی
شود. دمای مناسب همراه با افت Clock معمولاً
می‌تواند نشانه محدودیت توان باشد.

Hotspot Temperature چیست؟

بالاترین دمای ثبت‌شده میان حسگرهای داخلی
سطح تراشه GPU است و ممکن است از دمای عمومی
Core بیشتر باشد.

Memory Junction Temperature چیست؟

دمای داخلی یا گرم‌ترین نقطه اندازه‌گیری‌شده
در حافظه گرافیکی است و برای بررسی وضعیت
VRAM اهمیت دارد.

آیا دمای پایین همیشه به معنی عملکرد بهتر است؟

خیر. ممکن است GPU دمای پایینی داشته باشد
اما توسط Power Limit، ولتاژ یا تنظیمات
Firmware محدود شده باشد.

خنک‌کننده بهتر چه اثری بر عملکرد دارد؟

خنک‌کننده بهتر می‌تواند دما را پایین نگه
دارد، Thermal Throttling را کاهش دهد و
فرکانس پایدار بالاتری ایجاد کند.

چرا دو لپ‌تاپ با GPU یکسان عملکرد متفاوتی دارند؟

زیرا TGP، Power Limit، خنک‌کننده، BIOS،
توان آداپتور، مصرف CPU و پروفایل عملکرد
آن‌ها ممکن است متفاوت باشد.

NVIDIA Dynamic Boost چیست؟

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

P-State چیست؟

یک حالت داخلی عملکرد و مصرف انرژی است که
محدوده فرکانس، ولتاژ و فعالیت واحدهای GPU
را مشخص می‌کند.

Clock Gating و Power Gating چه تفاوتی دارند؟

Clock Gating سیگنال Clock را در بخش
بلااستفاده متوقف می‌کند، اما Power Gating
جریان برق آن بخش را نیز تا حد زیادی قطع
می‌کند.

چرا مصرف Idle با چند مانیتور افزایش پیدا می‌کند؟

وضوح بالا، نرخ تازه‌سازی زیاد و چند خروجی
تصویر ممکن است Display Engine و Memory
Clock را فعال‌تر نگه دارند.

Overclocking چیست؟

افزایش فرکانس هسته یا حافظه نسبت به تنظیمات
پیش‌فرض سازنده با هدف افزایش عملکرد است.

نشانه‌های اورکلاک ناپایدار چیست؟

Artifact، Crash، ریست درایور، هنگ سیستم،
افت غیرعادی عملکرد و نتایج محاسباتی اشتباه
از نشانه‌های احتمالی هستند.

آیا نبود Crash به معنی پایداری کامل اورکلاک است؟

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

Undervolting چیست؟

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

آیا Undervolting باعث افت عملکرد می‌شود؟

در تنظیم مناسب ممکن است افت عملکرد بسیار
کم باشد یا حتی به دلیل حفظ بهتر Sustained
Clock، عملکرد پایدار بهبود پیدا کند.

تفاوت Undervolting و کاهش Power Limit چیست؟

Undervolting ولتاژ لازم برای یک فرکانس را
کاهش می‌دهد، اما کاهش Power Limit سقف توان
کلی قابل‌مصرف GPU را پایین می‌آورد.

Performance per Watt چیست؟

مقدار عملکردی است که GPU در برابر هر وات
مصرف انرژی ارائه می‌دهد و یکی از معیارهای
مهم بهره‌وری معماری است.

آیا کارت‌های حرفه‌ای همیشه توان کمتری مصرف می‌کنند؟

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

چرا کارت‌های Quadro قدیمی هنوز برای بعضی کارها مناسب‌اند؟

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

هنگام خرید لپ‌تاپ استوک چه چیزی مهم‌تر از Boost Clock است؟

فرکانس پایدار زیر بار، دما، Power Limit،
سلامت خنک‌کننده، آداپتور و عملکرد هم‌زمان
CPU و GPU اهمیت بیشتری دارند.

آداپتور غیراصلی چه اثری بر GPU لپ‌تاپ دارد؟

ممکن است توان کافی تأمین نکند یا توسط BIOS
شناسایی نشود و باعث محدودشدن فرکانس CPU و
GPU شود.


فصل موتورهای ویدئویی GPU

موتورهای Encode و Decode در کارت گرافیک؛
NVENC، NVDEC، VCN، Quick Sync و Video Core Next

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

فهرست فصل موتورهای Encode و Decode در GPU
بخش عنوان موضوع اصلی سطح مطالعه
۱
موتور ویدئویی GPU چیست؟
آشنایی با واحدهای اختصاصی پردازش ویدئو
مقدماتی
۲
تفاوت Encode و Decode
رمزگذاری و رمزگشایی فایل‌های ویدئویی
مقدماتی
۳
پردازش سخت‌افزاری و نرم‌افزاری
مقایسه موتور اختصاصی GPU با CPU و Shader
مقدماتی
۴
کدک و Container چیست؟
تفاوت Codec، Format و Container
مقدماتی
۵
H.264 یا AVC
رایج‌ترین کدک ویدئویی و پشتیبانی GPU
مقدماتی
۶
H.265 یا HEVC
فشرده‌سازی پیشرفته‌تر و نیاز سخت‌افزاری
متوسط
۷
کدک AV1
Decode و Encode نسل جدید AV1
متوسط
۸
کدک VP9
پخش ویدئوهای وب و سرویس‌های آنلاین
متوسط
۹
Chroma Subsampling
تفاوت 4:2:0، 4:2:2 و 4:4:4
پیشرفته
۱۰
عمق رنگ ۸، ۱۰ و ۱۲ بیت
دقت رنگ، HDR و پشتیبانی سخت‌افزاری
متوسط
۱۱
وضوح و Frame Rate
پشتیبانی 1080p، 4K، 8K و نرخ فریم بالا
متوسط
۱۲
NVIDIA NVENC
موتور رمزگذاری سخت‌افزاری NVIDIA
متوسط
۱۳
NVIDIA NVDEC
موتور رمزگشایی ویدئویی NVIDIA
متوسط
۱۴
AMD VCN
موتور Video Core Next در Radeon و Radeon Pro
متوسط
۱۵
Intel Quick Sync Video
پردازش ویدئو در گرافیک مجتمع و Arc
متوسط
۱۶
مقایسه کیفیت Encoderها
کیفیت تصویر، Bitrate و نسل موتور ویدئو
پیشرفته
۱۷
Bitrate و Rate Control
CBR، VBR، CQ، CQP و کنترل کیفیت
پیشرفته
۱۸
Preset، Profile و Level
تنظیم سرعت، کیفیت و سازگاری خروجی
پیشرفته
۱۹
B-Frame و Reference Frame
ساختار فریم و افزایش راندمان فشرده‌سازی
پیشرفته
۲۰
Sessionهای هم‌زمان Encode و Decode
پردازش چند جریان ویدئویی به‌صورت هم‌زمان
پیشرفته
۲۱
نقش VRAM در پردازش ویدئو
Frame Buffer، Cache و نگهداری پروژه
متوسط
۲۲
اثر موتور ویدئو بر مصرف CPU
کاهش بار پردازنده مرکزی هنگام پخش و Export
مقدماتی
۲۳
مصرف انرژی موتور ویدئو
تفاوت توان Dedicated Engine و Shader
متوسط
۲۴
Premiere Pro
Playback، Export و Hardware Encoding
مقدماتی
۲۵
DaVinci Resolve
Decode، Effects، Color و Deliver
متوسط
۲۶
OBS و استریم
رمزگذاری زنده با فشار کمتر بر CPU
مقدماتی
۲۷
HandBrake و تبدیل ویدئو
Transcoding سخت‌افزاری و نرم‌افزاری
متوسط
۲۸
پخش ویدئو در مرورگر
YouTube، Streaming و Hardware Acceleration
مقدماتی
۲۹
موتور ویدئو در Quadro و کارت‌های حرفه‌ای
پایداری، چند نمایشگر و تولید محتوای حرفه‌ای
متوسط
۳۰
موتور ویدئو در GPUهای قدیمی
Quadro K، M، P، GTX و Radeon قدیمی
متوسط
۳۱
راهنمای خرید برای تدوین و استریم
انتخاب GPU بر اساس Codec، VRAM و نرم‌افزار
مقدماتی
۳۲
اشتباهات رایج
خطاهای متداول در تشخیص پشتیبانی و کیفیت
مقدماتی
۳۳
خلاصه فصل
مرور نکات مهم موتورهای ویدئویی
مقدماتی
۳۴
سؤالات متداول
پاسخ به پرسش‌های رایج کاربران
مقدماتی

موتور ویدئویی GPU چیست؟

موتور ویدئویی بخشی اختصاصی در پردازنده گرافیکی
است که برای رمزگذاری، رمزگشایی و پردازش برخی
فرمت‌های ویدئویی طراحی شده است.

این واحدها برخلاف CUDA Core، Stream Processor،
Xe Core یا Shader Core، برای اجرای محاسبات عمومی
ساخته نشده‌اند و وظایف مشخص مربوط به ویدئو را با
مدارهای ثابت و بهینه انجام می‌دهند.

استفاده از موتور اختصاصی می‌تواند فشار واردشده
بر CPU و هسته‌های عمومی GPU را کاهش دهد و در
پخش، ضبط، استریم و تبدیل ویدئو مصرف انرژی کمتری
ایجاد کند.

مسیر پردازش ویدئو در GPU

فایل فشرده ویدئویی ابتدا از حافظه سیستم یا فضای
ذخیره‌سازی خوانده می‌شود و سپس برای Decode به
موتور ویدئویی ارسال می‌شود.

فریم‌های رمزگشایی‌شده ممکن است داخل VRAM قرار
بگیرند تا Shaderها، موتور نمایشگر یا نرم‌افزار
تدوین آن‌ها را پردازش کنند.

در مرحله خروجی نیز فریم پردازش‌شده می‌تواند به
موتور Encode فرستاده شود تا به یک جریان ویدئویی
فشرده تبدیل شود.

اجزای اصلی زیرسیستم ویدئویی GPU

واحدهای مؤثر در پردازش و نمایش ویدئو
واحد وظیفه اصلی نمونه کاربرد
Decode Engine تبدیل جریان فشرده به فریم قابل پردازش پخش فیلم و Timeline تدوین
Encode Engine تبدیل فریم خام یا پردازش‌شده به فایل فشرده Export، ضبط صفحه و استریم
Video Processing Unit Scaling، Deinterlacing و تبدیل رنگ پخش و تبدیل ویدئو
Shader Core اجرای افکت، تصحیح رنگ و پردازش عمومی تصویر Premiere Pro و DaVinci Resolve
Display Engine ارسال تصویر نهایی به نمایشگر مانیتور، تلویزیون و خروجی HDR
VRAM نگهداری Frame Buffer و داده‌های پروژه ویدئوی 4K، 8K و پروژه چندلایه

تفاوت Encode و Decode چیست؟

Decode فرایند بازکردن داده فشرده ویدئو و تبدیل آن
به فریم‌هایی است که سیستم بتواند نمایش یا پردازش
کند.

Encode فرایند معکوس است؛ یعنی فریم‌های خام یا
پردازش‌شده با استفاده از یک کدک به جریان فشرده
ویدئویی تبدیل می‌شوند.

مقایسه رمزگذاری و رمزگشایی ویدئو
معیار Decode Encode
ورودی جریان ویدئویی فشرده فریم خام یا پردازش‌شده
خروجی فریم قابل نمایش یا ویرایش فایل یا Stream فشرده
کاربرد پخش، Preview و Timeline Export، ضبط و استریم
فشار اصلی بازسازی فریم از داده فشرده تحلیل فریم و کاهش حجم
حساسیت به کیفیت باید تصویر کدگذاری‌شده را صحیح بازسازی کند میان کیفیت، حجم و سرعت تعادل ایجاد می‌کند
نمونه پخش فایل H.264 خروجی H.264 برای YouTube

Transcoding چیست؟

Transcoding به تبدیل یک فایل ویدئویی از یک کدک،
رزولوشن، Bitrate یا فرمت به حالت دیگر گفته می‌شود.

این فرایند معمولاً شامل Decode فایل ورودی،
پردازش فریم‌ها و سپس Encode خروجی است.

برای مثال، تبدیل یک فایل 4K HEVC به ویدئوی 1080p
H.264 شامل رمزگشایی HEVC، کاهش وضوح و رمزگذاری
مجدد با H.264 است.

تفاوت پردازش سخت‌افزاری و نرم‌افزاری ویدئو

در پردازش نرم‌افزاری، CPU یا هسته‌های عمومی GPU
بیشتر مراحل Encode و Decode را با اجرای دستورهای
قابل برنامه‌ریزی انجام می‌دهند.

در پردازش سخت‌افزاری، مدار اختصاصی ویدئو وظیفه
مشخصی را با مصرف انرژی و تأخیر کمتر انجام می‌دهد.

موتور سخت‌افزاری معمولاً سریع‌تر و کم‌مصرف‌تر است،
اما کیفیت، قابلیت تنظیم و پشتیبانی کدک آن به نسل
سخت‌افزار وابسته است.

مقایسه پردازش سخت‌افزاری و نرم‌افزاری ویدئو
معیار Hardware Processing Software Processing
واحد پردازشی موتور اختصاصی Encode یا Decode CPU یا واحدهای عمومی Compute
سرعت معمولاً بسیار بالا وابسته به توان CPU و تنظیمات
مصرف انرژی معمولاً کمتر معمولاً بیشتر
انعطاف تنظیمات محدود به قابلیت موتور معمولاً بیشتر
کیفیت در Bitrate بسیار پایین وابسته به نسل Encoder در تنظیمات کند می‌تواند بهتر باشد
فشار بر CPU کمتر بیشتر
کاربرد مناسب استریم، Preview و Export سریع آرشیو با کیفیت بالا و تنظیمات تخصصی

تفاوت موتور اختصاصی ویدئو با Shader Core

Shader Coreها واحدهای عمومی‌تر و قابل برنامه‌ریزی
هستند و می‌توانند افکت، Scaling، Denoising،
Color Grading، AI Upscaling و بسیاری از عملیات
تصویری را انجام دهند.

موتور اختصاصی ویدئو برای مجموعه محدودی از عملیات
Codec طراحی شده و همان کار را با بازده بیشتری
انجام می‌دهد.

در یک پروژه تدوین، هر دو نوع واحد ممکن است هم‌زمان
فعال باشند؛ موتور Decode فایل را باز می‌کند،
Shaderها افکت‌ها را اجرا می‌کنند و موتور Encode
خروجی را فشرده می‌کند.

تقسیم وظایف میان موتور ویدئو و Shaderها
وظیفه واحد مناسب‌تر توضیح
H.264 Decode Decode Engine بازکردن جریان فشرده
Color Grading Shader یا Compute پردازش محاسباتی پیکسل‌ها
Noise Reduction Shader، Compute یا AI Unit تحلیل مکانی و زمانی فریم‌ها
H.265 Encode Encode Engine تولید جریان فشرده خروجی
AI Upscaling Matrix Unit یا Shader بازسازی تصویر با مدل هوش مصنوعی
نمایش تصویر Display Engine ارسال فریم به مانیتور

چرا نسل GPU در پردازش ویدئو مهم است؟

پشتیبانی موتور ویدئویی به نسل معماری وابسته است.
یک GPU قدیمی ممکن است توان سه‌بعدی کافی داشته باشد،
اما فاقد Decode یا Encode سخت‌افزاری یک کدک جدید
مانند HEVC ده‌بیتی یا AV1 باشد.

در این شرایط نرم‌افزار مجبور می‌شود از CPU یا
Shaderها استفاده کند که می‌تواند مصرف انرژی،
دما و فشار سیستم را افزایش دهد.

این موضوع در لپ‌تاپ‌های قدیمی مجهز به Quadro K،
Quadro M، GTX 800M، GTX 900M و گرافیک‌های مجتمع
قدیمی اهمیت زیادی دارد.

Codec و Container چیست؟

در فایل‌های ویدئویی، Codec و Container دو مفهوم
متفاوت هستند که اغلب با یکدیگر اشتباه گرفته می‌شوند.

Codec روشی است که برای فشرده‌سازی و بازسازی داده‌های
صوتی یا تصویری استفاده می‌شود.

Container قالبی است که تصویر، صدا، زیرنویس،
Metadata و سایر داده‌ها را در یک فایل واحد نگهداری
می‌کند.

تفاوت Codec و Container

مقایسه Codec و Container در فایل‌های ویدئویی
معیار Codec Container
وظیفه فشرده‌سازی و بازسازی تصویر یا صدا نگهداری چند جریان رسانه‌ای در یک فایل
نمونه H.264، HEVC، AV1 و VP9 MP4، MKV، MOV و WebM
اثر بر حجم فایل بسیار زیاد معمولاً محدود
اثر بر کیفیت مستقیم غیرمستقیم
ارتباط با GPU موتور ویدئویی باید Codec را پشتیبانی کند معمولاً توسط نرم‌افزار مدیریت می‌شود
پسوند فایل الزاماً از روی پسوند مشخص نمی‌شود معمولاً پسوند فایل را تعیین می‌کند

Container چه اطلاعاتی را نگهداری می‌کند؟

یک Container می‌تواند علاوه بر جریان تصویر،
چندین Track صوتی، زیرنویس، Chapter، تصویر بندانگشتی
و Metadata را نیز نگهداری کند.

Containerهای رایج ویدئویی

مقایسه قالب‌های متداول فایل ویدئویی
Container پسوند رایج کاربرد ویژگی
MP4 .mp4 وب، موبایل، پخش و انتشار عمومی سازگاری بسیار گسترده
MKV .mkv آرشیو، فیلم و چند Track انعطاف‌پذیری بالا
MOV .mov تدوین و اکوسیستم Apple مناسب Workflowهای حرفه‌ای
WebM .webm پخش ویدئو در وب رایج با VP9، AV1 و Opus
AVI .avi نرم‌افزارها و آرشیوهای قدیمی ساختار قدیمی‌تر و انعطاف کمتر
MPEG-TS .ts پخش زنده و تلویزیون دیجیتال مقاوم‌تر در برابر قطع جریان

آیا دو فایل MP4 می‌توانند Codec متفاوتی داشته باشند؟

بله. پسوند MP4 فقط Container را نشان می‌دهد و
داخل آن می‌توان از Codecهای مختلفی مانند H.264،
HEVC یا AV1 استفاده کرد.

بنابراین ممکن است یک سیستم یک فایل MP4 را به‌راحتی
پخش کند، اما فایل MP4 دیگری را به دلیل Codec،
Bit Depth یا Profile متفاوت نتواند به‌صورت
سخت‌افزاری Decode کند.

نمونه فایل‌هایی با Container یکسان و Codec متفاوت
فایل Container Video Codec وضعیت احتمالی پشتیبانی
File A MP4 H.264 8-bit سازگاری بسیار گسترده
File B MP4 HEVC 10-bit نیازمند سخت‌افزار و نرم‌افزار جدیدتر
File C MP4 AV1 پشتیبانی سخت‌افزاری وابسته به نسل GPU

تفاوت Codecهای Lossy و Lossless

Codecهای Lossy بخشی از اطلاعات تصویر را برای
کاهش بیشتر حجم حذف می‌کنند.

Codecهای Lossless تصویر را به‌گونه‌ای فشرده می‌کنند
که پس از Decode، داده اصلی بدون کاهش اطلاعات
بازسازی شود.

مقایسه فشرده‌سازی با اتلاف و بدون اتلاف
معیار Lossy Lossless
حذف اطلاعات دارد ندارد
حجم فایل کمتر بیشتر
کاربرد استریم، انتشار و مصرف عمومی آرشیو، Master و پردازش تخصصی
نمونه H.264، HEVC، AV1 و VP9 FFV1 و بعضی حالت‌های تخصصی
پشتیبانی موتور سخت‌افزاری گسترده‌تر معمولاً محدودتر

تفاوت فشرده‌سازی Intraframe و Interframe

در فشرده‌سازی Intraframe هر فریم تا حد زیادی مستقل
از فریم‌های دیگر ذخیره می‌شود.

در فشرده‌سازی Interframe، Codec تفاوت میان فریم‌های
متوالی را نیز بررسی می‌کند و برای کاهش حجم از
ارتباط زمانی میان آن‌ها استفاده می‌کند.

مقایسه Codecهای Intraframe و Interframe
معیار Intraframe Interframe
وابستگی فریم‌ها کمتر بیشتر
جست‌وجو در Timeline معمولاً آسان‌تر ممکن است سنگین‌تر باشد
حجم فایل معمولاً بیشتر معمولاً کمتر
کاربرد تدوین و تولید حرفه‌ای انتشار، استریم و آرشیو فشرده
فشار Decode معمولاً قابل‌پیش‌بینی‌تر وابسته به ساختار GOP

پشتیبانی یک Codec به چه عواملی وابسته است؟

مشاهده نام یک Codec در مشخصات GPU به‌تنهایی برای
اطمینان از پشتیبانی کامل کافی نیست.

ممکن است موتور ویدئویی فقط Decode، فقط Encode یا
مجموعه محدودی از Profileها، Bit Depthها و وضوح‌ها
را پشتیبانی کند.

موارد لازم برای بررسی پشتیبانی سخت‌افزاری Codec
مورد پرسش مهم
Encode یا Decode موتور فقط فایل را پخش می‌کند یا خروجی نیز می‌سازد؟
Profile کدام قابلیت‌های Codec پشتیبانی می‌شوند؟
Level حداکثر وضوح، Bitrate و Frame Rate چیست؟
Bit Depth فقط 8-bit یا 10-bit و 12-bit نیز پشتیبانی می‌شود؟
Chroma Subsampling 4:2:0، 4:2:2 یا 4:4:4 قابل پردازش است؟
Resolution حداکثر وضوح قابل Encode یا Decode چقدر است؟
Frame Rate موتور چند فریم در ثانیه را پردازش می‌کند؟
نرم‌افزار برنامه موردنظر از API موتور ویدئو استفاده می‌کند؟
درایور قابلیت در نسخه نصب‌شده درایور فعال است؟

H.264 یا AVC چیست؟

H.264 که با نام AVC یا Advanced Video Coding نیز
شناخته می‌شود، یکی از رایج‌ترین Codecهای ویدئویی
در جهان است.

این Codec در فایل‌های MP4، ضبط دوربین، استریم،
ویدئوهای آموزشی، شبکه‌های اجتماعی، تماس تصویری،
تلویزیون و خروجی نرم‌افزارهای تدوین استفاده می‌شود.

پشتیبانی سخت‌افزاری H.264 در بسیاری از GPUهای
قدیمی و جدید وجود دارد؛ به همین دلیل معمولاً
سازگاری گسترده‌تری نسبت به Codecهای جدیدتر دارد.

H.264 در چه کاربردهایی استفاده می‌شود؟

کاربردهای رایج Codec H.264
کاربرد دلیل استفاده اهمیت شتاب‌دهی سخت‌افزاری
استریم زنده سازگاری گسترده با سرویس‌ها و دستگاه‌ها بسیار زیاد
ضبط صفحه حجم مناسب و پخش آسان زیاد
خروجی تدوین مناسب انتشار عمومی بسیار زیاد
دوربین‌های نظارتی کاهش حجم ذخیره‌سازی زیاد
تماس تصویری تأخیر کم و پشتیبانی گسترده زیاد
ویدئوی آموزشی قابل پخش روی دستگاه‌های قدیمی‌تر متوسط
شبکه‌های اجتماعی سازگاری مناسب با پلتفرم‌های مختلف زیاد

Hardware Decode در H.264

هنگام پخش فایل H.264، موتور Decode می‌تواند بخش
اصلی رمزگشایی جریان ویدئویی را به‌جای CPU انجام
دهد.

این کار مصرف پردازنده مرکزی، دمای سیستم و مصرف
باتری را کاهش می‌دهد و امکان پخش روان‌تر فایل‌های
با وضوح یا نرخ فریم بالاتر را فراهم می‌کند.

اگر Decode سخت‌افزاری در دسترس نباشد، نرم‌افزار
ممکن است از CPU یا Shaderهای GPU استفاده کند.

Hardware Encode در H.264

موتور Encode می‌تواند فریم‌های خام یا پردازش‌شده
را به جریان H.264 تبدیل کند.

این قابلیت در ضبط بازی، استریم زنده، Export سریع،
تبدیل ویدئو و سیستم‌های نظارتی کاربرد دارد.

Encode سخت‌افزاری معمولاً بسیار سریع‌تر و
کم‌مصرف‌تر از Encode نرم‌افزاری روی CPU است؛
اما کیفیت نهایی در Bitrate یکسان به نسل Encoder،
تنظیمات نرم‌افزار و نوع محتوا بستگی دارد.

Profileهای مهم H.264

Profile مجموعه‌ای از قابلیت‌های Codec را مشخص
می‌کند. دستگاه یا موتور ویدئویی ممکن است فقط
بعضی Profileهای H.264 را پشتیبانی کند.

Profileهای متداول H.264
Profile ویژگی عمومی کاربرد رایج
Baseline ساختار ساده‌تر و سازگاری بالا دستگاه‌های قدیمی و ارتباط زنده
Main فشرده‌سازی بهتر از Baseline پخش عمومی و Broadcast
High راندمان و کیفیت بهتر Blu-ray، وب و خروجی باکیفیت
High 10 پشتیبانی از عمق رنگ بیشتر کاربردهای تخصصی
High 4:2:2 اطلاعات رنگی بیشتر تولید حرفه‌ای و Broadcast
High 4:4:4 حفظ کامل‌تر اطلاعات رنگ پردازش و آرشیو تخصصی

Level در H.264 چه چیزی را مشخص می‌کند؟

Level محدودیت‌هایی مانند حداکثر وضوح، نرخ فریم،
Bitrate، اندازه Frame Buffer و پیچیدگی جریان
ویدئویی را تعیین می‌کند.

ممکن است یک GPU Codec و Profile مشخصی را پشتیبانی
کند، اما در وضوح یا Frame Rate بسیار بالا از
محدودیت موتور سخت‌افزاری عبور کند.

مفهوم عمومی Level در H.264
Level پایین‌تر Level بالاتر
وضوح پایین‌تر وضوح بالاتر
نرخ فریم محدودتر نرخ فریم بیشتر
Bitrate پایین‌تر Bitrate بیشتر
نیاز پردازشی کمتر نیاز پردازشی و حافظه بیشتر

عمق رنگ و Chroma در H.264

رایج‌ترین نوع H.264 برای انتشار عمومی و پخش
سخت‌افزاری، ویدئوی ۸ بیت با Chroma Subsampling
برابر 4:2:0 است.

حالت‌های ۱۰ بیت، 4:2:2 و 4:4:4 نیز در استاندارد
وجود دارند، اما پشتیبانی سخت‌افزاری آن‌ها بسیار
محدودتر است.

وضعیت عمومی حالت‌های مختلف H.264
حالت کاربرد سازگاری سخت‌افزاری عمومی
8-bit 4:2:0 انتشار، وب، استریم و پخش عمومی بسیار گسترده
10-bit 4:2:0 کاربردهای تخصصی‌تر محدودتر
8-bit 4:2:2 Broadcast و تدوین محدود
10-bit 4:2:2 تولید حرفه‌ای بسیار محدودتر
4:4:4 حفظ اطلاعات کامل‌تر رنگ وابسته به محصول و نرم‌افزار

GOP در H.264 چیست؟

GOP یا Group of Pictures مجموعه‌ای از فریم‌های
ویدئو است که از فریم‌های مستقل و وابسته تشکیل
می‌شود.

ساختار GOP روی کیفیت، حجم، تأخیر، امکان جابه‌جایی
در Timeline و مقاومت جریان در برابر خطا اثر دارد.

تفاوت I-Frame، P-Frame و B-Frame

مقایسه انواع فریم در H.264
نوع فریم ساختار حجم کاربرد
I-Frame مستقل از سایر فریم‌ها بیشتر شروع GOP و جابه‌جایی سریع
P-Frame وابسته به فریم‌های قبلی کمتر کاهش حجم جریان
B-Frame وابسته به فریم‌های قبلی و بعدی معمولاً کمتر افزایش راندمان فشرده‌سازی

تأخیر Encode در H.264

تنظیمات فشرده‌سازی می‌توانند تأخیر Encode را
افزایش یا کاهش دهند.

استفاده از B-Frameهای بیشتر، Lookahead و تحلیل
پیچیده‌تر معمولاً کیفیت یا راندمان فشرده‌سازی را
بهتر می‌کند، اما تأخیر بیشتری ایجاد می‌کند.

برای استریم زنده، تماس تصویری و Remote Desktop
معمولاً تنظیمات Low-Latency اهمیت بیشتری دارند.

تفاوت تنظیمات کم‌تأخیر و باکیفیت‌تر H.264
معیار Low-Latency High-Quality
تأخیر کمتر بیشتر
تحلیل فریم محدودتر گسترده‌تر
B-Frame کمتر یا غیرفعال بیشتر
کاربرد استریم زنده و تماس تصویری Export و آرشیو

پشتیبانی H.264 در GPUهای قدیمی

H.264 به دلیل قدمت و گسترش زیاد، در بسیاری از
GPUهای قدیمی نیز دارای شتاب‌دهی سخت‌افزاری است.

بااین‌حال، نسل‌های قدیمی‌تر ممکن است در وضوح بالا،
نرخ فریم زیاد، تعداد جریان هم‌زمان یا بعضی
Profileها محدود باشند.

وضعیت عمومی H.264 در چند خانواده قدیمی GPU
خانواده Decode H.264 Encode H.264 نکته
Quadro K Series معمولاً موجود وابسته به مدل و تراشه بررسی نسل دقیق موتور ویدئو ضروری است
Quadro M Series گسترده‌تر در بسیاری مدل‌ها موجود محدودیت کیفیت و قابلیت به نسل وابسته است
Quadro P Series مناسب‌تر برای وضوح و نرخ فریم بالاتر معمولاً پیشرفته‌تر مناسب‌تر برای تدوین و استریم
GTX 800M و 900M معمولاً قابل استفاده وابسته به تراشه دقیق نام سری به‌تنهایی کافی نیست
Intel HD قدیمی در بسیاری نسل‌ها موجود وابسته به نسل Quick Sync درایور و نرم‌افزار اهمیت زیادی دارند

H.265 یا HEVC چیست؟

H.265 که با نام HEVC یا
High Efficiency Video Coding
نیز شناخته می‌شود، نسل بعدی H.264 است و با هدف
کاهش بیشتر حجم فایل ویدئویی بدون افت محسوس کیفیت
توسعه یافته است.

این Codec برای ویدئوهای 4K، 8K، HDR، دوربین‌های
حرفه‌ای، فیلم‌های با Bitrate بالا و سرویس‌های
استریم مدرن بسیار رایج است.

الگوریتم‌های پیچیده‌تر HEVC باعث می‌شوند عملیات
Encode و Decode نسبت به H.264 به توان پردازشی
بیشتری نیاز داشته باشد؛ به همین دلیل وجود موتور
سخت‌افزاری اختصاصی اهمیت بیشتری پیدا می‌کند.

تفاوت H.264 و H.265

مقایسه H.264 و HEVC
معیار H.264 H.265 (HEVC)
سال معرفی قدیمی‌تر جدیدتر
راندمان فشرده‌سازی خوب بهتر
حجم فایل بیشتر کمتر
نیاز پردازشی کمتر بیشتر
مناسب برای استفاده عمومی و استریم 4K، HDR و آرشیو باکیفیت
اهمیت Decode سخت‌افزاری زیاد بسیار زیاد
سازگاری دستگاه‌ها بسیار گسترده وابسته به نسل سخت‌افزار

چرا HEVC پردازش سنگین‌تری دارد؟

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

این قابلیت‌ها باعث می‌شوند حجم فایل کاهش یابد،
اما Decode و Encode به محاسبات بیشتری نیاز داشته
باشند.

به همین دلیل لپ‌تاپ‌های قدیمی که موتور HEVC
ندارند، ممکن است هنگام پخش ویدئوهای 4K HEVC
مصرف CPU بسیار بالایی داشته باشند.

اهمیت Hardware Acceleration در HEVC

وجود موتور Decode سخت‌افزاری در HEVC اهمیت
بسیار بیشتری نسبت به H.264 دارد؛ زیرا Decode
نرم‌افزاری فایل‌های 4K یا HDR می‌تواند فشار
زیادی بر CPU وارد کند.

همچنین هنگام Export ویدئو، استفاده از موتور
Encode اختصاصی می‌تواند زمان خروجی گرفتن را
به‌طور محسوسی کاهش دهد.

قابلیت‌های مهم HEVC

ویژگی‌های مهم استاندارد HEVC
قابلیت اهمیت کاربرد
فشرده‌سازی بهتر کاهش حجم فایل آرشیو و استریم
پشتیبانی بهتر از 4K و 8K وضوح‌های بسیار بالا فیلم و تولید محتوا
HDR نمایش دامنه دینامیکی بیشتر تلویزیون و مانیتورهای HDR
10-bit و 12-bit افزایش دقت رنگ تدوین حرفه‌ای
Chromaهای مختلف انعطاف بیشتر در تولید محتوا Broadcast و Cinema
Bitrate پایین‌تر صرفه‌جویی در فضای ذخیره‌سازی سرویس‌های آنلاین

Profileهای مهم HEVC

مانند H.264، استاندارد HEVC نیز دارای Profileهای
مختلفی است و همه GPUها الزاماً از تمام آن‌ها
پشتیبانی نمی‌کنند.

Profileهای رایج HEVC
Profile ویژگی کاربرد
Main 8-bit استفاده عمومی
Main 10 10-bit HDR و تولید محتوا
Main Still Picture تصویر ثابت کاربردهای خاص

Level در HEVC چه چیزی را مشخص می‌کند؟

Level در HEVC محدودیت‌های فنی جریان ویدئویی را
مشخص می‌کند؛ از جمله حداکثر وضوح، نرخ فریم،
Bitrate، پیچیدگی Decode و ظرفیت پردازش موردنیاز.

ممکن است یک GPU از Codec HEVC و حتی Profile
موردنظر پشتیبانی کند، اما نتواند یک فایل با Level
بسیار بالا، وضوح 8K یا نرخ فریم سنگین را به‌صورت
سخت‌افزاری پردازش کند.

نقش Level در جریان HEVC
مشخصه Level پایین‌تر Level بالاتر
وضوح تصویر محدودتر بالاتر
نرخ فریم کمتر بیشتر
Bitrate پایین‌تر بالاتر
نیاز به حافظه کمتر بیشتر
فشار پردازشی سبک‌تر سنگین‌تر

تفاوت Main Tier و High Tier در HEVC

HEVC علاوه بر Profile و Level، از مفهوم Tier نیز
استفاده می‌کند.

Tier بیشتر به محدوده Bitrate مجاز مربوط است و
مشخص می‌کند جریان ویدئویی برای کاربرد عمومی یا
کاربردهای حرفه‌ای با Bitrate بالاتر طراحی شده است.

مقایسه Main Tier و High Tier
معیار Main Tier High Tier
Bitrate مجاز پایین‌تر بالاتر
کاربرد پخش و انتشار عمومی Broadcast و تولید حرفه‌ای
نیاز ذخیره‌سازی کمتر بیشتر
سازگاری سخت‌افزاری گسترده‌تر محدودتر و وابسته به دستگاه

پشتیبانی HEVC از عمق رنگ ۸، ۱۰ و ۱۲ بیت

HEVC می‌تواند ویدئو را با Bit Depthهای مختلف
ذخیره کند. افزایش عمق رنگ تعداد سطوح قابل نمایش
در هر کانال رنگی را بیشتر می‌کند.

ویدئوی ۱۰ بیت برای HDR، Color Grading و کاهش
Banding بسیار رایج است؛ اما Decode و Encode
سخت‌افزاری آن به نسل GPU وابسته است.

مقایسه عمق رنگ‌های مختلف در HEVC
عمق رنگ ویژگی کاربرد پشتیبانی سخت‌افزاری عمومی
8-bit سازگاری گسترده پخش و انتشار عمومی گسترده
10-bit رنگ دقیق‌تر و Banding کمتر HDR و تدوین حرفه‌ای وابسته به نسل جدیدتر GPU
12-bit دقت بسیار بالای رنگ Cinema و Workflow تخصصی محدودتر

پشتیبانی HEVC از 4:2:0، 4:2:2 و 4:4:4

بیشتر فایل‌های مصرف عمومی HEVC با Chroma
Subsampling برابر 4:2:0 تولید می‌شوند.

حالت‌های 4:2:2 و 4:4:4 اطلاعات رنگی بیشتری حفظ
می‌کنند و برای تدوین، Broadcast، Keying و تولید
حرفه‌ای مناسب‌تر هستند.

بااین‌حال، پشتیبانی سخت‌افزاری این حالت‌ها به‌ویژه
در Encode بسیار محدودتر از 4:2:0 است.

وضعیت عمومی Chroma در HEVC
Chroma میزان اطلاعات رنگ کاربرد پشتیبانی عمومی GPU
4:2:0 کمتر وب، استریم، فیلم و پخش عمومی بسیار گسترده
4:2:2 بیشتر دوربین حرفه‌ای و Broadcast محدودتر
4:4:4 کامل‌تر VFX، Keying و Mastering وابسته به GPU و نرم‌افزار

نقش HEVC در ویدئوی HDR

HEVC یکی از Codecهای اصلی برای ذخیره و انتشار
محتوای HDR است؛ زیرا از عمق رنگ بالاتر و Metadata
مرتبط با دامنه دینامیکی پشتیبانی می‌کند.

برای نمایش صحیح HDR، فقط Decode شدن ویدئو کافی
نیست. سیستم‌عامل، نرم‌افزار، درایور، Display
Engine، کابل و نمایشگر نیز باید از مسیر HDR
پشتیبانی کنند.

تفاوت پشتیبانی Decode و Encode در HEVC

معمولاً پشتیبانی سخت‌افزاری Decode یک Codec زودتر
و گسترده‌تر از Encode آن وارد GPUها می‌شود.

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

مقایسه پشتیبانی سخت‌افزاری Decode و Encode HEVC
معیار HEVC Decode HEVC Encode
ورود به سخت‌افزار معمولاً زودتر معمولاً دیرتر
کاربرد پخش، Preview و Timeline Export، ضبط و Transcoding
نیاز به کیفیت تصمیم‌گیری کمتر بیشتر
پشتیبانی Profileهای حرفه‌ای محدود محدودتر
اهمیت نسل Encoder متوسط بسیار زیاد

اگر GPU از HEVC پشتیبانی نکند چه می‌شود؟

نرم‌افزار می‌تواند پردازش را به CPU یا Shaderهای
عمومی GPU منتقل کند.

این روش ممکن است برای فایل‌های سبک قابل‌قبول باشد،
اما در ویدئوهای 4K، 10-bit، HDR یا نرخ فریم بالا
فشار زیادی بر سیستم وارد می‌کند.

پیامدهای نبود شتاب‌دهی سخت‌افزاری HEVC
بخش پیامد احتمالی
CPU Usage افزایش شدید
مصرف انرژی بیشتر
دما و صدای فن افزایش
پخش ویدئو احتمال افت فریم
Timeline تدوین Scrubbing و Preview ضعیف‌تر
عمر باتری لپ‌تاپ کاهش

پشتیبانی HEVC در نسل‌های مختلف NVIDIA

قابلیت HEVC در محصولات NVIDIA به نسل دقیق موتور
NVDEC و NVENC وابسته است، نه فقط نام تجاری GeForce
یا Quadro.

بعضی GPUهای قدیمی ممکن است Decode محدود HEVC
داشته باشند، اما از Main 10، Encode یا وضوح‌های
بالاتر پشتیبانی نکنند.

وضعیت کلی HEVC در خانواده‌های NVIDIA
خانواده وضعیت عمومی نکته مهم
Kepler پشتیبانی محدود یا وابسته به مدل بررسی تراشه دقیق ضروری است
Maxwell نسل اول قابلیت‌های محدودتر همه مدل‌ها یکسان نیستند
Maxwell نسل دوم پشتیبانی HEVC گسترده‌تر Main 10 و Encode باید جداگانه بررسی شوند
Pascal مناسب‌تر برای HEVC و 4K پشتیبانی دقیق به تراشه وابسته است
Turing و جدیدتر کیفیت و قابلیت بهتر Encoder مناسب‌تر برای تدوین و استریم

پشتیبانی HEVC در AMD و Intel

AMD و Intel نیز در نسل‌های مختلف، قابلیت‌های HEVC
متفاوتی ارائه کرده‌اند.

در محصولات AMD باید نسل UVD، VCE یا VCN و در
محصولات Intel باید نسل Quick Sync و Media Engine
بررسی شود.

نکات بررسی HEVC در AMD و Intel
سازنده موتور مرتبط موارد قابل بررسی
AMD قدیمی UVD و VCE Decode، Encode و Bit Depth
AMD جدیدتر VCN HEVC، HDR و Sessionهای هم‌زمان
Intel قدیمی Quick Sync نسل‌های اولیه احتمال Decode محدود یا Hybrid
Intel جدیدتر Media Engine و Quick Sync Main 10، 4K و Encode سریع‌تر
Intel Arc Xe Media Engine HEVC و Codecهای جدیدتر

HEVC در تدوین و تولید حرفه‌ای

دوربین‌ها و تلفن‌های جدید ممکن است ویدئو را با
HEVC ده‌بیتی، HDR یا 4:2:2 ضبط کنند.

اگر موتور ویدئویی GPU این حالت دقیق را پشتیبانی
نکند، Timeline ممکن است کند شود؛ حتی اگر کارت
گرافیک قدرت سه‌بعدی بالایی داشته باشد.

در چنین شرایطی ساخت Proxy، Transcode به Codec
تدوینی یا استفاده از CPU قدرتمندتر می‌تواند
Workflow را روان‌تر کند.

AV1 چیست؟

AV1 یک Codec ویدئویی مدرن و با راندمان فشرده‌سازی
بالا است که برای پخش آنلاین، استریم، ویدئوهای
با وضوح بالا و کاهش مصرف پهنای باند طراحی شده است.

این Codec می‌تواند در Bitrate مشابه، کیفیت بهتری
نسبت به Codecهای قدیمی‌تر ارائه دهد یا برای کیفیت
یکسان، حجم فایل و پهنای باند کمتری مصرف کند.

پیچیدگی بالاتر AV1 باعث می‌شود Decode و به‌ویژه
Encode نرم‌افزاری آن سنگین باشد؛ بنابراین وجود
موتور سخت‌افزاری اختصاصی اهمیت زیادی دارد.

AV1 در چه کاربردهایی استفاده می‌شود؟

کاربردهای رایج AV1
کاربرد مزیت AV1 اهمیت شتاب‌دهی سخت‌افزاری
استریم ویدئوی آنلاین کاهش مصرف پهنای باند بسیار زیاد
ویدئوی 4K و 8K فشرده‌سازی بهتر فایل‌های حجیم بسیار زیاد
استریم زنده کیفیت بهتر در Bitrate محدود بسیار زیاد
تماس تصویری کیفیت مناسب در اینترنت ضعیف‌تر زیاد
ضبط ویدئو کاهش فضای ذخیره‌سازی زیاد
آرشیو ویدئو کاهش حجم مجموعه‌های بزرگ متوسط تا زیاد
پخش در مرورگر کاهش حجم داده دریافتی بسیار زیاد

مقایسه AV1 با H.264 و HEVC

مقایسه عمومی H.264، HEVC و AV1
معیار H.264 HEVC AV1
سازگاری بسیار گسترده گسترده در دستگاه‌های جدیدتر وابسته‌تر به نسل جدید سخت‌افزار
راندمان فشرده‌سازی خوب بهتر بسیار بالا
پیچیدگی Decode کمتر بیشتر زیاد
پیچیدگی Encode متوسط زیاد بسیار زیاد
مناسب برای انتشار عمومی و سازگاری بالا 4K، HDR و آرشیو استریم مدرن و پهنای باند محدود
نیاز به موتور سخت‌افزاری مفید بسیار مهم بسیار مهم

Hardware Decode در AV1

Decode سخت‌افزاری AV1 به موتور اختصاصی GPU اجازه
می‌دهد جریان فشرده را بدون فشار سنگین بر CPU به
فریم‌های قابل نمایش تبدیل کند.

این قابلیت برای پخش ویدئوی 4K، نرخ فریم بالا،
استریم آنلاین و افزایش عمر باتری لپ‌تاپ اهمیت
زیادی دارد.

در نبود AV1 Hardware Decode، مرورگر یا نرم‌افزار
ممکن است پردازش را به CPU منتقل کند و باعث افزایش
مصرف، دما و احتمال افت فریم شود.

Hardware Encode در AV1

AV1 Hardware Encode امکان تبدیل فریم‌های خام یا
پردازش‌شده به جریان AV1 را با استفاده از موتور
اختصاصی GPU فراهم می‌کند.

این قابلیت برای استریم، ضبط بازی، تولید محتوای
آنلاین و تبدیل سریع ویدئو بسیار مهم است؛ زیرا
Encode نرم‌افزاری AV1 می‌تواند پردازش بسیار سنگینی
داشته باشد.

کیفیت Encoder سخت‌افزاری به نسل موتور، تنظیمات
Bitrate، Preset، تعداد Passها و نوع محتوای تصویر
وابسته است.

Profileهای AV1

Profile در AV1 مشخص می‌کند جریان ویدئویی از چه
عمق رنگ، Chroma Subsampling و مجموعه قابلیت‌هایی
استفاده می‌کند.

Profileهای اصلی AV1
Profile ویژگی عمومی کاربرد
Main Profile حالت رایج برای محتوای مصرف عمومی وب، استریم و پخش عمومی
High Profile پشتیبانی از اطلاعات رنگی بیشتر کاربردهای تصویری پیشرفته‌تر
Professional Profile عمق رنگ و Chroma حرفه‌ای‌تر تولید، آرشیو و Workflow تخصصی

عمق رنگ در AV1

AV1 می‌تواند از عمق رنگ‌های مختلف برای نمایش
دقیق‌تر طیف رنگ و کاهش Banding استفاده کند.

ویدئوی ۱۰ بیت برای HDR و محتوای با دامنه رنگی
گسترده اهمیت زیادی دارد، اما پشتیبانی سخت‌افزاری
باید برای مدل دقیق GPU بررسی شود.

کاربرد عمق رنگ‌های مختلف در AV1
Bit Depth ویژگی کاربرد وضعیت عمومی پشتیبانی
8-bit سازگاری بیشتر پخش و استریم عمومی گسترده‌تر
10-bit رنگ دقیق‌تر و HDR ویدئوی مدرن و HDR وابسته به نسل GPU
12-bit دقت رنگ بسیار بالا کاربردهای حرفه‌ای محدودتر

Chroma Subsampling در AV1

مانند سایر Codecها، AV1 می‌تواند میزان اطلاعات
رنگی را با روش‌های مختلف Chroma Subsampling ذخیره
کند.

حالت 4:2:0 برای پخش آنلاین و مصرف عمومی رایج‌تر
است؛ درحالی‌که 4:2:2 و 4:4:4 برای کاربردهای
حرفه‌ای و پردازش دقیق رنگ اهمیت بیشتری دارند.

کاربرد حالت‌های Chroma در AV1
Chroma اطلاعات رنگ کاربرد پشتیبانی سخت‌افزاری
4:2:0 کمتر وب، استریم و پخش عمومی رایج‌تر
4:2:2 بیشتر Broadcast و تدوین محدودتر
4:4:4 کامل‌تر VFX، Keying و Mastering وابسته به محصول

Film Grain Synthesis در AV1

دانه‌های فیلم یا Film Grain می‌توانند فشرده‌سازی
ویدئو را دشوار کنند؛ زیرا تغییرات ریز و تصادفی
تصویر به Bitrate زیادی نیاز دارند.

AV1 می‌تواند بخشی از Grain را پیش از Encode حذف
کند و اطلاعات لازم برای بازسازی آن را جداگانه
ذخیره کند.

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

AV1 و Screen Content

محتوای صفحه‌نمایش مانند متن، رابط نرم‌افزار،
اسلاید، کدنویسی و Remote Desktop با ویدئوی دوربین
تفاوت دارد.

AV1 دارای ابزارهایی برای فشرده‌سازی بهتر خطوط
تیز، متن و نواحی با رنگ یکنواخت است.

این ویژگی می‌تواند برای ضبط آموزش، استریم دسکتاپ،
جلسه آنلاین و نرم‌افزارهای Remote Work مفید باشد.

Encode نرم‌افزاری AV1

Encode نرم‌افزاری AV1 می‌تواند کیفیت و انعطاف
زیادی ارائه دهد، اما در Presetهای باکیفیت بسیار
پردازش‌بر است.

سرعت خروجی به تعداد هسته‌های CPU، نوع Encoder،
Resolution، Preset، Bitrate و تنظیمات تحلیل
ویدئو وابسته است.

برای آرشیو نهایی ممکن است Encode نرم‌افزاری انتخاب
مناسبی باشد؛ اما برای استریم یا خروجی سریع، موتور
سخت‌افزاری معمولاً کاربردی‌تر است.

مقایسه AV1 Hardware Encode و Software Encode
معیار Hardware Encode Software Encode
سرعت بسیار بالا معمولاً پایین‌تر
مصرف CPU کم زیاد
مصرف انرژی معمولاً کمتر بیشتر
انعطاف تنظیم محدودتر بیشتر
کاربرد استریم، ضبط و Export سریع آرشیو و Encode باکیفیت

چرا نسل GPU برای AV1 اهمیت دارد؟

AV1 در GPUهای قدیمی‌تر معمولاً فاقد Decode یا
Encode سخت‌افزاری است.

ممکن است یک کارت قدیمی در پردازش سه‌بعدی هنوز
عملکرد مناسبی داشته باشد، اما هنگام پخش AV1 فشار
زیادی به CPU وارد کند.

همچنین بعضی نسل‌ها فقط AV1 Decode دارند و پشتیبانی
AV1 Encode در نسل‌های جدیدتر اضافه شده است.

AV1 در GPUها و لپ‌تاپ‌های قدیمی

بسیاری از کارت‌های Quadro K، Quadro M، Quadro P،
GTXهای قدیمی و گرافیک‌های مجتمع نسل قبل، موتور
اختصاصی AV1 ندارند.

در این سیستم‌ها پخش AV1 ممکن است توسط CPU انجام
شود یا نرم‌افزار سرویس پخش، Codec دیگری مانند
H.264 یا VP9 را انتخاب کند.

برای استفاده‌های آموزشی و پخش عمومی، این سیستم‌ها
همچنان قابل استفاده‌اند؛ اما مصرف CPU، توان و
کیفیت پخش AV1 باید بررسی شود.

رفتار احتمالی سیستم فاقد شتاب‌دهی AV1
وضعیت پیامد
Decode توسط CPU افزایش مصرف پردازنده
ویدئوی 4K احتمال افت فریم
لپ‌تاپ با باتری کاهش عمر باتری
مرورگر احتمال انتخاب Codec جایگزین
Export AV1 نیاز به Encode نرم‌افزاری کندتر

VP9 چیست؟

VP9 یک Codec ویدئویی متن‌باز است که برای کاهش حجم
فایل و بهبود کیفیت استریم اینترنتی توسعه یافته است.

این Codec سال‌ها یکی از فرمت‌های اصلی سرویس‌های
پخش آنلاین مانند YouTube بوده و هنوز نیز در بسیاری
از مرورگرها و دستگاه‌ها مورد استفاده قرار می‌گیرد.

VP9 نسبت به H.264 راندمان فشرده‌سازی بهتری دارد،
اما Decode نرم‌افزاری آن سنگین‌تر است و وجود موتور
سخت‌افزاری اختصاصی می‌تواند مصرف CPU را به‌طور
محسوسی کاهش دهد.

چرا VP9 توسعه پیدا کرد؟

با افزایش کیفیت ویدئوهای آنلاین، نیاز به Codecی
با راندمان بهتر از H.264 احساس شد.

VP9 برای کاهش مصرف پهنای باند و هزینه انتقال داده
توسعه یافت و سال‌ها در سرویس‌های پخش آنلاین
محبوب‌ترین گزینه برای ویدئوهای 4K محسوب می‌شد.

امروزه AV1 به‌تدریج جایگزین VP9 می‌شود، اما VP9
همچنان در بسیاری از سیستم‌ها و مرورگرها پشتیبانی
می‌شود.

کاربردهای VP9

مهم‌ترین کاربردهای Codec VP9
کاربرد دلیل استفاده اهمیت Hardware Decode
YouTube کاهش پهنای باند بسیار زیاد
مرورگرها پخش آنلاین زیاد
ویدئوهای 4K حجم کمتر بسیار زیاد
Smart TV استریم اینترنتی زیاد
Android TV کاهش مصرف اینترنت زیاد
آموزش آنلاین کیفیت بهتر در Bitrate پایین متوسط

تفاوت VP9 و H.264

مقایسه VP9 و H.264
معیار H.264 VP9
راندمان فشرده‌سازی خوب بهتر
نیاز پردازشی کمتر بیشتر
حجم فایل بیشتر کمتر
سازگاری بسیار گسترده وابسته به مرورگر و GPU
کاربرد اصلی انتشار عمومی استریم اینترنتی

Hardware Decode در VP9

موتور Decode اختصاصی VP9 می‌تواند ویدئوهای اینترنتی
را بدون فشار زیاد بر CPU پخش کند.

این موضوع مخصوصاً هنگام پخش ویدئوهای 4K، نرخ فریم
بالا یا HDR اهمیت بیشتری پیدا می‌کند.

Hardware Encode در VP9

پشتیبانی Encode سخت‌افزاری VP9 نسبت به Decode آن
محدودتر است و در همه GPUها وجود ندارد.

هنگام تولید محتوا باید مشخص شود GPU علاوه بر Decode،
امکان Encode VP9 را نیز ارائه می‌دهد یا خیر.

عمق رنگ در VP9

VP9 علاوه بر ویدئوی ۸ بیت، از عمق رنگ ۱۰ و ۱۲ بیت
نیز پشتیبانی می‌کند و می‌تواند برای محتوای HDR نیز
مورد استفاده قرار گیرد.

Bit Depthهای رایج در VP9
Bit Depth کاربرد وضعیت عمومی
8-bit پخش عمومی بسیار رایج
10-bit HDR وابسته به GPU
12-bit کاربردهای تخصصی محدود

پشتیبانی VP9 در نسل‌های مختلف GPU

پشتیبانی VP9 به نسل موتور ویدئویی GPU وابسته است،
نه صرفاً نام کارت گرافیک.

بسیاری از GPUهای قدیمی Decode سخت‌افزاری VP9
ندارند و هنگام پخش ویدئوهای آنلاین، CPU بار اصلی
پردازش را بر عهده می‌گیرد.

وضعیت کلی VP9 در نسل‌های مختلف GPU
نسل GPU وضعیت عمومی نکته
نسل‌های قدیمی معمولاً بدون Decode اختصاصی وابسته به CPU
نسل‌های میانی Decode در برخی مدل‌ها بررسی دقیق تراشه لازم است
نسل‌های جدید Decode گسترده‌تر مناسب استریم 4K

VP9 در مرورگرها

هنگام مشاهده ویدئوهای آنلاین، مرورگر بر اساس
قابلیت GPU، Codecهای پشتیبانی‌شده، سیستم‌عامل و
تنظیمات سرویس استریم، ممکن است VP9، AV1 یا H.264
را انتخاب کند.

وجود Decode سخت‌افزاری VP9 باعث کاهش مصرف CPU،
افزایش عمر باتری و پخش روان‌تر ویدئوهای آنلاین
می‌شود.

Bit Depth یا عمق رنگ در ویدئو چیست؟

Bit Depth مشخص می‌کند برای نمایش مقدار روشنایی
یا رنگ هر کانال، چند بیت اطلاعات در اختیار سیستم
قرار دارد.

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

ویدئوهای ۸ بیت برای استفاده عمومی بسیار رایج‌اند،
درحالی‌که ویدئوهای ۱۰ و ۱۲ بیت بیشتر در HDR،
تدوین حرفه‌ای، Color Grading و تولید سینمایی
استفاده می‌شوند.

تفاوت ویدئوی ۸، ۱۰ و ۱۲ بیت

مقایسه عمق رنگ‌های رایج در ویدئو
عمق رنگ سطح هر کانال کاربرد رایج وضعیت پشتیبانی
8-bit 256 سطح وب، استریم و استفاده عمومی بسیار گسترده
10-bit 1024 سطح HDR، تدوین و Color Grading وابسته به Codec و نسل GPU
12-bit 4096 سطح Cinema، Mastering و Workflow تخصصی محدودتر

Bit Depth چگونه تعداد رنگ‌ها را افزایش می‌دهد؟

در تصویر RGB، هر پیکسل معمولاً از سه کانال قرمز،
سبز و آبی تشکیل می‌شود.

افزایش تعداد بیت هر کانال باعث افزایش بسیار زیاد
تعداد ترکیب‌های رنگی قابل نمایش می‌شود.

Color Banding چیست؟

Color Banding زمانی دیده می‌شود که تعداد سطوح
رنگ یا روشنایی برای نمایش یک Gradient نرم کافی
نباشد.

به‌جای تغییر تدریجی رنگ، نوارهای مشخص و جدا از
یکدیگر در آسمان، سایه، مه، دود یا پس‌زمینه‌های
نرم دیده می‌شوند.

افزایش Bit Depth می‌تواند احتمال Banding را کاهش
دهد؛ اما Bitrate پایین، فشرده‌سازی شدید، تنظیمات
نادرست رنگ و نمایشگر ضعیف نیز می‌توانند این مشکل
را ایجاد کنند.

عوامل ایجاد Color Banding
عامل اثر
Bit Depth پایین تعداد محدود سطوح رنگ و روشنایی
Bitrate پایین حذف جزئیات Gradient هنگام فشرده‌سازی
Encode چندباره افزایش خطاهای فشرده‌سازی
Color Space نامناسب تبدیل نادرست دامنه رنگ
نمایشگر ۸ بیت ضعیف نمایش ناتوان Gradientهای نرم

چرا ویدئوی HDR معمولاً ۱۰ بیت است؟

HDR دامنه روشنایی و رنگ بیشتری نسبت به SDR دارد.
برای نمایش این دامنه گسترده، تعداد سطوح رنگی بیشتری
لازم است.

استفاده از ۱۰ بیت باعث می‌شود Gradientهای روشنایی
و رنگ در سایه‌ها و نقاط بسیار روشن نرم‌تر نمایش
داده شوند.

مسیر کامل HDR شامل Codec، موتور Decode، سیستم‌عامل،
نرم‌افزار، Display Engine، اتصال تصویر و نمایشگر
سازگار است.

تفاوت Bit Depth فایل، پردازش و نمایشگر

عمق رنگ فایل ویدئویی، دقت پردازش نرم‌افزار و عمق
رنگ خروجی نمایشگر سه موضوع جداگانه هستند.

ممکن است فایل ۱۰ بیت باشد، اما نمایشگر فقط خروجی
۸ بیت واقعی ارائه دهد.

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

اجزای مختلف مسیر Bit Depth
بخش مفهوم نمونه محدودیت
File Bit Depth عمق رنگ ذخیره‌شده در Codec فایل HEVC ده‌بیتی
Decode Bit Depth توان موتور ویدئو برای بازکردن فایل نبود Decode سخت‌افزاری ۱۰ بیت
Processing Precision دقت داخلی نرم‌افزار و Shader پردازش 16-bit Float یا 32-bit Float
Output Bit Depth عمق رنگ مسیر خروجی GPU خروجی محدود به ۸ بیت
Display Panel عمق رنگ واقعی پنل پنل 8-bit یا 8-bit + FRC

تفاوت نمایشگر ۱۰ بیت واقعی و 8-bit + FRC

پنل ۱۰ بیت واقعی می‌تواند تعداد بیشتری سطح رنگ
را مستقیماً نمایش دهد.

نمایشگر 8-bit + FRC با تغییر سریع میان دو رنگ
نزدیک، سطح رنگ میانی را شبیه‌سازی می‌کند.

FRC برای بسیاری از کاربردهای عمومی نتیجه مناسبی
دارد، اما در Color Grading حساس و Mastering حرفه‌ای،
پنل واقعی ۱۰ بیت قابل‌اعتمادتر است.

مقایسه پنل ۱۰ بیت واقعی و FRC
معیار True 10-bit 8-bit + FRC
تولید رنگ نمایش مستقیم سطوح بیشتر شبیه‌سازی زمانی رنگ‌های میانی
دقت حرفه‌ای بالاتر مناسب بسیاری از کاربردهای عمومی
قیمت معمولاً بیشتر معمولاً اقتصادی‌تر
کاربرد Mastering، Cinema و Color Critical تدوین عمومی، طراحی و مصرف محتوا

پشتیبانی Bit Depth در Codecهای مختلف

وضعیت عمومی عمق رنگ در Codecهای رایج
Codec 8-bit 10-bit 12-bit
H.264 بسیار رایج موجود اما سخت‌افزار محدودتر کاربرد محدود
HEVC رایج بسیار رایج در HDR موجود در Profileهای خاص
VP9 رایج رایج برای HDR وب محدودتر
AV1 رایج مهم برای HDR پشتیبانی تخصصی‌تر
ProRes وابسته به Profile رایج در Workflow حرفه‌ای وابسته به نسخه و Profile

بررسی پشتیبانی سخت‌افزاری ویدئوی ۱۰ بیت

برای اطمینان از پشتیبانی کامل ویدئوی ۱۰ بیت، فقط
وجود نمایشگر یا فایل ۱۰ بیت کافی نیست.

باید Decode، Encode، پردازش، خروجی تصویر و پنل
نمایشگر به‌صورت جداگانه بررسی شوند.

چک‌لیست پشتیبانی ویدئوی ۱۰ بیت
بررسی پرسش اصلی
Codec فایل با H.264، HEVC، VP9 یا AV1 است؟
Decode Engine GPU همان Codec را با عمق ۱۰ بیت Decode می‌کند؟
Encode Engine خروجی سخت‌افزاری ۱۰ بیت پشتیبانی می‌شود؟
Chroma فایل 4:2:0، 4:2:2 یا 4:4:4 است؟
نرم‌افزار برنامه از مسیر ۱۰ بیت GPU استفاده می‌کند؟
اتصال تصویر کابل و درگاه پهنای باند کافی دارند؟
نمایشگر پنل ۱۰ بیت واقعی یا FRC است؟
تنظیمات سیستم خروجی ۱۰ بیت در درایور فعال شده است؟

ویدئوی ۱۰ بیت در GPUهای قدیمی

بعضی GPUهای قدیمی می‌توانند خروجی رنگ ۱۰ بیت
ارائه دهند، اما Decode سخت‌افزاری Codecهای ۱۰ بیت
جدیدتر را نداشته باشند.

همچنین ممکن است کارت Quadro قدیمی در نرم‌افزارهای
حرفه‌ای خروجی ۱۰ بیت داشته باشد، اما موتور Decode
آن برای HEVC Main 10 یا VP9 Profile 2 مناسب نباشد.

بنابراین خروجی ۱۰ بیت نمایشگر و پشتیبانی ۱۰ بیت
موتور ویدئویی نباید با یکدیگر اشتباه گرفته شوند.

Bit Depth در تدوین و Color Grading

پروژه‌های حرفه‌ای معمولاً با دقت رنگ بالاتر پردازش
می‌شوند تا هنگام اعمال افکت، تصحیح نور، Keying و
تغییر رنگ، خطا و Banding کمتری ایجاد شود.

حتی اگر خروجی نهایی ۸ بیت باشد، پردازش داخلی
۱۰ بیت، 16-bit Float یا 32-bit Float می‌تواند
کیفیت مراحل میانی را حفظ کند.

اهمیت Bit Depth در مراحل تولید ویدئو
مرحله اهمیت Bit Depth بالا
ضبط حفظ اطلاعات بیشتر نور و رنگ
تدوین کاهش تخریب تصویر در تغییرات چندباره
Color Grading کنترل دقیق‌تر سایه و Highlight
VFX و Keying لبه‌های بهتر و رنگ دقیق‌تر
HDR Mastering نمایش دامنه روشنایی گسترده
خروجی نهایی کاهش Banding و حفظ Gradient

Chroma Subsampling چیست؟

Chroma Subsampling روشی برای کاهش حجم داده‌های
ویدئویی است که بخشی از اطلاعات رنگ را با دقت
کمتری نسبت به روشنایی ذخیره می‌کند.

چشم انسان معمولاً به جزئیات روشنایی حساس‌تر از
تغییرات بسیار ریز رنگ است. Codecهای ویدئویی از
این ویژگی استفاده می‌کنند تا حجم فایل و پهنای
باند موردنیاز را کاهش دهند.

حالت‌های 4:2:0، 4:2:2 و 4:4:4 نشان می‌دهند اطلاعات
رنگی با چه دقتی نسبت به اطلاعات روشنایی ذخیره شده‌اند.

تفاوت Luma و Chroma

در بسیاری از سیستم‌های ویدئویی، تصویر به اطلاعات
روشنایی و اطلاعات رنگی تقسیم می‌شود.

Luma جزئیات روشنایی و ساختار اصلی تصویر را نگهداری
می‌کند. Chroma اطلاعات تفاوت رنگ را ذخیره می‌کند.

مقایسه اطلاعات روشنایی و رنگ در ویدئو
مؤلفه وظیفه حساسیت چشم انسان
Luma ذخیره جزئیات روشنایی و ساختار تصویر بسیار زیاد
Chroma ذخیره اطلاعات رنگ کمتر از روشنایی

اعداد 4:2:0، 4:2:2 و 4:4:4 چه معنایی دارند؟

این اعداد نسبت نمونه‌برداری روشنایی و رنگ را در
یک ناحیه تصویری نشان می‌دهند.

عدد اول معمولاً مرجع نمونه‌های روشنایی است و دو
عدد بعدی مقدار اطلاعات رنگی ذخیره‌شده را نشان
می‌دهند.

مقایسه 4:2:0، 4:2:2 و 4:4:4

مقایسه حالت‌های رایج Chroma Subsampling
حالت اطلاعات رنگ حجم داده کاربرد رایج
4:2:0 کمتر کم وب، استریم، فیلم و مصرف عمومی
4:2:2 بیشتر متوسط دوربین حرفه‌ای، Broadcast و تدوین
4:4:4 کامل‌تر زیاد VFX، Keying، متن و Mastering

Chroma 4:2:0 چیست؟

4:2:0 رایج‌ترین حالت در فیلم، استریم، Blu-ray،
شبکه‌های اجتماعی و سرویس‌های پخش آنلاین است.

در این روش اطلاعات رنگی هم در جهت افقی و هم در
جهت عمودی کاهش پیدا می‌کند.

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

Chroma 4:2:2 چیست؟

در 4:2:2 اطلاعات رنگی افقی کاهش می‌یابد، اما دقت
رنگ در جهت عمودی بهتر از 4:2:0 حفظ می‌شود.

این حالت در دوربین‌های حرفه‌ای، Broadcast،
Color Grading و تولید محتوایی که نیاز به تغییرات
رنگی بیشتری دارد رایج است.

فایل‌های 4:2:2 نسبت به 4:2:0 حجم و پهنای باند
بیشتری دارند و پشتیبانی سخت‌افزاری Decode و Encode
آن‌ها نیز محدودتر است.

Chroma 4:4:4 چیست؟

در 4:4:4 اطلاعات رنگی با وضوح کامل‌تری ذخیره
می‌شوند و کاهش نمونه‌برداری رنگ وجود ندارد یا
بسیار محدود است.

این حالت برای متن، رابط نرم‌افزار، Keying، VFX،
ترکیب تصاویر، تولید گرافیک و کاربردهای حساس به
لبه‌های رنگی مناسب‌تر است.

4:4:4 حجم داده، نیاز حافظه و پهنای باند بیشتری
دارد و همه موتورهای ویدئویی از Encode یا Decode
سخت‌افزاری آن پشتیبانی نمی‌کنند.

اثر Chroma Subsampling بر متن و رابط کاربری

متن‌های رنگی کوچک، خطوط باریک و مرزهای تیز ممکن
است در 4:2:0 یا 4:2:2 وضوح کمتری داشته باشند.

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

برای استفاده از تلویزیون به‌عنوان مانیتور، Remote
Desktop، ضبط آموزش نرم‌افزار و محتوای شامل متن،
4:4:4 می‌تواند وضوح بیشتری ارائه دهد.

اثر Chroma بر انواع محتوا
نوع محتوا حساسیت به کاهش Chroma حالت مناسب‌تر
فیلم طبیعی کم تا متوسط 4:2:0
Broadcast متوسط تا زیاد 4:2:2
متن و رابط کاربری بسیار زیاد 4:4:4
Green Screen بسیار زیاد 4:2:2 یا 4:4:4
VFX و Compositing بسیار زیاد 4:4:4

چرا Chroma برای Green Screen مهم است؟

در Keying، نرم‌افزار باید مرز میان سوژه و پس‌زمینه
رنگی را با دقت تشخیص دهد.

اگر اطلاعات رنگی کاهش زیادی داشته باشد، لبه مو،
لباس، اجسام باریک و جزئیات نیمه‌شفاف ممکن است
آسیب ببینند.

ضبط 4:2:2 یا 4:4:4 معمولاً اطلاعات مناسب‌تری برای
Keying و حذف دقیق پس‌زمینه فراهم می‌کند.

اثر Chroma Subsampling بر حجم و پهنای باند

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

در پروژه‌های 4K، 8K، نرخ فریم بالا و عمق رنگ
۱۰ یا ۱۲ بیت، این اختلاف می‌تواند بسیار قابل‌توجه
باشد.

اثر Chroma بر نیازهای پردازشی و ذخیره‌سازی
حالت حجم نسبی داده فشار بر VRAM فشار بر Storage
4:2:0 کمتر کمتر کمتر
4:2:2 متوسط بیشتر بیشتر
4:4:4 زیاد زیاد زیاد

پشتیبانی Chroma در Codecهای مختلف

وضعیت عمومی Chroma در Codecهای رایج
Codec 4:2:0 4:2:2 4:4:4
H.264 بسیار رایج موجود در Profileهای خاص موجود اما سخت‌افزار محدودتر
HEVC بسیار رایج مناسب کاربرد حرفه‌ای وابسته به Profile و سخت‌افزار
VP9 رایج محدودتر وابسته به Profile
AV1 رایج در Profileهای پیشرفته‌تر پشتیبانی تخصصی‌تر
ProRes وابسته به Profile رایج در Profileهای حرفه‌ای

بررسی پشتیبانی سخت‌افزاری Chroma

وجود نام Codec در مشخصات GPU به معنی پشتیبانی از
تمام حالت‌های Chroma نیست.

ممکن است موتور Decode فقط 4:2:0 را پشتیبانی کند،
اما فایل دوربین 4:2:2 باشد و پردازش آن به CPU یا
Shaderها منتقل شود.

موارد لازم برای بررسی پشتیبانی Chroma
مورد پرسش اصلی
Codec فایل H.264، HEVC، VP9 یا AV1 است؟
Profile Profile موردنظر از 4:2:2 یا 4:4:4 پشتیبانی می‌کند؟
Decode Engine موتور GPU همان Chroma را Decode می‌کند؟
Encode Engine خروجی سخت‌افزاری با همان Chroma ممکن است؟
Bit Depth حالت ۸، ۱۰ یا ۱۲ بیت پشتیبانی می‌شود؟
نرم‌افزار برنامه از مسیر سخت‌افزاری همان حالت استفاده می‌کند؟
Resolution و Frame Rate موتور در وضوح و نرخ فریم موردنظر محدودیت ندارد؟

Chroma در GPUهای قدیمی و Quadro

کارت‌های حرفه‌ای قدیمی ممکن است خروجی رنگ دقیق یا
قابلیت‌های نمایش حرفه‌ای داشته باشند، اما موتور
ویدئویی آن‌ها الزاماً Codecهای جدید 4:2:2 یا
4:4:4 را به‌صورت سخت‌افزاری Decode نمی‌کند.

همچنین نام Quadro تضمین نمی‌کند که Encode یا
Decode سخت‌افزاری Chroma حرفه‌ای در دسترس باشد.

مدل دقیق GPU، نسل موتور ویدئو، Codec، Profile و
نرم‌افزار باید به‌صورت جداگانه بررسی شوند.

انتخاب Chroma مناسب برای هر Workflow

پیشنهاد عمومی Chroma برای کاربردهای مختلف
کاربرد Chroma پیشنهادی دلیل
انتشار وب 4:2:0 حجم کمتر و سازگاری گسترده
استریم زنده 4:2:0 محدودیت پهنای باند و پشتیبانی پلتفرم
تدوین عمومی 4:2:0 یا 4:2:2 وابسته به منبع و میزان اصلاح رنگ
Broadcast 4:2:2 حفظ بهتر اطلاعات رنگ
Green Screen 4:2:2 یا 4:4:4 لبه‌های رنگی دقیق‌تر
VFX و Compositing 4:4:4 حفظ کامل‌تر اطلاعات رنگ
ضبط صفحه و متن 4:4:4 در صورت امکان وضوح بیشتر نوشته‌ها و خطوط

وضوح تصویر (Resolution) و نرخ فریم (Frame Rate) چه تأثیری بر موتور ویدئویی GPU دارند؟

هنگام بررسی قابلیت‌های Decode و Encode یک GPU،
تنها نوع Codec اهمیت ندارد. وضوح تصویر، نرخ فریم،
عمق رنگ و Chroma Subsampling نیز میزان بار پردازشی
موتور ویدئویی را به‌شدت تغییر می‌دهند.

ممکن است یک GPU بتواند فایل HEVC را در وضوح
Full HD به‌راحتی Decode کند، اما همان Codec را
در 8K یا نرخ فریم بسیار بالا به‌صورت سخت‌افزاری
پشتیبانی نکند.

وضوح‌های رایج ویدئویی

وضوح‌های متداول ویدئویی
نام Resolution تعداد تقریبی پیکسل کاربرد
HD 1280 × 720 0.9 میلیون آموزش و استریم سبک
Full HD 1920 × 1080 2.1 میلیون رایج‌ترین وضوح عمومی
QHD 2560 × 1440 3.7 میلیون مانیتورهای حرفه‌ای
4K UHD 3840 × 2160 8.3 میلیون فیلم و تولید محتوا
8K UHD 7680 × 4320 33.2 میلیون تولید حرفه‌ای و آینده‌نگر

Frame Rate چیست؟

Frame Rate یا نرخ فریم نشان می‌دهد در هر ثانیه
چند تصویر کامل نمایش داده می‌شود.

هرچه نرخ فریم بیشتر باشد، موتور Decode یا Encode
باید تعداد بیشتری فریم را در هر ثانیه پردازش کند.

نرخ‌های فریم متداول
Frame Rate کاربرد فشار پردازشی
24 fps فیلم سینمایی کم
30 fps ویدئوهای عمومی متوسط
60 fps بازی و ویدئوهای روان زیاد
120 fps Slow Motion و کاربرد حرفه‌ای بسیار زیاد

چرا افزایش Resolution و Frame Rate اهمیت دارد؟

افزایش وضوح تصویر یا نرخ فریم باعث می‌شود حجم
داده‌ای که موتور ویدئویی باید در هر ثانیه پردازش
کند چند برابر شود.

ارتباط Resolution با پهنای باند حافظه

افزایش وضوح تصویر فقط Decode را سنگین‌تر نمی‌کند،
بلکه میزان انتقال داده میان موتور ویدئویی، حافظه،
Display Engine و سایر بخش‌های GPU را نیز افزایش
می‌دهد.

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

Pixel Throughput در پردازش ویدئو چیست؟

Pixel Throughput نشان می‌دهد موتور ویدئویی باید
در هر ثانیه چه تعداد پیکسل را برای Decode، Encode
یا پردازش میان‌مرحله‌ای مدیریت کند.

این مقدار از ضرب تعداد پیکسل‌های هر فریم در نرخ
فریم به دست می‌آید و معیار مفیدی برای مقایسه
سنگینی جریان‌های مختلف ویدئویی است.

افزایش Resolution یا Frame Rate می‌تواند حتی بدون
تغییر Codec، فشار پردازشی موتور ویدئویی را چند
برابر کند.

مقایسه حجم پردازش در وضوح‌ها و نرخ‌های فریم مختلف

تعداد تقریبی پیکسل پردازش‌شده در هر ثانیه
حالت ویدئو پیکسل هر فریم نرخ فریم پیکسل در ثانیه فشار نسبی
1080p 30fps حدود 2.1 میلیون 30 حدود 62 میلیون پایه
1080p 60fps حدود 2.1 میلیون 60 حدود 124 میلیون حدود دو برابر
1440p 60fps حدود 3.7 میلیون 60 حدود 221 میلیون زیاد
4K 30fps حدود 8.3 میلیون 30 حدود 249 میلیون حدود چهار برابر 1080p
4K 60fps حدود 8.3 میلیون 60 حدود 498 میلیون بسیار زیاد
8K 30fps حدود 33.2 میلیون 30 حدود 995 میلیون بسیار سنگین
8K 60fps حدود 33.2 میلیون 60 حدود 1.99 میلیارد فوق‌سنگین

اثر هم‌زمان Resolution، Frame Rate، Bit Depth و Chroma

بار واقعی موتور ویدئویی تنها با تعداد پیکسل‌ها
تعیین نمی‌شود. عمق رنگ و مقدار اطلاعات Chroma نیز
حجم داده هر فریم را تغییر می‌دهند.

برای مثال، ویدئوی 4K ده‌بیتی 4:2:2 نسبت به ویدئوی
4K هشت‌بیتی 4:2:0 داده بیشتری برای Decode،
پردازش، انتقال در VRAM و Encode نیاز دارد.

عوامل افزایش بار پردازش ویدئویی
عامل حالت سبک‌تر حالت سنگین‌تر اثر اصلی
Resolution 1080p 4K یا 8K افزایش تعداد پیکسل
Frame Rate 24 یا 30fps 60 یا 120fps افزایش تعداد فریم در ثانیه
Bit Depth 8-bit 10-bit یا 12-bit افزایش اطلاعات هر نمونه
Chroma 4:2:0 4:2:2 یا 4:4:4 افزایش جزئیات رنگ
Codec H.264 HEVC یا AV1 افزایش پیچیدگی رمزگشایی و رمزگذاری

نرخ داده ویدئوی خام و فشرده‌نشده

پس از Decode، فریم‌ها معمولاً به شکلی نزدیک‌تر به
داده خام در حافظه قرار می‌گیرند. این داده می‌تواند
بسیار بزرگ‌تر از فایل فشرده روی Storage باشد.

به همین دلیل فایل کم‌حجم HEVC یا AV1 پس از Decode
ممکن است فشار قابل‌توجهی بر VRAM و پهنای باند
داخلی GPU ایجاد کند.

Frame Buffer و حافظه موردنیاز ویدئو

موتور Decode برای بازسازی فریم‌ها معمولاً چندین
فریم را هم‌زمان در حافظه نگهداری می‌کند.

تعداد این فریم‌ها به Codec، ساختار GOP، تعداد
Reference Frameها، B-Frameها و تنظیمات نرم‌افزار
وابسته است.

پروژه‌های چندلایه، Multicam، Noise Reduction،
Color Grading و افکت‌های زمانی می‌توانند مصرف
VRAM را بسیار بیشتر کنند.

عوامل افزایش مصرف VRAM در پردازش ویدئو
عامل اثر بر حافظه
وضوح بالاتر افزایش اندازه هر فریم
Bit Depth بالاتر افزایش اطلاعات هر کانال
Chroma کامل‌تر افزایش داده رنگی
Reference Frame بیشتر نگهداری تعداد بیشتری فریم در حافظه
Multicam Decode چند جریان هم‌زمان
افکت‌های زمانی نیاز به فریم‌های قبل و بعد
پروژه چندلایه نگهداری چند Buffer تصویری

پردازش چند جریان ویدئویی هم‌زمان

در تدوین Multicam، سیستم نظارتی، پخش چند ویدئو،
Video Wall و Transcoding Server ممکن است چند
جریان به‌صورت هم‌زمان Decode یا Encode شوند.

هر جریان بخشی از ظرفیت موتور ویدئویی، پهنای باند
حافظه و VRAM را مصرف می‌کند.

حتی اگر موتور بتواند یک فایل 4K را Decode کند،
ممکن است برای چند جریان 4K هم‌زمان ظرفیت کافی
نداشته باشد.

نمونه بارهای چندجریانی ویدئویی
کاربرد نوع جریان‌ها محدودیت احتمالی
Multicam Editing چند فایل دوربین هم‌زمان Decode Throughput و VRAM
سیستم نظارتی ده‌ها Stream با وضوح متوسط تعداد Session و پهنای باند
Transcoding Server Decode و Encode هم‌زمان ظرفیت Encoder و Decoder
Video Wall چند خروجی ویدئویی Decode، Display Engine و خروجی تصویر
Live Production چند ورودی زنده تأخیر، Session و حافظه

Session در Encode و Decode چیست؟

Session به یک جریان مستقل پردازش ویدئویی گفته
می‌شود که توسط موتور Encode یا Decode مدیریت
می‌شود.

برای مثال، Decode دو فایل و Encode یک خروجی می‌تواند
شامل چند Session مستقل باشد.

تعداد Session قابل اجرا ممکن است به ظرفیت واقعی
موتور، محدودیت درایور، نوع محصول، Codec، Resolution
و نرم‌افزار وابسته باشد.

تفاوت ظرفیت سخت‌افزار و محدودیت نرم‌افزاری Session

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

در بعضی محصولات حرفه‌ای، سرور یا دیتاسنتر،
محدودیت‌های نرم‌افزاری متفاوتی نسبت به کارت‌های
مصرف‌کننده اعمال می‌شود.

عوامل تعیین‌کننده تعداد Sessionهای ویدئویی
عامل نقش
تعداد موتورهای فیزیکی ظرفیت پردازش موازی سخت‌افزار
Codec پیچیدگی متفاوت H.264، HEVC و AV1
Resolution مصرف بیشتر ظرفیت در وضوح بالاتر
Frame Rate افزایش Pixel Throughput
Bit Depth و Chroma افزایش حجم داده هر فریم
درایور امکان اعمال محدودیت نرم‌افزاری
نرم‌افزار نحوه مدیریت و تقسیم Sessionها
نوع کارت تفاوت میان مصرف‌کننده، حرفه‌ای و سرور

Decode و Encode هم‌زمان

در Transcoding، تدوین و استریم ممکن است موتور
Decode و Encode به‌صورت هم‌زمان فعال باشند.

موتور Decode فایل ورودی را به فریم تبدیل می‌کند،
Shaderها یا واحدهای پردازشی افکت را اعمال می‌کنند
و موتور Encode خروجی را فشرده می‌کند.

اگر ورودی و خروجی از Codecهای سنگین، وضوح بالا یا
چند Stream تشکیل شده باشند، ظرفیت هر دو موتور و
حافظه GPU اهمیت پیدا می‌کند.

Real-Time Processing در ویدئو چیست؟

پردازش Real-Time یعنی سیستم بتواند هر فریم را پیش
از رسیدن زمان نمایش یا ارسال فریم بعدی آماده کند.

برای ویدئوی 60fps، هر فریم باید تقریباً در بازه
کوتاه‌تری نسبت به ویدئوی 30fps پردازش شود.

اگر موتور یا نرم‌افزار نتواند به سرعت موردنیاز
برسد، افت فریم، افزایش تأخیر یا توقف Timeline
رخ می‌دهد.

کاربردهای نیازمند پردازش Real-Time
کاربرد نیاز اصلی پیامد کمبود توان
پخش ویدئو Decode پیش از زمان نمایش افت فریم
استریم زنده Encode سریع با تأخیر کم افزایش Latency یا Frame Drop
تدوین Decode و افکت هم‌زمان Preview کند
تماس تصویری Encode و Decode دوطرفه تأخیر و ناپایداری تصویر
Remote Desktop Capture و Encode کم‌تأخیر واکنش کند رابط کاربری

گلوگاه‌های رایج در پردازش ویدئو

بخش‌هایی که می‌توانند سرعت پردازش ویدئو را محدود کنند
گلوگاه نشانه علت احتمالی
Decode Engine افت فریم با CPU کم‌مصرف Codec یا Stream سنگین‌تر از ظرفیت موتور
Encode Engine Export یا استریم کند Session زیاد یا Resolution بالا
Shader Core Decode روان ولی افکت کند Color، Noise Reduction یا Scaling سنگین
VRAM کندی پروژه چندلایه ظرفیت ناکافی یا Buffer زیاد
Memory Bandwidth افت سرعت در 4K یا 8K انتقال چند فریم بزرگ هم‌زمان
CPU مصرف بالا با Video Engine غیرفعال Software Decode یا پردازش Container
Storage توقف Timeline هنگام خواندن فایل سرعت ناکافی دیسک یا چند Stream هم‌زمان
نرم‌افزار و درایور استفاده‌نشدن از Hardware Acceleration تنظیم یا سازگاری نامناسب

NVIDIA NVENC چیست؟

NVENC مخفف NVIDIA Encoder است و به موتور سخت‌افزاری
اختصاصی رمزگذاری ویدئو در بسیاری از GPUهای NVIDIA
گفته می‌شود.

این موتور می‌تواند فریم‌های خام یا پردازش‌شده را
به جریان‌های فشرده‌ای مانند H.264، HEVC و در
نسل‌های جدیدتر AV1 تبدیل کند.

NVENC از هسته‌های عمومی Shader یا CUDA Core جدا
است؛ بنابراین در بسیاری از بارهای کاری می‌تواند
عملیات Encode را با درگیری کمتر CPU و واحدهای
پردازشی اصلی GPU انجام دهد.

مسیر پردازش ویدئو با NVENC

پیش از ورود فریم به NVENC، ممکن است Shaderها،
نرم‌افزار تدوین یا موتور بازی تصویر را پردازش
کرده باشند.

سپس فریم نهایی از حافظه GPU به NVENC ارسال می‌شود
تا با Codec و تنظیمات انتخاب‌شده فشرده شود.

کاربردهای NVENC

کاربردهای رایج موتور NVIDIA NVENC
کاربرد نقش NVENC مزیت اصلی
استریم زنده Encode تصویر بازی یا دوربین کاهش فشار بر CPU
ضبط بازی ذخیره فریم‌ها در فایل فشرده افت عملکرد کمتر نسبت به بعضی روش‌های نرم‌افزاری
Export ویدئو تولید خروجی H.264، HEVC یا AV1 زمان خروجی کوتاه‌تر
Transcoding Encode خروجی پس از Decode و تبدیل پردازش سریع چند فایل
Remote Desktop فشرده‌سازی تصویر دسکتاپ تأخیر کمتر
سیستم نظارتی فشرده‌سازی جریان‌های تصویری کاهش مصرف CPU سرور
Cloud Gaming Encode بلادرنگ تصویر بازی سرعت بالا و Latency پایین

تفاوت NVENC با CUDA Core

CUDA Coreها واحدهای پردازشی عمومی برای Shader،
Compute، افکت، Scaling، Color Correction و سایر
عملیات قابل برنامه‌ریزی هستند.

NVENC یک مدار ثابت و تخصصی برای Encode Codecهای
مشخص است و نمی‌تواند جایگزین واحدهای عمومی در تمام
پردازش‌های تصویری شود.

مقایسه NVENC و CUDA Core
معیار NVENC CUDA Core
نوع واحد موتور ثابت و تخصصی واحد محاسباتی قابل برنامه‌ریزی
وظیفه اصلی Encode ویدئو افکت، رندر و Compute
مصرف انرژی برای Encode معمولاً کمتر وابسته به بار محاسباتی
انعطاف محدود به Codec و قابلیت‌های موتور بسیار بیشتر
اجرای افکت معمولاً انجام نمی‌دهد انجام می‌دهد
فعالیت هم‌زمان می‌تواند هم‌زمان با CUDA Coreها کار کند افکت‌ها را پیش از Encode پردازش می‌کند

Codecهای قابل استفاده با NVENC

قابلیت دقیق NVENC به نسل معماری و تراشه بستگی دارد.
همه GPUهای NVIDIA مجموعه Codecها و Profileهای
یکسانی ندارند.

وضعیت عمومی Codecهای NVENC
Codec وضعیت عمومی کاربرد رایج نکته
H.264 گسترده در نسل‌های متعدد استریم، ضبط و انتشار عمومی Profile و کیفیت به نسل وابسته است
HEVC در نسل‌های جدیدتر 4K، HDR و آرشیو Bit Depth و Chroma جداگانه بررسی شوند
AV1 در نسل‌های جدیدتر استریم مدرن و Bitrate پایین‌تر Decode AV1 الزاماً به معنی Encode AV1 نیست
VP9 Encode سخت‌افزاری عمومی محدودتر کاربردهای خاص پشتیبانی نرم‌افزار و تراشه بررسی شود

چرا نسل NVENC اهمیت دارد؟

NVIDIA در نسل‌های مختلف، کیفیت فشرده‌سازی،
Codecهای پشتیبانی‌شده، Presetها، کنترل نرخ،
Bit Depth و قابلیت‌های NVENC را تغییر داده است.

دو کارت با تعداد CUDA Core متفاوت ممکن است موتور
NVENC هم‌نسل یا متفاوتی داشته باشند. بنابراین
قدرت رندر سه‌بعدی معیار دقیقی برای کیفیت Encoder
نیست.

تغییرات عمومی NVENC میان نسل‌ها
ویژگی نسل‌های قدیمی‌تر نسل‌های جدیدتر
کیفیت در Bitrate محدود ضعیف‌تر بهبود‌یافته
Codecها بیشتر متمرکز بر H.264 HEVC و AV1 در نسل‌های مناسب
Bit Depth گزینه‌های محدودتر پشتیبانی گسترده‌تر در برخی Codecها
B-Frame محدودیت بیشتر قابلیت‌های پیشرفته‌تر
Lookahead محدودتر یا وابسته به نرم‌افزار گزینه‌های پیشرفته‌تر
کیفیت Preset گزینه‌های ساده‌تر کنترل بهتر سرعت و کیفیت

چه عواملی کیفیت خروجی NVENC را تعیین می‌کنند؟

کیفیت خروجی فقط به نام NVENC وابسته نیست. Codec،
Bitrate، Resolution، Preset، Rate Control،
B-Frame، Lookahead و نوع محتوای تصویر نیز نقش
مهمی دارند.

عوامل مؤثر بر کیفیت Encode با NVENC
عامل اثر
نسل NVENC تعیین قابلیت‌ها و راندمان فشرده‌سازی
Codec تعیین سازگاری و بهره‌وری فشرده‌سازی
Bitrate تعیین مقدار داده قابل اختصاص به تصویر
Preset تعادل میان سرعت و کیفیت
Rate Control نحوه توزیع Bitrate میان فریم‌ها
B-Frame بهبود راندمان فشرده‌سازی
Lookahead تحلیل فریم‌های آینده برای تصمیم بهتر
محتوای تصویر حرکت سریع، Grain و جزئیات زیاد Encode را دشوارتر می‌کنند

NVENC و Encode کم‌تأخیر

یکی از کاربردهای مهم NVENC، Encode بلادرنگ با
تأخیر کم است.

در استریم بازی، Cloud Gaming، تماس تصویری و Remote
Desktop، فریم باید با فاصله زمانی کوتاهی پس از
تولید فشرده و ارسال شود.

برای کاهش تأخیر ممکن است بعضی قابلیت‌های تحلیل
پیشرفته یا تعداد B-Frameها محدود شوند؛ در نتیجه
میان Latency و راندمان فشرده‌سازی مصالحه ایجاد
می‌شود.

مقایسه تنظیمات Low-Latency و High-Quality
معیار Low-Latency High-Quality
تأخیر کمتر بیشتر
Lookahead محدود یا غیرفعال قابل استفاده
B-Frame کمتر بیشتر
راندمان فشرده‌سازی پایین‌تر بهتر
کاربرد استریم، Remote و تماس زنده Export و آرشیو

آیا NVENC هیچ فشاری بر GPU وارد نمی‌کند؟

NVENC بخش اصلی Encode را روی موتور اختصاصی انجام
می‌دهد، اما کل Workflow الزاماً بدون استفاده از
سایر بخش‌های GPU نیست.

Scaling، تبدیل رنگ، Capture، Compositing، افکت،
حذف نویز و انتقال فریم‌ها می‌توانند از Shader،
VRAM و پهنای باند حافظه استفاده کنند.

به همین دلیل هنگام استریم هم‌زمان با بازی، ممکن
است مصرف کلی GPU افزایش یابد؛ حتی اگر موتور Encode
مستقل باشد.

واحدهای درگیر در یک Workflow مبتنی بر NVENC
عملیات واحد اصلی
رندر بازی Shader، Raster، RT و حافظه
Capture فریم GPU، Driver و VRAM
Resize Shader یا واحد پردازش تصویر
تبدیل رنگ Shader یا Video Processing Unit
Encode NVENC
نگهداری Buffer VRAM

محدودیت Session در NVENC

تعداد Encodeهای هم‌زمان می‌تواند به نسل GPU،
تعداد موتورهای فیزیکی NVENC، نوع محصول، درایور،
Codec و وضوح جریان‌ها وابسته باشد.

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

NVENC در Quadro و GPUهای قدیمی

بعضی GPUهای قدیمی NVIDIA دارای NVENC هستند، اما
کیفیت، Codecها و قابلیت‌های آن‌ها با نسل‌های جدید
یکسان نیست.

در Quadro K، M و P باید تراشه دقیق بررسی شود؛ زیرا
نام سری یا نام تجاری کارت به‌تنهایی نسل NVENC را
مشخص نمی‌کند.

نکات عمومی بررسی NVENC در GPUهای قدیمی
مورد پرسش لازم
تراشه دقیق GPU از کدام معماری و Die استفاده می‌کند؟
H.264 Encode Profile و حداکثر Resolution چیست؟
HEVC Encode آیا وجود دارد و چه Bit Depthی را پشتیبانی می‌کند؟
کیفیت Encoder نسل NVENC در Bitrate هدف چه عملکردی دارد؟
Session هم‌زمان محدودیت سخت‌افزار و درایور چیست؟
نرم‌افزار نسخه برنامه و درایور از NVENC پشتیبانی می‌کنند؟

NVIDIA NVDEC چیست؟

NVDEC مخفف NVIDIA Video Decoder
است و به موتور سخت‌افزاری اختصاصی Decode ویدئو در
بسیاری از پردازنده‌های گرافیکی NVIDIA گفته می‌شود.

این موتور وظیفه باز کردن جریان‌های فشرده ویدئویی
مانند H.264، HEVC، VP9 و AV1 را برعهده دارد و
فریم‌های خام را برای نمایش یا پردازش در اختیار
سایر بخش‌های GPU قرار می‌دهد.

وجود NVDEC باعث می‌شود پردازش ویدئوهای سنگین با
فشار بسیار کمتری بر CPU انجام شود و مصرف انرژی نیز
کاهش یابد.

مسیر Decode با NVDEC

هنگام پخش یک فایل ویدئویی، ابتدا Bitstream فشرده
وارد موتور NVDEC می‌شود. سپس این موتور فریم‌ها را
بازسازی کرده و آن‌ها را برای پردازش‌های بعدی یا
نمایش آماده می‌کند.

کاربردهای NVDEC

مهم‌ترین کاربردهای موتور NVIDIA NVDEC
کاربرد نقش NVDEC مزیت
پخش فیلم Decode فایل ویدئویی کاهش مصرف CPU
YouTube و استریم Decode آنلاین مصرف انرژی کمتر
تدوین ویدئو Decode فایل‌های پروژه Preview روان‌تر
Transcoding Decode فایل ورودی آماده‌سازی برای Encode
سیستم نظارتی Decode چند Stream افزایش تعداد کانال‌های قابل پردازش
هوش مصنوعی و Video Analytics آماده‌سازی فریم برای پردازش AI حذف بار Decode از CPU

تفاوت NVDEC و Software Decode

اگر GPU از Codec موردنظر پشتیبانی نکند، Decode
توسط CPU انجام می‌شود که به آن Software Decode
گفته می‌شود.

Software Decode در Codecهای سنگین مانند HEVC،
VP9 یا AV1 و وضوح‌های بالا می‌تواند فشار زیادی
به پردازنده وارد کند.

مقایسه Decode سخت‌افزاری و نرم‌افزاری
معیار NVDEC Software Decode
محل پردازش موتور اختصاصی GPU CPU
مصرف CPU بسیار کمتر بیشتر
مصرف انرژی کمتر بیشتر
مناسب برای چند Stream بهتر محدودتر
مناسب برای 4K و 8K بله (در صورت پشتیبانی GPU) وابسته به قدرت CPU

تفاوت NVDEC و NVENC

مقایسه دو موتور ویدئویی NVIDIA
ویژگی NVDEC NVENC
وظیفه Decode Encode
ورودی فایل فشرده فریم خام
خروجی فریم خام فایل یا Stream فشرده
کاربرد پخش ویدئو ضبط و استریم
محل استفاده ابتدای Pipeline انتهای Pipeline

چرا نسل NVDEC اهمیت دارد؟

قابلیت‌های NVDEC در نسل‌های مختلف NVIDIA یکسان
نیستند. پشتیبانی از Codec، عمق رنگ، Chroma،
وضوح، نرخ فریم و تعداد Streamهای هم‌زمان به
معماری و تراشه دقیق GPU وابسته است.

ممکن است دو کارت از یک خانواده تجاری مشابه باشند،
اما به دلیل استفاده از تراشه‌های متفاوت، موتور
Decode یکسانی نداشته باشند.

بنابراین نام‌هایی مانند GeForce، Quadro، RTX یا
Tesla به‌تنهایی برای تشخیص قابلیت‌های NVDEC کافی
نیستند.

تغییرات عمومی NVDEC در نسل‌های مختلف
ویژگی نسل‌های قدیمی‌تر نسل‌های جدیدتر
Codecهای قابل Decode بیشتر متمرکز بر MPEG و H.264 HEVC، VP9 و AV1 در نسل‌های مناسب
Bit Depth عمدتاً ۸ بیت پشتیبانی گسترده‌تر از ۱۰ بیت
Resolution محدودتر پشتیبانی بهتر از 4K و 8K
Frame Rate ظرفیت کمتر Pixel Throughput بیشتر
چند Stream هم‌زمان محدودتر ظرفیت بیشتر در مدل‌های مناسب
بهره‌وری انرژی پایین‌تر بهتر

Codecهای قابل Decode با NVDEC

مجموعه Codecهای پشتیبانی‌شده به نسل موتور NVDEC
بستگی دارد. برخی GPUها فقط Codecهای قدیمی‌تر را
Decode می‌کنند، درحالی‌که نسل‌های جدیدتر قابلیت
Decode سخت‌افزاری HEVC، VP9 و AV1 را نیز دارند.

وضعیت عمومی Codecهای قابل Decode در NVIDIA
Codec وضعیت عمومی کاربرد نکته بررسی
MPEG-2 در بسیاری از نسل‌های قدیمی و جدید DVD و Broadcast قدیمی Profile و Resolution بررسی شود
VC-1 در برخی نسل‌ها محتوای قدیمی و Blu-ray پشتیبانی به تراشه وابسته است
H.264 بسیار گسترده وب، پخش، تدوین و استریم Profile و Level بررسی شود
HEVC در نسل‌های جدیدتر 4K، HDR و فایل‌های جدید Main، Main 10 و Chroma جداگانه بررسی شوند
VP8 وابسته به نسل ویدئوی وب قدیمی‌تر قابلیت دقیق مدل بررسی شود
VP9 در نسل‌های جدیدتر YouTube و Streaming Profile 0 و Profile 2 یکسان نیستند
AV1 فقط در نسل‌های مناسب جدیدتر استریم مدرن و ویدئوی 4K یا 8K Decode و Encode AV1 جدا هستند

محدودیت Profile و Level در NVDEC

اعلام پشتیبانی از یک Codec به معنی پشتیبانی از
تمام Profileها و Levelهای آن نیست.

ممکن است NVDEC بتواند H.264 High Profile را
Decode کند، اما یک Profile حرفه‌ای‌تر یا Level
بسیار بالا را به CPU منتقل کند.

همین موضوع درباره HEVC Main 10، VP9 Profile 2
و حالت‌های حرفه‌ای‌تر AV1 نیز صدق می‌کند.

موارد لازم برای بررسی Profile و Level
مورد اثر احتمالی
Profile تعیین قابلیت‌های فعال Codec
Level تعیین سقف Resolution، Frame Rate و Bitrate
Tier تعیین محدوده Bitrate در بعضی Codecها
Bit Depth تعیین پشتیبانی ۸، ۱۰ یا ۱۲ بیت
Chroma تعیین پشتیبانی 4:2:0، 4:2:2 یا 4:4:4

پشتیبانی NVDEC از ویدئوی ۸، ۱۰ و ۱۲ بیت

بسیاری از GPUهای قدیمی Decode سخت‌افزاری ویدئوی
۸ بیت را ارائه می‌کنند، اما پشتیبانی ۱۰ بیت در
Codecهایی مانند HEVC، VP9 و AV1 به نسل‌های
جدیدتر وابسته است.

ویدئوی ۱۲ بیت و حالت‌های حرفه‌ای‌تر معمولاً
محدودیت بیشتری دارند و ممکن است به Software
Decode نیاز داشته باشند.

وضعیت عمومی Bit Depth در NVDEC
Bit Depth کاربرد وضعیت عمومی
8-bit پخش عمومی و SDR گسترده
10-bit HDR و تولید محتوای جدید وابسته به Codec و نسل GPU
12-bit Workflow حرفه‌ای و تخصصی محدودتر

پشتیبانی NVDEC از 4:2:0، 4:2:2 و 4:4:4

رایج‌ترین مسیر Hardware Decode در GPUهای مصرف‌کننده
برای ویدئوی 4:2:0 طراحی شده است.

فایل‌های 4:2:2 و 4:4:4 که در دوربین‌های حرفه‌ای،
Broadcast و VFX استفاده می‌شوند، ممکن است توسط
همه نسل‌های NVDEC پشتیبانی نشوند.

وضعیت عمومی Chroma در NVDEC
Chroma کاربرد وضعیت عمومی Decode
4:2:0 فیلم، وب و Streaming گسترده‌ترین پشتیبانی
4:2:2 دوربین حرفه‌ای و Broadcast محدودتر و وابسته به نسل
4:4:4 VFX، Keying و Mastering تخصصی‌تر و محدودتر

محدودیت Resolution و Frame Rate در NVDEC

ظرفیت NVDEC بر اساس Pixel Throughput محدود است.
هرچه تعداد پیکسل‌ها و نرخ فریم بیشتر باشند، سهم
بیشتری از توان موتور Decode مصرف می‌شود.

پشتیبانی از 4K به‌تنهایی مشخص نمی‌کند که موتور
توان Decode فایل 4K با نرخ 120fps یا چند جریان
4K هم‌زمان را دارد.

اثر Resolution و Frame Rate بر بار NVDEC
حالت بار نسبی کاربرد
1080p 30fps پایین پخش عمومی
1080p 60fps متوسط استریم بازی و آموزش
4K 30fps زیاد فیلم و تدوین
4K 60fps بسیار زیاد محتوای حرفه‌ای و Streaming
8K فوق‌سنگین تولید و پخش نسل جدید

Decode چند Stream هم‌زمان با NVDEC

NVDEC می‌تواند بسته به ظرفیت موتور، چند جریان
ویدئویی را هم‌زمان Decode کند.

تعداد واقعی Streamها به Codec، Resolution،
Frame Rate، Bit Depth، Chroma و ظرفیت حافظه
بستگی دارد.

در تدوین Multicam، سیستم نظارتی و Video Analytics،
مجموع Pixel Throughput همه جریان‌ها اهمیت دارد.

مصرف VRAM هنگام استفاده از NVDEC

پس از Decode، فریم‌ها در حافظه GPU نگهداری می‌شوند.
هرچه Resolution، Bit Depth و Chroma بیشتر باشد،
اندازه Frame Buffer افزایش پیدا می‌کند.

Codecهایی که از Reference Frameهای بیشتری استفاده
می‌کنند نیز ممکن است تعداد بیشتری فریم را هم‌زمان
در VRAM نگهداری کنند.

عوامل افزایش مصرف VRAM در NVDEC
عامل اثر
Resolution بالا افزایش اندازه هر فریم
Bit Depth بیشتر افزایش داده هر نمونه رنگ
Chroma کامل‌تر افزایش اطلاعات رنگی
Reference Frame بیشتر نگهداری فریم‌های بیشتری در حافظه
چند Stream هم‌زمان ایجاد چند مجموعه Frame Buffer
افکت و پردازش بعدی ایجاد Bufferهای اضافه

Zero-Copy Processing در NVDEC

در یک Workflow بهینه، فریم Decodeشده می‌تواند
داخل حافظه GPU باقی بماند و بدون انتقال غیرضروری
به RAM یا CPU، مستقیماً وارد CUDA، Shader،
Tensor Core یا NVENC شود.

کاهش انتقال میان حافظه سیستم و VRAM می‌تواند
Latency، مصرف پهنای باند PCI Express و بار CPU
را کاهش دهد.

ارتباط NVDEC با CUDA و Tensor Core

NVDEC فقط وظیفه Decode را انجام می‌دهد. پس از
بازسازی فریم، عملیات پردازشی می‌تواند توسط CUDA
Core، Tensor Core یا سایر واحدهای GPU ادامه پیدا
کند.

این مسیر در Video Analytics، تشخیص اشیا، Super
Resolution، حذف نویز، تبدیل رنگ و پردازش هوش
مصنوعی استفاده می‌شود.

تقسیم وظایف در پردازش ویدئویی مبتنی بر NVIDIA
مرحله واحد اصلی نمونه وظیفه
Decode NVDEC بازکردن H.264، HEVC، VP9 یا AV1
Resize و Color Conversion CUDA، Shader یا Video Processor آماده‌سازی فریم
AI Inference Tensor Core و CUDA Core تشخیص چهره یا اشیا
Encode خروجی NVENC ذخیره یا ارسال نتیجه

تفاوت NVDEC در GeForce، Quadro، RTX و کارت‌های دیتاسنتر

محصولات مختلف NVIDIA ممکن است از تراشه یا نسل
NVDEC مشابه استفاده کنند، اما ظرفیت حافظه، تعداد
موتورهای فیزیکی، درایور، پایداری و محدودیت‌های
نرم‌افزاری آن‌ها متفاوت باشد.

تفاوت‌های عمومی کلاس‌های مختلف GPU در کاربرد ویدئویی
خانواده کاربرد اصلی مزیت احتمالی نکته
GeForce بازی، استریم و تولید محتوا قیمت و عملکرد مناسب محدودیت‌ها به مدل و درایور وابسته‌اند
Quadro قدیمی CAD و ورک‌استیشن درایور حرفه‌ای و پایداری موتور ویدئو ممکن است قدیمی باشد
RTX Professional تولید محتوا و پردازش حرفه‌ای VRAM بیشتر و Workflow پایدار قابلیت دقیق به تراشه وابسته است
Tesla و Data Center Transcoding و Video Analytics ظرفیت چندجریانی و پردازش سروری بعضی مدل‌ها خروجی نمایشگر ندارند

NVDEC در Quadro و GPUهای قدیمی

GPUهای قدیمی ممکن است برای H.264 عملکرد مناسبی
داشته باشند، اما در HEVC ده‌بیتی، VP9 یا AV1
فاقد Decode سخت‌افزاری کامل باشند.

در لپ‌تاپ‌های استوک، گاهی گرافیک مجتمع Intel
Codec جدیدتری را نسبت به Quadro مجزای قدیمی
Decode می‌کند.

نرم‌افزار ممکن است بر اساس Codec و تنظیمات، میان
گرافیک مجتمع، Quadro یا CPU یکی را انتخاب کند.

نکات بررسی NVDEC در کارت‌های قدیمی
مورد پرسش لازم
تراشه دقیق کارت از چه Die و معماری استفاده می‌کند؟
H.264 حداکثر Resolution و Frame Rate چیست؟
HEVC Main و Main 10 پشتیبانی می‌شوند؟
VP9 Decode کامل، Hybrid یا Software است؟
AV1 آیا موتور اختصاصی وجود دارد؟
نرم‌افزار تدوین برنامه از NVDEC این مدل استفاده می‌کند؟
درایور نسخه نصب‌شده با نرم‌افزار سازگار است؟

چگونه فعال‌بودن NVDEC را بررسی کنیم؟

هنگام پخش یا تدوین، ابزارهای مانیتورینگ می‌توانند
میزان استفاده از Video Decode، CPU، VRAM و
موتورهای مختلف GPU را نمایش دهند.

مصرف بالای CPU همراه با استفاده بسیار کم از Video
Decode ممکن است نشان دهد فایل به‌صورت نرم‌افزاری
Decode می‌شود.

نشانه‌های فعال یا غیرفعال‌بودن Hardware Decode
نشانه تفسیر احتمالی
Video Decode Usage بالا NVDEC احتمالاً فعال است
CPU Usage پایین‌تر بخش اصلی Decode به GPU منتقل شده است
CPU Usage بسیار بالا احتمال Software Decode وجود دارد
افت فریم با Video Decode صفر Codec یا Profile پشتیبانی نمی‌شود
افزایش VRAM Frame Bufferها داخل GPU نگهداری می‌شوند
استفاده هم‌زمان از Compute افکت یا پردازش AI نیز فعال است

چرا نرم‌افزار از NVDEC استفاده نمی‌کند؟

دلایل رایج غیرفعال‌بودن NVDEC
علت توضیح اقدام پیشنهادی
Codec پشتیبانی‌نشده موتور نسل موردنظر Codec را ندارد بررسی مشخصات تراشه و فایل
Profile یا Chroma نامناسب Codec اصلی پشتیبانی می‌شود اما حالت فایل نه بررسی Media Info فایل
Hardware Acceleration خاموش تنظیم نرم‌افزار غیرفعال است فعال‌کردن Decode سخت‌افزاری
درایور قدیمی API یا قابلیت لازم در دسترس نیست نصب درایور سازگار
انتخاب GPU اشتباه برنامه روی GPU دیگری اجرا می‌شود تنظیم Graphics Preference
محدودیت نرم‌افزار برنامه از مسیر NVDEC پشتیبانی نمی‌کند بررسی نسخه یا نرم‌افزار جایگزین
افکت ناسازگار بخشی از Pipeline به CPU منتقل شده است تست فایل بدون افکت

AMD VCN چیست؟

VCN مخفف Video Core Next است و
موتور اختصاصی Encode و Decode ویدئو در بسیاری از
پردازنده‌های گرافیکی AMD محسوب می‌شود.

این موتور جانشین نسل‌های قدیمی‌تر UVD
(Unified Video Decoder) و VCE
(Video Coding Engine) شده و هر دو وظیفه Decode و
Encode را در یک مجموعه سخت‌افزاری مجتمع انجام
می‌دهد.

هدف اصلی VCN کاهش بار CPU، افزایش سرعت پردازش
ویدئو و فراهم‌کردن قابلیت Hardware Acceleration
برای نرم‌افزارهای تدوین، استریم و پخش ویدئو است.

از UVD و VCE تا VCN

AMD در نسل‌های اولیه دو موتور جداگانه برای Decode
و Encode داشت.

بعدها این دو بخش در معماری Video Core Next یا VCN
ادغام شدند تا مدیریت Codecها، مصرف انرژی و عملکرد
بهینه‌تر شود.

روند تکامل موتورهای ویدئویی AMD
نسل وظیفه توضیح
UVD Decode موتور اختصاصی Decode
VCE Encode موتور اختصاصی Encode
VCN Decode + Encode نسل جدید موتور ویدئویی AMD

مسیر پردازش ویدئو در VCN

VCN می‌تواند فایل‌های فشرده را Decode کرده،
فریم‌ها را برای پردازش آماده کند و در صورت نیاز
خروجی را دوباره Encode نماید.

کاربردهای AMD VCN

مهم‌ترین کاربردهای موتور VCN
کاربرد نقش VCN مزیت
پخش ویدئو Decode سخت‌افزاری کاهش مصرف CPU
استریم Encode زنده Latency پایین
تدوین Decode و Export Preview روان‌تر
ضبط بازی Encode تصویر افت عملکرد کمتر
Video Transcoding Decode و Encode هم‌زمان سرعت پردازش بیشتر
سیستم‌های نظارتی Decode چند Stream بار کمتر روی CPU

تفاوت AMD VCN با NVENC و NVDEC

در NVIDIA معمولاً موتورهای Encode و Decode با
نام‌های NVENC و NVDEC معرفی می‌شوند؛ اما AMD هر دو
قابلیت را در مجموعه VCN ارائه می‌کند.

مقایسه موتورهای ویدئویی AMD و NVIDIA
ویژگی AMD VCN NVIDIA
Decode VCN NVDEC
Encode VCN NVENC
معماری موتور مجتمع دو موتور مستقل
هدف Hardware Video Processing Hardware Video Processing

Codecهای پشتیبانی‌شده توسط VCN

قابلیت دقیق VCN به نسل GPU وابسته است و همه
محصولات AMD از Codecهای یکسانی پشتیبانی نمی‌کنند.

وضعیت عمومی Codecهای قابل استفاده در VCN
Codec Decode Encode توضیح
H.264 گسترده گسترده رایج‌ترین Codec
HEVC نسل‌های جدید نسل‌های جدید مناسب 4K و HDR
VP9 وابسته به نسل محدودتر بیشتر برای پخش وب
AV1 نسل‌های جدید نسل‌های جدید منتخب وابسته به معماری GPU

نسل‌های مختلف AMD VCN

AMD در طول نسل‌های مختلف معماری RDNA و Vega،
موتور Video Core Next را نیز توسعه داده است.
هر نسل علاوه بر بهبود کیفیت Encode و Decode،
قابلیت پشتیبانی از Codecهای جدید، وضوح‌های بالاتر
و مصرف انرژی کمتر را ارائه می‌دهد.

هنگام بررسی یک GPU تنها وجود عبارت VCN کافی نیست،
زیرا قابلیت‌های VCN 1.0 با VCN 4.x یا VCN 5.x
یکسان نیست.

روند تکامل نسل‌های AMD VCN
نسل ویژگی شاخص تغییرات کلی
VCN 1.x اولین نسل Video Core Next جایگزینی UVD و VCE
VCN 2.x بهبود Codecها افزایش کارایی Decode و Encode
VCN 3.x پشتیبانی گسترده‌تر از AV1 بهبود پردازش ویدئوی نسل جدید
VCN 4.x و جدیدتر افزایش Throughput بهینه‌سازی برای تولید محتوای حرفه‌ای

پشتیبانی Codecها در نسل‌های مختلف VCN

هر نسل VCN ممکن است Codecهای متفاوتی را برای
Decode یا Encode سخت‌افزاری پشتیبانی کند.

حتی در یک Codec مشترک نیز امکان تفاوت در Bit Depth،
Chroma، Profile، Level و Resolution وجود دارد.

نکات بررسی پشتیبانی Codec در VCN
Codec موارد قابل بررسی اهمیت
H.264 Profile، Level و Resolution سازگاری عمومی
HEVC Main، Main 10 و HDR تولید محتوای 4K
VP9 Profileها پخش آنلاین
AV1 Decode و Encode مستقل نسل جدید Streaming

پشتیبانی Bit Depth در AMD VCN

توانایی Decode یا Encode ویدئوهای ۸، ۱۰ و ۱۲ بیت
به نسل موتور VCN و Codec انتخاب‌شده وابسته است.

در Workflowهای HDR معمولاً استفاده از ۱۰ بیت اهمیت
بیشتری دارد و باید مشخصات دقیق GPU بررسی شود.

وضعیت عمومی Bit Depth در VCN
Bit Depth کاربرد وضعیت کلی
8-bit ویدئوی SDR پشتیبانی گسترده
10-bit HDR وابسته به نسل VCN
12-bit تولید حرفه‌ای محدودتر

پشتیبانی Chroma Subsampling

همانند سایر موتورهای سخت‌افزاری، بیشترین تمرکز
VCN روی فایل‌های 4:2:0 است.

فایل‌های 4:2:2 و 4:4:4 در بعضی Workflowهای
Broadcast و تولید حرفه‌ای استفاده می‌شوند و
پشتیبانی آن‌ها به نسل GPU وابسته است.

وضعیت عمومی Chroma در VCN
Chroma کاربرد وضعیت کلی
4:2:0 فیلم و Streaming رایج‌ترین حالت
4:2:2 Broadcast وابسته به نسل
4:4:4 VFX و Mastering محدودتر

محدودیت Resolution و Frame Rate

ظرفیت واقعی VCN تنها با عبارت «پشتیبانی از 4K»
مشخص نمی‌شود.

تعداد پیکسل، نرخ فریم، Codec، Bit Depth و تعداد
Streamهای هم‌زمان همگی بر توان موتور ویدئویی
تأثیر می‌گذارند.

اثر وضوح و نرخ فریم بر بار VCN
حالت بار نسبی توضیح
1080p 30fps کم پخش عمومی
1080p 60fps متوسط استریم
4K 60fps زیاد تولید محتوا
8K بسیار زیاد نسل‌های جدید

پردازش چند Stream هم‌زمان

VCN می‌تواند چند جریان ویدئویی را به‌صورت هم‌زمان
Decode یا Encode کند؛ اما ظرفیت واقعی به مدل GPU،
نسل VCN، Codec و Resolution وابسته است.

VCN در برابر Software Processing

اگر فایل ویدئویی توسط VCN پشتیبانی نشود، بخشی از
عملیات Encode یا Decode ممکن است به CPU منتقل شود.

مقایسه Hardware و Software Video Processing
معیار VCN CPU
مصرف CPU کمتر بیشتر
مصرف انرژی کمتر بیشتر
چند Stream بهتر محدودتر
مناسب برای Export بله وابسته به توان پردازنده

Intel Quick Sync Video چیست؟

Quick Sync Video یا QSV نام مجموعه قابلیت‌های
سخت‌افزاری Intel برای Decode، Encode و پردازش
ویدئو در بسیاری از پردازنده‌های دارای گرافیک
مجتمع و همچنین بعضی GPUهای مجزای Intel است.

این فناوری از موتورهای اختصاصی رسانه استفاده
می‌کند و می‌تواند عملیات مربوط به Codecهای ویدئویی
را بدون درگیرکردن کامل هسته‌های CPU یا واحدهای
عمومی گرافیکی انجام دهد.

Quick Sync در پخش فیلم، تدوین، استریم، ضبط صفحه،
تماس تصویری، Transcoding و تبدیل گروهی فایل‌های
ویدئویی کاربرد دارد.

Quick Sync در کدام بخش سخت‌افزار قرار دارد؟

در بسیاری از پردازنده‌های Intel، موتور رسانه در
بخش گرافیک مجتمع قرار دارد و از هسته‌های پردازشی
CPU جدا است.

در کارت‌های Intel Arc نیز موتورهای رسانه اختصاصی
داخل GPU مجزا قرار گرفته‌اند و می‌توانند مستقل از
گرافیک مجتمع پردازنده فعالیت کنند.

وجود پردازنده Intel به‌تنهایی تضمین نمی‌کند که
Quick Sync در دسترس باشد. مدل پردازنده، فعال‌بودن
گرافیک مجتمع، BIOS، درایور و نرم‌افزار هدف نیز
اهمیت دارند.

مسیر پردازش ویدئو با Quick Sync

در یک عملیات Transcoding، موتور Decode ابتدا فایل
ورودی را به فریم تبدیل می‌کند.

سپس Scaling، تبدیل رنگ، افکت یا پردازش‌های دیگر
انجام می‌شوند و در مرحله پایانی موتور Encode
خروجی فشرده را تولید می‌کند.

کاربردهای Intel Quick Sync

کاربردهای رایج Quick Sync Video
کاربرد نقش Quick Sync مزیت اصلی
پخش ویدئو Decode فایل فشرده مصرف کمتر CPU و باتری
تدوین Decode فایل‌های Timeline Preview روان‌تر
Export Encode خروجی کاهش زمان خروجی
استریم زنده Encode بلادرنگ فشار کمتر بر CPU
ضبط صفحه فشرده‌سازی تصویر دسکتاپ مصرف انرژی پایین‌تر
تماس تصویری Decode و Encode دوطرفه تأخیر و مصرف کمتر
Transcoding Server تبدیل چند فایل پردازش چند جریان هم‌زمان
Media Server تبدیل ویدئو برای دستگاه‌های مختلف کاهش بار پردازنده مرکزی

تفاوت Quick Sync و پردازش نرم‌افزاری CPU

Encode و Decode نرم‌افزاری روی CPU با اجرای
دستورهای عمومی انجام می‌شود و می‌تواند انعطاف
زیادی داشته باشد.

Quick Sync همان عملیات را با مدار اختصاصی انجام
می‌دهد و معمولاً سرعت بالاتر و مصرف انرژی کمتری
ارائه می‌کند.

مقایسه Quick Sync و پردازش نرم‌افزاری CPU
معیار Quick Sync CPU Software Processing
سرعت معمولاً بیشتر وابسته به CPU و Preset
مصرف CPU کمتر بیشتر
مصرف انرژی معمولاً کمتر بیشتر
انعطاف تنظیمات محدود به موتور و درایور معمولاً بیشتر
کیفیت در Preset بسیار کند وابسته به نسل موتور ممکن است بالاتر باشد
پردازش چند Stream مناسب‌تر در بسیاری از کاربردها به تعداد هسته‌های CPU وابسته است

تفاوت Quick Sync با Execution Unit و Xe Core

Execution Unitها و Xe Coreها واحدهای پردازشی
عمومی‌تری هستند که Shader، Compute، افکت و عملیات
قابل برنامه‌ریزی را اجرا می‌کنند.

موتور Quick Sync برای عملیات مشخص Codec طراحی شده
و نمی‌تواند جایگزین واحدهای عمومی در تمام مراحل
تدوین یا پردازش تصویر شود.

مقایسه موتور رسانه Intel با واحدهای عمومی GPU
معیار Quick Sync Execution Unit یا Xe Core
وظیفه اصلی Encode و Decode Codecها Shader، Compute و افکت
نوع سخت‌افزار مدار تخصصی واحد قابل برنامه‌ریزی
Scaling و افکت بخشی از مسیر رسانه یا واحدهای جانبی قابل انجام با Shader
انعطاف محدودتر بیشتر
بهره‌وری Encode بالا معمولاً پایین‌تر از موتور اختصاصی

چرا نسل Quick Sync اهمیت دارد؟

Intel در نسل‌های مختلف پردازنده و GPU، موتور رسانه
را توسعه داده و قابلیت‌های جدیدی مانند HEVC،
VP9، AV1، عمق رنگ بالاتر و ظرفیت بیشتر پردازش را
اضافه کرده است.

دو پردازنده Intel با نام Core i7 ممکن است به دلیل
تفاوت نسل، قابلیت‌های ویدئویی کاملاً متفاوتی داشته
باشند.

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

تغییرات عمومی Quick Sync میان نسل‌ها
ویژگی نسل‌های قدیمی‌تر نسل‌های جدیدتر
Codecها بیشتر متمرکز بر MPEG و H.264 HEVC، VP9 و AV1 در نسل‌های مناسب
Bit Depth عمدتاً ۸ بیت پشتیبانی گسترده‌تر از ۱۰ بیت
Resolution محدودتر پشتیبانی بهتر از 4K و 8K
کیفیت Encode ساده‌تر بهبود‌یافته
چند Stream ظرفیت کمتر Throughput بیشتر
بهره‌وری انرژی پایین‌تر بهتر

Codecهای قابل استفاده با Quick Sync

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

Decode و Encode هر Codec باید جداگانه بررسی شوند؛
زیرا ممکن است یک نسل فقط Decode سخت‌افزاری یک
Codec را ارائه دهد.

وضعیت عمومی Codecها در Quick Sync
Codec Decode Encode نکته
MPEG-2 در بسیاری از نسل‌ها وابسته به نسل و نرم‌افزار مناسب محتوای قدیمی
H.264 بسیار گسترده بسیار گسترده Profile و کیفیت به نسل وابسته است
HEVC در نسل‌های جدیدتر در نسل‌های مناسب Main 10 و Chroma بررسی شوند
VP9 در نسل‌های جدیدتر محدودتر بیشتر برای پخش وب اهمیت دارد
AV1 در نسل‌های جدید در GPUهای جدید منتخب Decode و Encode AV1 جدا هستند
JPEG و MJPEG وابسته به موتور و API وابسته به محصول کاربرد در دوربین و پردازش تصویر

تفاوت Decode و Encode در Quick Sync

مقایسه دو مسیر اصلی Quick Sync
معیار Hardware Decode Hardware Encode
ورودی جریان فشرده فریم خام یا پردازش‌شده
خروجی Frame Buffer Bitstream فشرده
کاربرد پخش، Preview و Timeline Export، ضبط و استریم
حساسیت به نسل Codec و Throughput Codec، کیفیت و Rate Control
دسترسی زودتر در نسل‌ها معمولاً Decode ممکن است دیرتر اضافه شود

پشتیبانی Quick Sync از ویدئوی ۸، ۱۰ و ۱۲ بیت

نسل‌های قدیمی‌تر Quick Sync بیشتر برای ویدئوی
۸ بیت طراحی شده بودند.

با گسترش HEVC، VP9، AV1 و HDR، پشتیبانی از ۱۰ بیت
در نسل‌های جدیدتر اهمیت بیشتری پیدا کرد.

پشتیبانی ۱۲ بیت و حالت‌های حرفه‌ای‌تر همچنان باید
برای Codec و محصول دقیق بررسی شود.

وضعیت عمومی Bit Depth در Quick Sync
عمق رنگ کاربرد وضعیت عمومی
8-bit SDR و استفاده عمومی گسترده
10-bit HDR و تدوین جدید وابسته به نسل و Codec
12-bit Workflow تخصصی محدودتر

پشتیبانی Quick Sync از 4:2:0، 4:2:2 و 4:4:4

بیشترین پشتیبانی سخت‌افزاری در Quick Sync معمولاً
مربوط به محتوای 4:2:0 است.

ویدئوهای 4:2:2 و 4:4:4 که در دوربین‌های حرفه‌ای،
Broadcast، Keying و VFX استفاده می‌شوند، ممکن است
فقط در نسل‌ها یا محصولات خاص شتاب‌دهی کامل داشته
باشند.

وضعیت عمومی Chroma در Quick Sync
Chroma کاربرد وضعیت عمومی
4:2:0 پخش، وب و استریم گسترده‌ترین پشتیبانی
4:2:2 دوربین حرفه‌ای و Broadcast وابسته به نسل و Codec
4:4:4 VFX، متن و Mastering محدودتر و تخصصی‌تر

آیا برای استفاده از Quick Sync باید گرافیک مجتمع فعال باشد؟

در سیستم‌هایی که Quick Sync داخل گرافیک مجتمع
پردازنده قرار دارد، معمولاً iGPU باید توسط BIOS
و سیستم‌عامل شناسایی و درایور آن نصب شده باشد.

در بعضی مادربردها، نصب کارت گرافیک مجزا باعث
غیرفعال‌شدن خودکار iGPU می‌شود و Quick Sync نیز
از دسترس نرم‌افزار خارج می‌شود.

گزینه‌هایی مانند Integrated Graphics،
iGPU Multi-Monitor یا Internal Graphics می‌توانند
برای فعال نگه‌داشتن موتور رسانه لازم باشند.

پردازنده‌های Intel بدون گرافیک مجتمع و Quick Sync

بعضی پردازنده‌های دسکتاپ Intel با پسوندهایی عرضه
می‌شوند که گرافیک مجتمع فعال ندارند.

در چنین مدل‌هایی، Quick Sync مبتنی بر iGPU نیز
در دسترس نیست و برای Encode یا Decode سخت‌افزاری
باید از GPU مجزا یا CPU استفاده شود.

بنابراین پیش از خرید پردازنده برای تدوین، استریم
یا Media Server باید وجود گرافیک مجتمع و قابلیت
Quick Sync مدل دقیق بررسی شود.

استفاده هم‌زمان از Quick Sync و GPU مجزا

در یک سیستم تدوین، ممکن است Quick Sync وظیفه
Decode یا Encode را انجام دهد و کارت NVIDIA یا AMD
برای افکت، Color Grading، رندر و پردازش Compute
استفاده شود.

این تقسیم وظایف می‌تواند ظرفیت کل سیستم را افزایش
دهد، اما نیازمند پشتیبانی صحیح نرم‌افزار و درایور
است.

Quick Sync در لپ‌تاپ‌ها

در بسیاری از لپ‌تاپ‌ها، گرافیک مجتمع Intel همیشه
بخشی از مسیر نمایش و مدیریت انرژی دستگاه است.

Quick Sync می‌تواند هنگام پخش ویدئو یا تماس تصویری
به‌جای GPU مجزای پرمصرف استفاده شود و عمر باتری را
افزایش دهد.

در لپ‌تاپ‌های ورک‌استیشن قدیمی، ممکن است گرافیک
مجتمع Intel Codec جدیدتری را نسبت به Quadro مجزا
پشتیبانی کند.

مزایای Quick Sync در لپ‌تاپ
مزیت نتیجه
Decode کم‌مصرف افزایش عمر باتری
فعال‌نشدن GPU مجزا دما و صدای کمتر
Encode سریع خروجی سریع‌تر در دستگاه کم‌مصرف
تقسیم بار آزادماندن GPU مجزا برای افکت
پخش Codec جدیدتر برتری احتمالی نسبت به GPU مجزای قدیمی

Quick Sync در سیستم‌ها و لپ‌تاپ‌های قدیمی

نسل‌های قدیمی Quick Sync معمولاً برای H.264 بسیار
مفید هستند، اما ممکن است HEVC ده‌بیتی، VP9 یا AV1
را به‌صورت کامل پشتیبانی نکنند.

در ورک‌استیشن‌های استوک، باید نسل پردازنده در کنار
مدل Quadro یا Radeon Pro بررسی شود؛ زیرا موتور
رسانه iGPU ممکن است نقش مهمی در تدوین و پخش داشته
باشد.

نکات بررسی Quick Sync در سیستم قدیمی
مورد پرسش لازم
نسل CPU موتور رسانه متعلق به کدام نسل است؟
مدل iGPU گرافیک مجتمع دقیقاً چه مدلی است؟
H.264 Decode و Encode در چه Resolutionی انجام می‌شوند؟
HEVC Main و Main 10 پشتیبانی می‌شوند؟
VP9 و AV1 Hardware Decode وجود دارد؟
BIOS گرافیک مجتمع فعال است؟
درایور نسخه مناسب Intel Graphics نصب شده است؟
نرم‌افزار برنامه از QSV این نسل پشتیبانی می‌کند؟

چگونه فعال‌بودن Quick Sync را بررسی کنیم؟

هنگام پخش، Export یا Transcoding می‌توان فعالیت
موتورهای Video Decode و Video Encode گرافیک Intel
را در ابزارهای مانیتورینگ بررسی کرد.

کاهش مصرف CPU همراه با افزایش فعالیت موتور رسانه
می‌تواند نشان دهد Quick Sync در حال استفاده است.

نشانه‌های استفاده از Quick Sync
نشانه تفسیر
Video Decode فعال Decode سخت‌افزاری در حال انجام است
Video Encode فعال خروجی با Quick Sync ساخته می‌شود
مصرف CPU کمتر بخشی از پردازش به موتور رسانه منتقل شده است
فعالیت iGPU با GPU مجزا Quick Sync در کنار کارت مجزا فعال است
Video Engine بدون 3D Load زیاد موتور اختصاصی مستقل از رندر سه‌بعدی کار می‌کند

چرا Quick Sync در نرم‌افزار فعال نمی‌شود؟

دلایل رایج غیرفعال‌بودن Quick Sync
علت توضیح اقدام پیشنهادی
نبود iGPU مدل پردازنده گرافیک مجتمع ندارد بررسی مشخصات مدل دقیق CPU
iGPU غیرفعال BIOS گرافیک مجتمع را خاموش کرده است فعال‌کردن Integrated Graphics
درایور نصب نیست موتور رسانه توسط سیستم شناسایی نمی‌شود نصب درایور Intel Graphics
Codec پشتیبانی‌نشده نسل QSV از حالت فایل پشتیبانی نمی‌کند بررسی Codec، Profile و Bit Depth
Hardware Acceleration خاموش تنظیمات نرم‌افزار غیرفعال است فعال‌کردن QSV در تنظیمات برنامه
نسخه نرم‌افزار قدیمی موتور جدیدتر را پشتیبانی نمی‌کند به‌روزرسانی نرم‌افزار
انتخاب Encoder دیگر برنامه از CPU یا GPU مجزا استفاده می‌کند انتخاب Intel Quick Sync
محدودیت سیستم مجازی موتور رسانه به ماشین مجازی منتقل نشده است بررسی قابلیت Passthrough

تکامل Quick Sync Video در نسل‌های مختلف Intel

Quick Sync از زمان معرفی تاکنون در هر نسل پردازنده
Intel بهبود یافته است. این بهبودها شامل افزایش
کیفیت Encode، پشتیبانی از Codecهای جدید، افزایش
ظرفیت Decode و کاهش مصرف انرژی هستند.

بنابراین هنگام مقایسه دو پردازنده Intel، نسل
Media Engine اهمیت بیشتری از نام تجاری Core i5،
Core i7 یا Core Ultra دارد.

روند کلی پیشرفت Quick Sync
نسل مهم‌ترین تغییر نتیجه
نسل‌های اولیه تمرکز بر H.264 Encode و Decode سریع‌تر
نسل‌های میانی پشتیبانی HEVC و VP9 آماده برای 4K و HDR
نسل‌های جدید پشتیبانی AV1 Streaming و تولید محتوای نسل جدید
Intel Arc و Core Ultra Media Engine پیشرفته‌تر کیفیت بهتر و ظرفیت بیشتر

اهمیت Profile و Level در Quick Sync

پشتیبانی از یک Codec به این معنی نیست که تمامی
Profileها و Levelهای آن نیز توسط موتور رسانه
Intel پشتیبانی می‌شوند.

ممکن است یک پردازنده H.265 را Decode کند اما از
Main 10، Profileهای خاص یا Resolutionهای بالاتر
پشتیبانی کامل نداشته باشد.

پارامترهای مؤثر بر Hardware Decode
پارامتر تأثیر
Codec تعیین نوع فشرده‌سازی
Profile تعیین قابلیت‌های Codec
Level تعیین سقف Resolution و Bitrate
Bit Depth تعیین عمق رنگ
Chroma تعیین ساختار نمونه‌برداری رنگ

پشتیبانی از Resolutionهای مختلف

ظرفیت واقعی موتور رسانه تنها با عبارت
«پشتیبانی از 4K» مشخص نمی‌شود.

نرخ فریم، تعداد Stream، Codec و Bit Depth نیز
در میزان بار پردازشی Quick Sync نقش دارند.

اثر Resolution بر بار موتور رسانه
حالت بار نسبی نمونه کاربرد
1080p پایین پخش عمومی
1440p متوسط تولید محتوا
4K زیاد تدوین و HDR
8K بسیار زیاد Workflow حرفه‌ای

پردازش چند Stream هم‌زمان

موتور Quick Sync می‌تواند هم‌زمان چند جریان
ویدئویی را Decode یا Encode کند، اما ظرفیت واقعی
به نسل Media Engine، Codec، وضوح تصویر و حافظه
سیستم بستگی دارد.

مصرف حافظه در Quick Sync

هنگام Decode، فریم‌های خام داخل حافظه گرافیکی
ذخیره می‌شوند و هرچه Resolution، Bit Depth و
Chroma بیشتر باشد، فضای بیشتری اشغال خواهد شد.

عوامل افزایش مصرف حافظه
عامل اثر
Resolution بالاتر افزایش اندازه Frame Buffer
Bit Depth بیشتر داده بیشتر در هر پیکسل
Chroma کامل‌تر افزایش اطلاعات رنگ
چند Stream ایجاد چند Buffer هم‌زمان

Zero-Copy Processing در Quick Sync

در بسیاری از Workflowهای حرفه‌ای، فریم Decodeشده
مستقیماً داخل حافظه گرافیکی باقی می‌ماند و بدون
انتقال غیرضروری به RAM وارد مراحل بعدی پردازش
می‌شود.

این روش موجب کاهش Latency، کاهش استفاده از
گذرگاه حافظه و افزایش سرعت Export خواهد شد.

استفاده Quick Sync در نرم‌افزارهای حرفه‌ای

بسیاری از نرم‌افزارهای تدوین، تبدیل و استریم
از Quick Sync برای Decode، Preview یا Export
استفاده می‌کنند.

نمونه کاربرد Quick Sync در نرم‌افزارها
نرم‌افزار کاربرد Quick Sync
Adobe Premiere Pro Decode و Export
DaVinci Resolve Decode بعضی Codecها
HandBrake Hardware Transcoding
OBS Studio Encode برای استریم
FFmpeg Decode و Encode سخت‌افزاری

Codecهای ویدئویی (Video Codecs)

Codecهای ویدئویی روش فشرده‌سازی و بازیابی داده‌های
تصویری را مشخص می‌کنند. تقریباً تمام موتورهای
سخت‌افزاری مانند NVIDIA NVENC، NVDEC،
AMD VCN و Intel Quick Sync بر اساس Codecهای
مختلف کار می‌کنند.

Codec ویدئویی چیست؟

واژه Codec از ترکیب دو عبارت
Coder و
Decoder
ساخته شده است.

Codec مشخص می‌کند داده‌های تصویری چگونه
فشرده شوند، چگونه ذخیره شوند و هنگام پخش
چگونه دوباره به تصویر قابل نمایش تبدیل شوند.

بدون Codec حجم فایل‌های ویدئویی چندین برابر
افزایش پیدا می‌کند و انتقال یا ذخیره آن‌ها
بسیار دشوار خواهد بود.

چرا ویدئو باید فشرده شود؟

هر فریم ویدئو از میلیون‌ها پیکسل تشکیل شده است.
ذخیره هزاران فریم بدون فشرده‌سازی به فضای
بسیار زیادی نیاز دارد.

Codecها اطلاعات تکراری میان پیکسل‌ها و میان
فریم‌های متوالی را حذف یا بازنویسی می‌کنند تا
حجم فایل کاهش یابد.

تفاوت Encode و Decode

عملیات Encode داده خام را به فایل فشرده تبدیل
می‌کند، در حالی که Decode فایل فشرده را برای
نمایش یا پردازش دوباره به فریم تبدیل می‌کند.

تفاوت Encode و Decode
ویژگی Encode Decode
ورودی تصویر خام فایل فشرده
خروجی فایل فشرده فریم خام
کاربرد ذخیره و استریم نمایش و تدوین

مسیر کلی پردازش Codec

Codecهای Lossy و Lossless

برخی Codecها برای کاهش شدید حجم، بخشی از اطلاعات
تصویر را حذف می‌کنند. این گروه را
Lossy می‌نامند.

گروه دیگر اطلاعات تصویر را بدون حذف دائمی
ذخیره می‌کنند و به آن‌ها
Lossless
گفته می‌شود.

مقایسه Codecهای Lossy و Lossless
ویژگی Lossy Lossless
حجم فایل کمتر بیشتر
کیفیت کاهش احتمالی حفظ کامل اطلاعات
کاربرد وب و استریم آرشیو و تولید حرفه‌ای

تفاوت Intra-frame و Inter-frame

بعضی Codecها هر فریم را مستقل ذخیره می‌کنند که
به آن Intra-frame گفته می‌شود.

Codecهای دیگر اطلاعات فریم‌های قبلی و بعدی را
نیز برای کاهش حجم استفاده می‌کنند که به آن
Inter-frame گفته می‌شود.

مقایسه دو روش فشرده‌سازی
ویژگی Intra-frame Inter-frame
هر فریم مستقل بله خیر
حجم فایل بیشتر کمتر
مناسب تدوین بسیار مناسب نیازمند Decode بیشتر

H.264 / AVC

H.264 که با نام Advanced Video Coding یا AVC نیز
شناخته می‌شود، یکی از موفق‌ترین و پراستفاده‌ترین
Codecهای ویدئویی تاریخ است و هنوز هم در وب،
استریم، دوربین‌ها، تماس تصویری، سیستم‌های نظارتی
و بسیاری از نرم‌افزارهای تدوین استفاده می‌شود.

H.264 چیست؟

H.264 یک استاندارد فشرده‌سازی ویدئو است که توسط
گروه‌های استانداردسازی ITU-T و ISO/IEC توسعه داده
شد.

هدف این استاندارد، کاهش حجم فایل بدون افت شدید
کیفیت تصویر و فراهم‌کردن امکان انتقال ویدئو روی
اینترنت، رسانه‌های ذخیره‌سازی و شبکه‌های مخابراتی
است.

تقریباً تمام GPUهای امروزی دارای موتور سخت‌افزاری
برای Decode و Encode فایل‌های H.264 هستند.

چرا H.264 این‌قدر محبوب شد؟

H.264 نسبت به نسل‌های قدیمی‌تر مانند MPEG-2
کیفیت مشابهی را با حجم بسیار کمتر ارائه می‌دهد.

همچنین تقریباً تمام سیستم‌عامل‌ها، مرورگرها،
تلفن‌های همراه، تلویزیون‌های هوشمند، دوربین‌ها و
کارت‌های گرافیک از آن پشتیبانی می‌کنند.

دلایل محبوبیت H.264
عامل توضیح
حجم کم کاهش قابل توجه اندازه فایل
کیفیت مناسب کیفیت بالا نسبت به Bitrate
سازگاری گسترده تقریباً تمام دستگاه‌ها
Hardware Acceleration پشتیبانی توسط اکثر GPUها
اکوسیستم نرم‌افزاری پشتیبانی تقریباً همه برنامه‌ها

مسیر پردازش H.264

کاربردهای H.264

مهم‌ترین کاربردهای H.264
حوزه کاربرد
YouTube بارگذاری ویدئو
تماس تصویری Zoom، Teams و Meet
دوربین‌های دیجیتال ضبط ویدئو
سیستم‌های نظارتی ذخیره تصاویر دوربین
استریم زنده Twitch و بسیاری از سرویس‌ها
تدوین ویدئو فایل ورودی و خروجی

پشتیبانی سخت‌افزاری H.264

تقریباً تمام موتورهای رسانه امروزی از H.264
پشتیبانی می‌کنند و این Codec به استاندارد مشترک
صنعت تبدیل شده است.

پشتیبانی H.264 در موتورهای سخت‌افزاری
موتور رسانه Decode Encode
NVIDIA NVDEC / NVENC بله بله
AMD VCN بله بله
Intel Quick Sync بله بله
Apple Video Engine بله بله

مزایای H.264

مزیت‌های H.264
مزیت توضیح
سازگاری بسیار بالا تقریباً همه دستگاه‌ها
کیفیت مناسب نسبت خوب کیفیت به حجم
سرعت Decode پشتیبانی سخت‌افزاری گسترده
مناسب Streaming Bitrate انعطاف‌پذیر
نرم‌افزارهای فراوان پشتیبانی کامل اکثر برنامه‌ها

محدودیت‌های H.264

با وجود محبوبیت بالا، H.264 نسبت به Codecهای
جدید مانند HEVC و AV1 راندمان فشرده‌سازی پایین‌تری
دارد.

محدودیت‌های H.264
محدودیت اثر
حجم بیشتر نسبت به HEVC Bitrate بالاتر
راندمان کمتر از AV1 فایل بزرگ‌تر
محدودیت در Workflowهای جدید مناسب نبودن برای بعضی پروژه‌های 8K

Profile در H.264 چیست؟

Profile مجموعه‌ای از قابلیت‌های مجاز در استاندارد
H.264 است و مشخص می‌کند Encoder و Decoder باید از
چه ویژگی‌هایی پشتیبانی کنند.

دو فایل H.264 ممکن است کاملاً متفاوت باشند؛ زیرا
یکی با Baseline Profile و دیگری با High Profile
تولید شده است.

معروف‌ترین Profileهای H.264
Profile کاربرد ویژگی
Baseline تماس تصویری و موبایل ساده و کم‌مصرف
Main تلویزیون و Broadcast فشرده‌سازی بهتر
High Blu-ray و Streaming کیفیت بالاتر
High 10 تولید حرفه‌ای پشتیبانی از 10-bit
High 4:2:2 Broadcast Chroma حرفه‌ای
High 4:4:4 VFX و Mastering کیفیت بسیار بالا

Level در H.264 چیست؟

Level محدودیت‌های سخت‌افزاری و عملیاتی فایل را
مشخص می‌کند؛ مانند بیشترین Resolution، نرخ فریم،
تعداد Macroblockها و Bitrate.

ممکن است دو فایل هر دو High Profile باشند اما
یکی Level 4.1 و دیگری Level 5.2 داشته باشد که
نیازمندی سخت‌افزاری متفاوتی ایجاد می‌کند.

نمونه‌ای از Levelهای H.264
Level کاربرد رایج ظرفیت کلی
3.1 HD متوسط
4.0 Full HD بالا
5.1 4K بسیار بالا
5.2 4K با نرخ فریم بیشتر بسیار زیاد

ساختار Bitstream در H.264

خروجی Encoder مجموعه‌ای از واحدهای داده است که
Bitstream نامیده می‌شود.

این Bitstream شامل اطلاعات تصویر، پارامترهای Codec،
Headerها و داده‌های موردنیاز Decoder است.

NAL Unit چیست؟

Network Abstraction Layer یا NAL لایه‌ای است که
داده‌های فشرده H.264 را برای انتقال و ذخیره‌سازی
بسته‌بندی می‌کند.

تقریباً تمام فایل‌های H.264 از مجموعه‌ای از
NAL Unitها تشکیل شده‌اند.

انواع متداول NAL Unit
نوع وظیفه
SPS اطلاعات کلی ویدئو
PPS پارامترهای تصویر
Slice داده تصویری
SEI اطلاعات جانبی

SPS و PPS چه هستند؟

Decoder قبل از Decode تصویر باید پارامترهای اصلی
فایل را دریافت کند.

این اطلاعات داخل Sequence Parameter Set و Picture
Parameter Set قرار می‌گیرند.

تفاوت SPS و PPS
بخش اطلاعات
SPS Resolution، Profile، Level و…
PPS پارامترهای مربوط به Sliceها

Macroblock در H.264

یکی از واحدهای اصلی پردازش در H.264، Macroblock
است که معمولاً ناحیه‌ای 16×16 پیکسلی را نمایش
می‌دهد.

بسیاری از مراحل Encode مانند Motion Estimation،
Prediction و Transform بر اساس Macroblock انجام
می‌شوند.

انواع فریم در H.264

یکی از مهم‌ترین دلایل حجم پایین فایل‌های H.264،
استفاده از چند نوع فریم مختلف است.

تمام فریم‌ها اطلاعات کامل تصویر را ذخیره نمی‌کنند.
بعضی فریم‌ها تنها تغییرات نسبت به فریم‌های دیگر را
ثبت می‌کنند.

انواع اصلی فریم در H.264
نوع فریم وابستگی حجم تقریبی کاربرد
I-Frame مستقل زیاد شروع گروه فریم
P-Frame وابسته به گذشته متوسط ثبت تغییرات
B-Frame وابسته به گذشته و آینده کم بیشترین فشرده‌سازی

I-Frame چیست؟

I-Frame یا Intra Frame تصویری کامل و مستقل است که
بدون نیاز به سایر فریم‌ها Decode می‌شود.

این فریم‌ها معمولاً بزرگ‌ترین حجم را دارند اما
سریع‌ترین نقطه برای شروع پخش یا جابه‌جایی در
Timeline هستند.

ویژگی‌های I-Frame
وابستگی ندارد
کیفیت کامل
حجم زیاد
مناسب برای Seek بله

P-Frame چیست؟

P-Frame فقط تغییرات نسبت به فریم‌های قبلی را ذخیره
می‌کند.

اگر بخشی از تصویر ثابت باشد، Encoder دوباره آن را
ذخیره نمی‌کند و تنها اختلاف‌ها ثبت می‌شوند.

B-Frame چیست؟

B-Frame علاوه بر فریم گذشته، از فریم آینده نیز برای
پیش‌بینی تصویر استفاده می‌کند.

همین موضوع باعث می‌شود حجم فایل کاهش یابد اما
عملیات Decode پیچیده‌تر شود.

GOP چیست؟

Group of Pictures یا GOP مجموعه‌ای از فریم‌های
وابسته به یک I-Frame است.

هرچه فاصله بین I-Frameها بیشتر باشد، حجم فایل کمتر
می‌شود اما جابه‌جایی و ویرایش فایل دشوارتر خواهد شد.

مقایسه I، P و B Frame

مقایسه سه نوع اصلی فریم
ویژگی I P B
وابستگی ندارد گذشته گذشته و آینده
حجم زیاد متوسط کم
کیفیت مستقل کامل خیر خیر
سرعت Seek بسیار خوب متوسط ضعیف
فشرده‌سازی کم خوب بسیار زیاد

Motion Estimation چیست؟

Motion Estimation فرآیندی است که Encoder حرکت
اشیاء را بین فریم‌های متوالی پیدا می‌کند.

به‌جای ذخیره مجدد کل تصویر، تنها بردار حرکت
(Motion Vector) ذخیره می‌شود.

Motion Compensation چیست؟

پس از یافتن بردار حرکت، Decoder تصویر جدید را با
استفاده از اطلاعات فریم قبلی و Motion Vector
بازسازی می‌کند.

این روش یکی از مهم‌ترین دلایل کاهش حجم فایل‌های
H.264 محسوب می‌شود.

Motion Vector چیست؟

Motion Vector برداری است که جهت و مقدار جابه‌جایی
هر Macroblock را نسبت به فریم مرجع نشان می‌دهد.

به‌جای ذخیره دوباره تصویر، تنها این بردارها ذخیره
می‌شوند که حجم فایل را به‌شدت کاهش می‌دهد.

تفاوت CABAC و CAVLC

پس از پایان مراحل فشرده‌سازی تصویر، داده‌ها باید
به‌صورت بیتی کدگذاری شوند.

H.264 دو روش اصلی برای این کار دارد:
CAVLC و CABAC.

مقایسه CABAC و CAVLC
ویژگی CAVLC CABAC
پیچیدگی کمتر بیشتر
سرعت Encode بیشتر کمتر
راندمان فشرده‌سازی کمتر بیشتر
حجم فایل بزرگ‌تر کوچک‌تر

Reference Frame چیست؟

هنگام Encode، بسیاری از فریم‌ها به‌صورت مستقل
ذخیره نمی‌شوند؛ بلکه از یک یا چند فریم قبلی به
عنوان مرجع (Reference Frame) استفاده می‌کنند.

هرچه تعداد Reference Frameها بیشتر باشد، Encoder
می‌تواند تطابق دقیق‌تری پیدا کند، اما عملیات
Encode و Decode پیچیده‌تر خواهد شد.

Multiple Reference Frame

H.264 می‌تواند به‌جای یک فریم مرجع، از چندین
Reference Frame استفاده کند.

این قابلیت کیفیت فشرده‌سازی را افزایش می‌دهد،
اما حافظه، توان پردازشی و زمان Encode بیشتری
نیاز خواهد داشت.

اثر تعداد Reference Frameها
تعداد مرجع کیفیت سرعت حافظه
1 مناسب سریع کم
چند مرجع بهتر کندتر بیشتر

Transform در H.264

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

هدف این مرحله تبدیل داده‌های فضایی به ضرایبی است
که فشرده‌سازی آن‌ها ساده‌تر باشد.

Quantization چیست؟

مهم‌ترین مرحله کاهش حجم فایل، Quantization است.

در این مرحله بخشی از اطلاعات کم‌اهمیت حذف یا
تقریب زده می‌شود تا حجم Bitstream کاهش پیدا کند.

هرچه Quantization شدیدتر باشد، حجم فایل کمتر و
احتمال افت کیفیت بیشتر خواهد بود.

اثر Quantization
Quantization حجم فایل کیفیت
کم بیشتر بهتر
زیاد کمتر پایین‌تر

Quantization Parameter (QP)

شدت Quantization توسط پارامتری به نام
Quantization Parameter یا QP کنترل می‌شود.

افزایش مقدار QP باعث کاهش حجم فایل و افزایش
افت کیفیت می‌شود.

اثر تغییر QP
QP کیفیت حجم فایل
پایین بسیار خوب زیاد
متوسط متعادل متوسط
بالا افت محسوس کم

Deblocking Filter

Quantization ممکن است باعث ایجاد مرزهای قابل مشاهده
میان Macroblockها شود.

Deblocking Filter این مرزها را نرم‌تر می‌کند تا
تصویر طبیعی‌تر دیده شود.

Rate Control چیست؟

Rate Control تعیین می‌کند Encoder چگونه Bitrate
فایل را در طول Encode مدیریت کند.

این بخش تعادل میان کیفیت، حجم فایل و پهنای باند
را کنترل می‌کند.

روش‌های مختلف Rate Control

مقایسه روش‌های کنترل Bitrate
روش ویژگی اصلی کاربرد
CBR Bitrate ثابت Streaming
VBR Bitrate متغیر آرشیو و کیفیت بهتر
CQP QP ثابت تست و تولید محتوا
CRF کیفیت تقریباً ثابت x264 و FFmpeg

Hardware Acceleration در H.264

امروزه تقریباً تمام GPUهای مدرن دارای موتور
اختصاصی برای Decode و Encode فایل‌های H.264
هستند.

موتورهای سخت‌افزاری H.264
سازنده Decode Encode
NVIDIA NVDEC NVENC
AMD VCN VCN
Intel Quick Sync Quick Sync
Apple Media Engine Media Engine

H.265 / HEVC

H.265 که با نام High Efficiency Video Coding
یا HEVC نیز شناخته می‌شود، نسل بعدی H.264 است.
این Codec با هدف دستیابی به کیفیت تصویری مشابه
با حدود نصف Bitrate H.264 طراحی شده و امروزه
در ویدئوهای 4K، HDR، پخش آنلاین، Blu-ray UHD،
دوربین‌های حرفه‌ای و بسیاری از سرویس‌های
استریم استفاده می‌شود.

H.265 یا HEVC چیست؟

HEVC یک استاندارد فشرده‌سازی ویدئویی است که
برای افزایش راندمان نسبت به H.264 توسعه یافت.

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

امروزه تقریباً تمام GPUهای جدید دارای موتور
سخت‌افزاری برای Decode فایل‌های HEVC هستند و
بسیاری از آن‌ها Encode سخت‌افزاری را نیز
پشتیبانی می‌کنند.

چرا HEVC توسعه یافت؟

با افزایش وضوح تصویر به 4K، 8K و HDR،
H.264 دیگر راندمان کافی برای کاهش حجم فایل
نداشت.

HEVC با افزایش بهره‌وری فشرده‌سازی، امکان
انتقال و ذخیره ویدئوهای باکیفیت را با
پهنای باند کمتر فراهم کرد.

اهداف طراحی HEVC
هدف نتیجه
کاهش Bitrate حجم فایل کمتر
پشتیبانی 4K و 8K کیفیت بالاتر
HDR عمق رنگ بیشتر
Streaming مصرف کمتر پهنای باند

مسیر پردازش HEVC

مزایای HEVC

مهم‌ترین مزایای HEVC
مزیت توضیح
راندمان بیشتر کیفیت مشابه با Bitrate کمتر
مناسب 4K و 8K فشرده‌سازی بهتر تصاویر بزرگ
پشتیبانی HDR کیفیت رنگ بهتر
مناسب Streaming کاهش مصرف پهنای باند
کیفیت بالاتر Artifact کمتر نسبت به H.264

محدودیت‌های HEVC

در مقابل راندمان بالاتر، Encode و Decode
HEVC نسبت به H.264 پیچیده‌تر هستند.

همچنین برخی تجهیزات قدیمی از Decode سخت‌افزاری
HEVC پشتیبانی نمی‌کنند.

محدودیت‌های HEVC
محدودیت اثر
Encode پیچیده‌تر زمان پردازش بیشتر
نیاز پردازشی بالاتر وابستگی بیشتر به GPU
سازگاری کمتر بعضی دستگاه‌های قدیمی

مقایسه H.264 و HEVC

مقایسه دو Codec محبوب
ویژگی H.264 HEVC
راندمان فشرده‌سازی خوب بسیار بهتر
حجم فایل بیشتر کمتر
نیاز پردازشی کمتر بیشتر
مناسب 4K قابل استفاده بسیار مناسب
HDR محدود مناسب‌تر

کاربردهای HEVC

مهم‌ترین کاربردهای HEVC
حوزه کاربرد
UHD Blu-ray فیلم‌های 4K
Streaming سرویس‌های آنلاین
دوربین‌های حرفه‌ای ضبط 4K و 8K
پهپادها ضبط با Bitrate پایین‌تر
آرشیو ویدئو کاهش فضای ذخیره‌سازی

Coding Tree Unit (CTU)

بزرگ‌ترین تفاوت HEVC با H.264 استفاده از
Coding Tree Unit (CTU)
به‌جای Macroblock است.

در H.264 هر Macroblock معمولاً اندازه ثابتی برابر
با 16×16 پیکسل داشت، اما در HEVC اندازه CTU
می‌تواند تا 64×64 پیکسل افزایش یابد.

این ساختار انعطاف‌پذیر باعث افزایش راندمان
فشرده‌سازی، مخصوصاً در تصاویر 4K و 8K می‌شود.

مقایسه Macroblock و CTU
ویژگی H.264 HEVC
واحد اصلی Macroblock CTU
اندازه معمول 16×16 تا 64×64
انعطاف‌پذیری محدود بسیار زیاد

Coding Tree چیست؟

هر CTU به‌صورت پویا به بلوک‌های کوچک‌تر تقسیم
می‌شود تا بهترین ساختار برای فشرده‌سازی انتخاب شود.

این تقسیم‌بندی با ساختاری درختی انجام می‌شود که
دلیل نام‌گذاری Coding Tree نیز همین موضوع است.

Coding Unit (CU)

Coding Unit کوچک‌ترین واحد تصمیم‌گیری برای Encode
است و مشخص می‌کند هر بخش تصویر چگونه فشرده شود.

اندازه CU می‌تواند متناسب با پیچیدگی تصویر تغییر
کند؛ بنابراین بخش‌های ساده و پیچیده تصویر به شکل
متفاوتی Encode می‌شوند.

Prediction Unit (PU)

Prediction Unit نحوه پیش‌بینی هر بخش تصویر را
تعیین می‌کند.

هر CU می‌تواند شامل یک یا چند Prediction Unit
باشد تا بهترین روش پیش‌بینی انتخاب شود.

وظیفه Prediction Unit
وظیفه توضیح
Intra Prediction پیش‌بینی از همان فریم
Inter Prediction پیش‌بینی از فریم‌های مرجع

Transform Unit (TU)

پس از پایان Prediction، اختلاف تصویر وارد مرحله
Transform می‌شود.

Transform Unit مشخص می‌کند ضرایب Transform چگونه
تولید و Quantize شوند.

ساختار داخلی CTU

Profileهای اصلی HEVC

مانند H.264، استاندارد HEVC نیز دارای Profileهای
مختلف است که قابلیت‌های Codec را مشخص می‌کنند.

Profileهای متداول HEVC
Profile ویژگی کاربرد
Main 8-bit استفاده عمومی
Main 10 10-bit HDR و 4K
Main Still Picture تصویر ثابت کاربردهای خاص

Level در HEVC

Level در HEVC نیز همانند H.264 محدودیت‌هایی مانند
حداکثر Resolution، نرخ فریم، تعداد CTUها و Bitrate
را تعیین می‌کند.

نمونه Levelهای HEVC
Level کاربرد رایج
4 Full HD
5 4K
6 8K

Intra Prediction در HEVC

Intra Prediction روشی است که در آن تصویر تنها با
استفاده از اطلاعات همان فریم پیش‌بینی می‌شود و
نیازی به مراجعه به فریم‌های قبلی یا بعدی وجود ندارد.

HEVC تعداد حالت‌های پیش‌بینی درون‌فریمی را نسبت به
H.264 به‌طور قابل توجهی افزایش داده است و به همین
دلیل می‌تواند لبه‌ها و جزئیات تصویر را دقیق‌تر
مدل‌سازی کند.

مزایای Intra Prediction
ویژگی نتیجه
پیش‌بینی از همان فریم عدم وابستگی به فریم‌های دیگر
جهت‌های بیشتر دقت بالاتر در لبه‌ها
خطای کمتر فشرده‌سازی بهتر

Inter Prediction در HEVC

Inter Prediction از اطلاعات فریم‌های مرجع برای
پیش‌بینی تصویر جدید استفاده می‌کند.

در HEVC الگوریتم‌های جستجوی حرکت نسبت به H.264
بهینه‌تر شده‌اند و همین موضوع یکی از دلایل اصلی
افزایش راندمان این Codec است.

Motion Vector در HEVC

Motion Vector جهت و میزان جابه‌جایی هر بخش تصویر را
نسبت به فریم مرجع مشخص می‌کند.

HEVC از Motion Vectorهای دقیق‌تر و ساختارهای
پیشرفته‌تری برای کاهش حجم فایل استفاده می‌کند.

Advanced Motion Vector Prediction (AMVP)

AMVP روشی است که Motion Vector مناسب را از میان
بردارهای اطراف انتخاب می‌کند تا نیاز به ذخیره
اطلاعات اضافی کاهش یابد.

این قابلیت یکی از ابزارهای افزایش راندمان
فشرده‌سازی در HEVC محسوب می‌شود.

Merge Mode

در بسیاری از نواحی تصویر، Motion Vector مناسب
قبلاً توسط بلوک‌های مجاور محاسبه شده است.

Merge Mode اجازه می‌دهد همان Motion Vector دوباره
استفاده شود و دیگر نیازی به ذخیره بردار جدید نباشد.

مزایای Merge Mode
مزیت اثر
داده کمتر کاهش حجم Bitstream
Encode سریع‌تر کاهش محاسبات
راندمان بیشتر فشرده‌سازی بهتر

Tile چیست؟

Tile تصویر را به چند ناحیه مستقل تقسیم می‌کند تا
عملیات Encode و Decode بتواند به‌صورت موازی انجام
شود.

این قابلیت مخصوصاً برای پردازنده‌های چند هسته‌ای و
GPUهای مدرن اهمیت زیادی دارد.

Wavefront Parallel Processing (WPP)

WPP روشی برای اجرای موازی Encode و Decode است که
بدون تقسیم تصویر به Tile، چندین ردیف CTU را
هم‌زمان پردازش می‌کند.

این فناوری باعث استفاده بهتر از CPUهای چند هسته‌ای
و افزایش سرعت پردازش می‌شود.

مقایسه Tile و WPP

تفاوت دو روش پردازش موازی
ویژگی Tile WPP
تقسیم تصویر بله خیر
پردازش موازی بالا بالا
راندمان فشرده‌سازی اندکی کمتر بهتر

Sample Adaptive Offset (SAO)

پس از پایان Decode ممکن است به علت Quantization
بخشی از جزئیات تصویر از بین برود یا لبه‌ها به‌درستی
بازسازی نشوند.

HEVC برای کاهش این خطاها از مرحله‌ای به نام
Sample Adaptive Offset (SAO)
استفاده می‌کند.

SAO مقادیر برخی پیکسل‌ها را پس از Decode اصلاح
می‌کند تا تصویر طبیعی‌تر و Artifactها کمتر شوند.

Deblocking Filter در HEVC

مانند H.264، در HEVC نیز پس از Quantization ممکن
است مرز میان بلوک‌ها قابل مشاهده باشد.

Deblocking Filter این مرزها را نرم‌تر می‌کند و
ظاهر تصویر را طبیعی‌تر نشان می‌دهد.

وظیفه Deblocking Filter
قبل از فیلتر بعد از فیلتر
مرزهای قابل مشاهده لبه‌های نرم‌تر
Block Artifact تصویر طبیعی‌تر

Reference Picture Set (RPS)

HEVC برای مدیریت فریم‌های مرجع از ساختاری به نام
Reference Picture Set استفاده
می‌کند.

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

Entropy Coding

آخرین مرحله Encode، تبدیل اطلاعات فشرده‌شده به
Bitstream نهایی است.

HEVC مانند High Profile در H.264 از CABAC برای
افزایش راندمان فشرده‌سازی استفاده می‌کند.

ویژگی‌های CABAC در HEVC
ویژگی اثر
فشرده‌سازی بهتر کاهش حجم فایل
پیچیدگی بیشتر Encode سنگین‌تر
راندمان بالا کیفیت بهتر در Bitrate یکسان

Bit Depth در HEVC

HEVC از Bit Depthهای مختلف پشتیبانی می‌کند و
نسخه Main 10 به یکی از رایج‌ترین Profileهای
این Codec تبدیل شده است.

Bit Depthهای رایج
Bit Depth کاربرد
8-bit استفاده عمومی
10-bit HDR و تولید حرفه‌ای
12-bit کاربردهای تخصصی

Chroma Sampling در HEVC

HEVC از ساختارهای مختلف نمونه‌برداری رنگ
پشتیبانی می‌کند.

حالت‌های Chroma Sampling
حالت کاربرد
4:2:0 رایج‌ترین حالت
4:2:2 Broadcast
4:4:4 تدوین حرفه‌ای و VFX

HEVC و HDR

یکی از مهم‌ترین دلایل محبوبیت HEVC، پشتیبانی مناسب
از محتوای HDR است.

ترکیب Main 10، عمق رنگ 10-bit و فضای رنگ گسترده،
HEVC را به گزینه‌ای مناسب برای ویدئوهای HDR تبدیل
کرده است.

پشتیبانی سخت‌افزاری HEVC

موتورهای سخت‌افزاری HEVC
موتور رسانه Decode Encode
NVIDIA NVDEC / NVENC بله بله
AMD VCN بله بله
Intel Quick Sync بله بله
Apple Media Engine بله بله

AV1

AV1 یکی از پیشرفته‌ترین Codecهای ویدئویی نسل
جدید است که توسط اتحاد
Alliance for Open Media (AOMedia)
توسعه یافته است. این Codec با هدف ارائه کیفیت
بالاتر، کاهش بیشتر حجم فایل و حذف وابستگی به
حق امتیاز (Royalty-Free) طراحی شده و امروزه
به‌سرعت در سرویس‌های استریم، مرورگرها،
کارت‌های گرافیک و دستگاه‌های جدید گسترش
یافته است.

AV1 چیست؟

AV1 یک استاندارد فشرده‌سازی ویدئویی متن‌باز است
که به‌عنوان جایگزین نسل جدید H.264 و HEVC
توسعه یافته است.

این Codec از تکنیک‌های بسیار پیشرفته‌تری برای
Prediction، Transform، Motion Compensation و
Entropy Coding استفاده می‌کند تا حجم فایل را
بدون افت محسوس کیفیت کاهش دهد.

چرا AV1 توسعه یافت؟

با رشد سریع استریم ویدئو، نیاز به Codecی با
راندمان بیشتر و بدون هزینه حق امتیاز احساس شد.

AV1 علاوه بر افزایش کیفیت، هزینه استفاده از
Codec را نیز برای شرکت‌ها کاهش می‌دهد.

اهداف طراحی AV1
هدف نتیجه
کاهش Bitrate حجم کمتر
کیفیت بالاتر Artifact کمتر
Royalty-Free استفاده آزاد
پشتیبانی 4K و 8K مناسب برای آینده

Alliance for Open Media

AV1 توسط اتحاد AOMedia توسعه یافته است؛
کنسرسیومی که با هدف ایجاد استانداردهای آزاد
برای رسانه‌های دیجیتال تشکیل شد.

برخی اعضای AOMedia
شرکت نقش
Google توسعه و استفاده در YouTube
Microsoft پشتیبانی نرم‌افزاری
Intel توسعه سخت‌افزار
AMD GPU و Media Engine
NVIDIA Decode و Encode سخت‌افزاری
Meta استفاده در سرویس‌های آنلاین

مسیر کلی Encode و Decode

مزایای AV1

مهم‌ترین مزیت‌های AV1
مزیت توضیح
راندمان بسیار بالا Bitrate کمتر نسبت به HEVC
متن‌باز بدون Royalty
کیفیت بالا مناسب HDR و 8K
مناسب Streaming کاهش مصرف پهنای باند
آینده‌نگر پشتیبانی گسترده در حال توسعه

محدودیت‌های AV1

Encode نرم‌افزاری AV1 نسبت به HEVC و H.264
پیچیده‌تر و زمان‌برتر است.

به همین دلیل وجود موتورهای سخت‌افزاری Encode و
Decode برای استفاده گسترده از AV1 اهمیت زیادی
دارد.

محدودیت‌های AV1
محدودیت اثر
Encode سنگین زمان بیشتر
نیاز پردازشی بالا وابستگی بیشتر به سخت‌افزار
تجهیزات قدیمی عدم پشتیبانی سخت‌افزاری

Superblock در AV1

همان‌طور که HEVC از Coding Tree Unit استفاده
می‌کند، AV1 نیز از ساختاری به نام
Superblock
به‌عنوان بزرگ‌ترین واحد پردازش تصویر بهره می‌برد.

هر Superblock می‌تواند اندازه‌ای تا
128×128 پیکسل
داشته باشد و سپس به بلوک‌های کوچک‌تر تقسیم شود.

این ساختار یکی از عوامل اصلی افزایش راندمان AV1
در ویدئوهای با وضوح بالا است.

واحد اصلی پردازش تصویر
Codec واحد اصلی اندازه حداکثر
H.264 Macroblock 16×16
HEVC CTU 64×64
AV1 Superblock 128×128

Partition Tree

Superblockها در AV1 به‌صورت پویا و درختی به
بلوک‌های کوچک‌تر تقسیم می‌شوند.

این تقسیم‌بندی انعطاف‌پذیر باعث می‌شود هر قسمت
تصویر متناسب با میزان جزئیات خود فشرده شود.

Intra Prediction

AV1 از تعداد بسیار بیشتری حالت پیش‌بینی درون‌فریمی
نسبت به Codecهای قدیمی استفاده می‌کند.

این موضوع باعث می‌شود لبه‌ها، خطوط و بافت‌های
تصویر با دقت بیشتری پیش‌بینی شوند و خطای Encode
کاهش یابد.

Inter Prediction

در Inter Prediction، AV1 از فریم‌های مرجع برای
پیش‌بینی تصویر استفاده می‌کند.

الگوریتم‌های پیشرفته‌تر Motion Search و Motion
Compensation باعث افزایش راندمان نسبت به HEVC
شده‌اند.

Overlapped Block Motion Compensation (OBMC)

یکی از فناوری‌های اختصاصی AV1 استفاده از
Overlapped Block Motion Compensation است.

در این روش مرز بین بلوک‌های متحرک با یکدیگر
همپوشانی پیدا می‌کند تا شکستگی‌های تصویر کاهش
یابد.

Warped Motion

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

Warped Motion این نوع حرکت‌ها را دقیق‌تر مدل
می‌کند و خطای پیش‌بینی را کاهش می‌دهد.

Constrained Directional Enhancement Filter (CDEF)

CDEF یکی از فیلترهای اختصاصی AV1 است که پس از
Decode اجرا می‌شود.

این فیلتر نویزهای ناشی از فشرده‌سازی را کاهش داده
و در عین حال جزئیات لبه‌ها را حفظ می‌کند.

عملکرد CDEF
قبل بعد
Artifact بیشتر تصویر نرم‌تر
نویز لبه‌ها حفظ جزئیات

Loop Restoration Filter

پس از پایان Decode و اجرای CDEF، مرحله دیگری
به نام Loop Restoration اجرا می‌شود.

هدف این فیلتر بازیابی جزئیات تصویر و کاهش نویزهای
باقی‌مانده است تا کیفیت نهایی افزایش یابد.

Film Grain Synthesis

یکی از فناوری‌های منحصربه‌فرد AV1، بازسازی نویز
طبیعی فیلم پس از Decode است.

در بسیاری از فیلم‌های سینمایی، Grain بخشی از ظاهر
طبیعی تصویر محسوب می‌شود. ذخیره مستقیم این نویز،
حجم فایل را به‌شدت افزایش می‌دهد.

AV1 به‌جای ذخیره تمام Grain، تنها پارامترهای آن را
ذخیره کرده و هنگام Decode دوباره آن را تولید
می‌کند.

Tile و Tile Group

AV1 تصویر را می‌تواند به چند Tile مستقل تقسیم کند
تا عملیات Encode و Decode به‌صورت موازی انجام شود.

Tile Group نیز مجموعه‌ای از Tileها است که مدیریت
پردازش آن‌ها را ساده‌تر می‌کند.

Open Bitstream Unit (OBU)

ساختار Bitstream در AV1 از واحدهایی به نام
Open Bitstream Unit (OBU)
تشکیل شده است.

هر OBU بخشی از اطلاعات فایل مانند Header،
پارامترهای Sequence، داده‌های تصویری یا Metadata
را نگهداری می‌کند.

انواع متداول OBU
نوع OBU وظیفه
Sequence Header اطلاعات کلی ویدئو
Frame Header اطلاعات هر فریم
Tile Group داده تصویری
Metadata اطلاعات جانبی

Profileهای AV1

AV1 برای پشتیبانی از عمق رنگ و نمونه‌برداری رنگ،
چند Profile مختلف ارائه می‌کند.

Profileهای اصلی AV1
Profile ویژگی کاربرد
Profile 0 8 و 10 بیت، 4:2:0 استفاده عمومی
Profile 1 4:4:4 تدوین حرفه‌ای
Profile 2 12 بیت HDR پیشرفته

Bit Depth و Chroma Sampling

AV1 از عمق رنگ 8، 10 و 12 بیت و همچنین حالت‌های
مختلف Chroma Sampling پشتیبانی می‌کند.

پشتیبانی رنگ در AV1
ویژگی حالت‌های متداول
Bit Depth 8 / 10 / 12 بیت
Chroma Sampling 4:2:0 ، 4:2:2 ، 4:4:4

پشتیبانی سخت‌افزاری AV1

در سال‌های اخیر تقریباً تمام GPUهای جدید از Decode
سخت‌افزاری AV1 پشتیبانی می‌کنند و بسیاری از آن‌ها
قابلیت Encode سخت‌افزاری را نیز ارائه می‌دهند.

موتورهای رسانه AV1
سازنده Decode Encode
NVIDIA Ada / Blackwell بله بله
AMD RDNA 3 و جدیدتر بله بله
Intel Arc و Xe بله بله
Apple Media Engine بله بسته به نسل تراشه

مقایسه H.264، HEVC و AV1

مقایسه سه Codec پرکاربرد
ویژگی H.264 HEVC AV1
راندمان فشرده‌سازی خوب بسیار خوب عالی
حجم فایل بیشتر کمتر کمترین
پیچیدگی Encode کم متوسط بسیار زیاد
مناسب 8K و HDR محدود مناسب بسیار مناسب

Containerهای ویدئویی (Video Containers)

یکی از رایج‌ترین اشتباهات هنگام کار با فایل‌های
ویدئویی، یکسان دانستن Container و Codec است.
Codec مسئول فشرده‌سازی تصویر و صدا است، در حالی
که Container تنها ساختار نگهداری و سازمان‌دهی
داده‌ها را مشخص می‌کند.

Container چیست؟

Container قالبی برای ذخیره فایل‌های چندرسانه‌ای
است که می‌تواند هم‌زمان ویدئو، صدا، زیرنویس،
Chapter، Metadata و اطلاعات جانبی را در یک
فایل واحد نگهداری کند.

Container هیچ تغییری در کیفیت تصویر ایجاد
نمی‌کند و عملیات فشرده‌سازی نیز انجام نمی‌دهد.

تفاوت Codec و Container

Codec الگوریتم فشرده‌سازی و بازسازی داده‌های
ویدئویی یا صوتی است، اما Container تنها فایل
نهایی را سازمان‌دهی می‌کند.

مقایسه Codec و Container
ویژگی Codec Container
وظیفه فشرده‌سازی نگهداری داده
کیفیت تصویر مؤثر بدون تأثیر
نمونه H.264، HEVC، AV1 MP4، MKV، MOV

ساختار داخلی Container

یک Container می‌تواند چندین Stream مختلف را
در یک فایل نگهداری کند.

چرا به Container نیاز داریم؟

اگر فایل ویدئویی فاقد Container باشد،
هماهنگ‌سازی صدا، تصویر، زیرنویس و اطلاعات
جانبی بسیار دشوار خواهد بود.

Container امکان مدیریت همه این داده‌ها را در
قالب یک فایل واحد فراهم می‌کند.

رایج‌ترین Containerهای ویدئویی

Containerهای متداول
Container پسوند کاربرد
MPEG-4 Part 14 .mp4 عمومی و استریم
Matroska .mkv آرشیو و کیفیت بالا
QuickTime .mov اکوسیستم Apple
WebM .webm وب
AVI .avi قالب قدیمی
Flash Video .flv کاربرد تاریخی

MP4 (MPEG-4 Part 14)

MP4 پرکاربردترین Container ویدئویی جهان است.
تقریباً تمام سیستم‌عامل‌ها، مرورگرها،
تلفن‌های همراه، تلویزیون‌های هوشمند و
سرویس‌های استریم از این قالب پشتیبانی
می‌کنند و به همین دلیل به استاندارد
رایج تبادل فایل‌های ویدئویی تبدیل شده است.

MP4 چیست؟

MP4 یک Container چندرسانه‌ای است که برای
نگهداری هم‌زمان ویدئو، صدا، زیرنویس،
تصویر، Chapter و Metadata طراحی شده است.

برخلاف تصور بسیاری از کاربران، MP4 یک Codec
نیست و تنها داده‌های تولیدشده توسط Codecها را
در قالبی استاندارد ذخیره می‌کند.

ساختار داخلی MP4

فایل MP4 از مجموعه‌ای از Boxها (که گاهی Atom نیز
نامیده می‌شوند) تشکیل شده است.

هر Box وظیفه مشخصی مانند نگهداری اطلاعات
فایل، مسیر داده‌ها یا Streamهای صوتی و تصویری
را بر عهده دارد.

مهم‌ترین Boxهای MP4

Boxهای اصلی فایل MP4
Box وظیفه
ftyp نوع فایل و سازگاری
moov اطلاعات ساختاری فایل
mdat داده‌های اصلی صوت و تصویر
free فضای رزرو شده

Codecهای قابل استفاده در MP4

MP4 می‌تواند چندین Codec مختلف را در خود
نگهداری کند؛ البته میزان پشتیبانی نرم‌افزارها
ممکن است متفاوت باشد.

Codecهای رایج در MP4
نوع نمونه‌ها
Video H.264، HEVC، AV1، MPEG-4 Visual
Audio AAC، ALAC، MP3
Subtitle Timed Text و فرمت‌های سازگار

مزایای MP4

مزیت‌های MP4
مزیت توضیح
سازگاری بسیار بالا تقریباً تمام دستگاه‌ها
مناسب Streaming بارگذاری و پخش سریع
پشتیبانی نرم‌افزاری تقریباً تمام پلیرها
مدیریت Metadata اطلاعات جانبی فایل

محدودیت‌های MP4

MP4 نسبت به بعضی Containerهای مدرن مانند MKV
انعطاف‌پذیری کمتری در نگهداری چندین زیرنویس،
Trackهای متعدد یا Metadata پیچیده دارد.

محدودیت‌های MP4
محدودیت اثر
قابلیت کمتر نسبت به MKV امکانات جانبی محدودتر
برخی Codecهای خاص سازگاری کمتر

MKV (Matroska)

Matroska یا MKV یکی از قدرتمندترین و
انعطاف‌پذیرترین Containerهای ویدئویی است.
این قالب به‌صورت متن‌باز توسعه یافته و امکان
ذخیره هم‌زمان چندین Track ویدئو، صدا،
زیرنویس، Chapter، فونت، تصویر جلد و انواع
Metadata را در یک فایل فراهم می‌کند.

MKV چیست؟

MKV یک Container چندرسانه‌ای متن‌باز است که
برای نگهداری انواع Streamهای صوتی و تصویری
بدون وابستگی به Codec خاص طراحی شده است.

این قالب به دلیل انعطاف بالا، یکی از رایج‌ترین
گزینه‌ها برای آرشیو فیلم، نسخه‌های Blu-ray،
محتوای HDR و پروژه‌های حرفه‌ای محسوب می‌شود.

ساختار داخلی MKV

MKV بر پایه استاندارد
EBML (Extensible Binary Meta Language)
ساخته شده است.

ساختار درختی EBML باعث می‌شود اضافه کردن
اطلاعات جدید بدون شکستن سازگاری فایل امکان‌پذیر
باشد.

چه داده‌هایی در MKV ذخیره می‌شوند؟

انواع داده‌های قابل ذخیره در MKV
نوع داده پشتیبانی
Video Track
Audio Track
Subtitle
Chapter
Font Attachment
Cover Image
Metadata

Codecهای قابل استفاده در MKV

تقریباً تمام Codecهای رایج صوتی و تصویری
می‌توانند داخل MKV قرار بگیرند.

نمونه Codecهای پشتیبانی‌شده
نوع نمونه‌ها
Video H.264، HEVC، AV1، VP9، MPEG-2
Audio AAC، FLAC، Opus، Vorbis، DTS،
Dolby Digital، TrueHD
Subtitle SRT، ASS، SSA، PGS، VobSub

مزایای MKV

مهم‌ترین مزیت‌های MKV
مزیت توضیح
انعطاف بسیار بالا پشتیبانی از انواع Track
چندین زیرنویس بدون محدودیت عملی
چندین Audio Track دوبله و زبان‌های مختلف
متن‌باز توسعه آزاد
مناسب آرشیو کیفیت بالا و امکانات زیاد

محدودیت‌های MKV

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

محدودیت‌های MKV
محدودیت اثر
سازگاری کمتر برخی دستگاه‌های قدیمی
امکانات زیاد پیاده‌سازی پیچیده‌تر

مقایسه MP4 و MKV

مقایسه دو Container پرکاربرد
ویژگی MP4 MKV
سازگاری بسیار بالا بالا
چندین زیرنویس محدودتر عالی
چند Audio Track مناسب بسیار مناسب
Attachment محدود پشتیبانی کامل
مناسب Streaming بسیار مناسب کمتر از MP4
مناسب آرشیو خوب بسیار عالی

MOV (QuickTime File Format)

MOV قالب چندرسانه‌ای اختصاصی Apple است که بر
پایه QuickTime File Format توسعه یافته است.
این Container یکی از مهم‌ترین قالب‌های صنعت
تدوین ویدئو محسوب می‌شود و در نرم‌افزارهایی
مانند Final Cut Pro، DaVinci Resolve،
Adobe Premiere Pro و بسیاری از Workflowهای
حرفه‌ای استفاده می‌شود.

MOV چیست؟

MOV یک Container چندرسانه‌ای است که برای
نگهداری انواع Streamهای ویدئو، صدا، زیرنویس،
Metadata و اطلاعات زمانی طراحی شده است.

این قالب پایه بسیاری از فناوری‌های تصویری
Apple بوده و بعدها استاندارد MP4 نیز از همین
معماری الهام گرفت.

ساختار داخلی MOV

مانند MP4، فایل‌های MOV نیز از مجموعه‌ای از
Box یا Atom تشکیل می‌شوند.

Codecهای رایج در MOV

MOV تقریباً از تمام Codecهای حرفه‌ای Apple و
بسیاری از Codecهای عمومی پشتیبانی می‌کند.

Codecهای متداول در MOV
نوع نمونه‌ها
Video Apple ProRes، H.264، HEVC،
DNxHD، Animation
Audio PCM، AAC، ALAC، Dolby Digital
Subtitle Timed Text و Trackهای سازگار

چرا MOV در تدوین حرفه‌ای محبوب است؟

بسیاری از Codecهای حرفه‌ای مانند
Apple ProRes به‌صورت طبیعی در Container
MOV ذخیره می‌شوند.

همچنین پشتیبانی مناسب از Metadata، Timecode،
Alpha Channel و کیفیت بالا باعث شده MOV
به یکی از قالب‌های استاندارد Post Production
تبدیل شود.

مزایای MOV

مزیت‌های MOV
مزیت توضیح
مناسب تدوین Workflow حرفه‌ای
پشتیبانی Timecode همگام‌سازی پروژه
Metadata کامل اطلاعات فنی و پروژه
کیفیت بالا مناسب Master File
سازگاری با Apple Final Cut Pro و macOS

محدودیت‌های MOV

محدودیت‌های MOV
محدودیت اثر
حجم فایل معمولاً بیشتر از MP4
مناسب نبودن برای وب Streaming محدودتر
تمرکز بر Apple بهترین عملکرد در اکوسیستم Apple

مقایسه MOV و MP4

تفاوت MOV و MP4
ویژگی MOV MP4
کاربرد اصلی تدوین حرفه‌ای توزیع و استریم
سازگاری عالی در Apple تقریباً همه دستگاه‌ها
حجم فایل بیشتر کمتر
مناسب Master File بسیار مناسب کمتر
مناسب Streaming متوسط بسیار مناسب

WebM

WebM یک Container متن‌باز است که توسط Google
برای استفاده در وب توسعه یافت. هدف اصلی این
قالب، ارائه فایل‌های ویدئویی با کیفیت بالا،
حجم کم و سازگاری مناسب با مرورگرهای مدرن و
سرویس‌های استریم اینترنتی است.

WebM چیست؟

WebM یک Container چندرسانه‌ای متن‌باز است که
بر پایه ساختار Matroska توسعه یافته اما برای
استفاده در وب ساده‌تر و بهینه‌تر شده است.

این قالب معمولاً همراه با Codecهای VP8، VP9
و AV1 برای ویدئو و Opus یا Vorbis برای صدا
استفاده می‌شود.

ساختار داخلی WebM

WebM نیز مانند MKV بر پایه EBML ساخته شده
است، اما تنها از مجموعه‌ای محدود از قابلیت‌های
Matroska استفاده می‌کند.

Codecهای قابل استفاده در WebM

برخلاف MKV، WebM تنها از تعداد محدودی Codec
استاندارد پشتیبانی می‌کند تا سازگاری مرورگرها
حفظ شود.

Codecهای استاندارد WebM
نوع Codec
Video VP8، VP9، AV1
Audio Opus، Vorbis

چرا WebM توسعه یافت؟

با گسترش HTML5 و ویدئوهای آنلاین، نیاز به
قالبی آزاد و بدون هزینه حق امتیاز برای پخش
مستقیم در مرورگرها احساس شد.

WebM پاسخی به این نیاز بود و امروزه یکی از
قالب‌های اصلی ویدئوی وب محسوب می‌شود.

مزایای WebM

مزیت‌های WebM
مزیت توضیح
متن‌باز بدون Royalty
مناسب وب HTML5 و مرورگرها
حجم کم مناسب Streaming
پشتیبانی AV1 مناسب نسل جدید ویدئو

محدودیت‌های WebM

محدودیت‌های WebM
محدودیت اثر
Codec محدود پشتیبانی فقط از Codecهای مشخص
امکانات کمتر از MKV انعطاف‌پذیری پایین‌تر
مناسب نبودن برای آرشیو تمرکز بر پخش آنلاین

مقایسه WebM، MP4 و MKV

مقایسه سه Container رایج
ویژگی MP4 MKV WebM
مناسب وب عالی خوب عالی
انعطاف‌پذیری خوب بسیار زیاد متوسط
پشتیبانی Codec زیاد بسیار زیاد محدود
مناسب آرشیو خوب عالی متوسط
مناسب Streaming عالی خوب عالی

AVI (Audio Video Interleave)

AVI یکی از قدیمی‌ترین Containerهای ویدئویی است
که در سال 1992 توسط Microsoft معرفی شد. اگرچه
امروزه Containerهای مدرن‌تری مانند MP4 و MKV
جایگزین آن شده‌اند، اما AVI هنوز در بسیاری از
آرشیوهای قدیمی، تجهیزات صنعتی و نرم‌افزارهای
کلاسیک مورد استفاده قرار می‌گیرد.

AVI چیست؟

AVI یک Container چندرسانه‌ای است که برای
ذخیره هم‌زمان Streamهای ویدئو و صدا طراحی شد.

نام Audio Video Interleave به این دلیل انتخاب
شده که داده‌های صوتی و تصویری به‌صورت
درهم‌تنیده (Interleaved) داخل فایل ذخیره
می‌شوند تا همگام‌سازی (Synchronization)
ساده‌تر انجام شود.

ساختار داخلی AVI

AVI بر پایه قالب RIFF (Resource Interchange
File Format) ساخته شده است.

فایل از چندین Chunk تشکیل می‌شود که هر کدام
اطلاعات مشخصی را نگهداری می‌کنند.

Codecهای قابل استفاده در AVI

AVI از Codecهای متنوعی پشتیبانی می‌کند، اما
این قالب برای Codecهای مدرن طراحی نشده است.

Codecهای رایج در AVI
نوع نمونه‌ها
Video DivX، Xvid، MPEG-4 Visual،
MJPEG، DV
Audio PCM، MP3، AC-3

مزایای AVI

مزیت‌های AVI
مزیت توضیح
ساختار ساده پیاده‌سازی آسان
سازگاری با ویندوز پشتیبانی گسترده تاریخی
مناسب فایل‌های قدیمی آرشیو کلاسیک
مناسب Capture برخی تجهیزات ضبط قدیمی

محدودیت‌های AVI

AVI پیش از ظهور بسیاری از فناوری‌های مدرن
ویدئویی طراحی شده است؛ بنابراین از قابلیت‌های
امروزی به‌خوبی پشتیبانی نمی‌کند.

محدودیت‌های AVI
محدودیت اثر
Metadata محدود امکانات کمتر
زیرنویس داخلی پشتیبانی ضعیف
چندین Audio Track محدود
مناسب نبودن Streaming عملکرد ضعیف در وب
Codecهای جدید سازگاری محدود

مقایسه AVI با MP4 و MKV

مقایسه سه Container
ویژگی AVI MP4 MKV
سال معرفی 1992 2001 2002
مناسب Streaming خیر بسیار مناسب مناسب
چندین زیرنویس ضعیف متوسط عالی
Metadata محدود خوب بسیار کامل
مناسب پروژه‌های جدید خیر بله بله

وضعیت امروزی AVI

امروزه AVI بیشتر در فایل‌های قدیمی، سیستم‌های
نظارتی، تجهیزات صنعتی و برخی دوربین‌های قدیمی
دیده می‌شود.

در پروژه‌های جدید، معمولاً MP4، MKV یا MOV
جایگزین AVI شده‌اند؛ زیرا امکانات بیشتری برای
Codecهای مدرن، Metadata، زیرنویس و استریم
ارائه می‌کنند.

FLV (Flash Video)

FLV یکی از مهم‌ترین Containerهای تاریخی وب است
که برای انتقال و پخش ویدئو با Adobe Flash Player
توسعه یافت. این قالب سال‌ها در وب‌سایت‌های
اشتراک ویدئو، پخش زنده و سامانه‌های آموزشی
استفاده می‌شد، اما با پایان پشتیبانی از Flash
و گسترش HTML5، جایگاه آن به‌شدت کاهش یافت.

FLV چیست؟

FLV مخفف Flash Video است و
Containerی برای نگهداری و انتقال Streamهای
صوتی و تصویری در محیط Adobe Flash محسوب می‌شود.

این قالب در دوره‌ای که مرورگرها هنوز پخش
داخلی ویدئو با HTML5 را ارائه نمی‌کردند،
راهکاری رایج برای نمایش ویدئوی اینترنتی بود.

نقش FLV در تاریخ ویدئوی اینترنتی

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

Flash Player با نصب افزونه مرورگر، محیطی مشترک
برای پخش ویدئو ایجاد کرد و FLV به یکی از
قالب‌های اصلی این اکوسیستم تبدیل شد.

بسیاری از وب‌سایت‌های ویدئویی قدیمی، پخش‌کننده‌های
آموزشی و سامانه‌های استریم اولیه از FLV استفاده
می‌کردند.

ساختار داخلی FLV

فایل FLV از یک Header و مجموعه‌ای از Tagهای
متوالی تشکیل می‌شود.

هر Tag می‌تواند شامل داده ویدئویی، صوتی یا
Metadata باشد.

Tagهای اصلی FLV

انواع داده در ساختار FLV
نوع Tag وظیفه نمونه اطلاعات
Video Tag نگهداری داده تصویری فریم‌های فشرده ویدئو
Audio Tag نگهداری داده صوتی Stream صوتی
Script Data Tag نگهداری Metadata Duration، Resolution و اطلاعات فایل

Codecهای رایج در FLV

FLV در طول زمان از چند Codec تصویری و صوتی
پشتیبانی کرد، اما مجموعه قابلیت‌های آن در
مقایسه با Containerهای مدرن محدودتر است.

Codecهای متداول در فایل‌های FLV
نوع Codecهای رایج کاربرد تاریخی
Video Sorenson Spark، VP6، H.264 ویدئوی وب و پخش زنده
Audio MP3، AAC، Speex صدا، گفتار و موسیقی

ارتباط FLV با RTMP

FLV ارتباط نزدیکی با پروتکل
RTMP یا Real-Time Messaging Protocol
دارد.

در بسیاری از سیستم‌های پخش زنده، داده‌های صوتی
و تصویری با ساختاری مشابه Tagهای FLV داخل
اتصال RTMP منتقل می‌شوند.

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

کاربردهای تاریخی FLV

مهم‌ترین کاربردهای FLV
کاربرد توضیح وضعیت امروزی
پخش ویدئو در مرورگر با افزونه Flash Player منسوخ
ویدئوی آموزشی سامانه‌های آموزش قدیمی بیشتر جایگزین شده است
پخش زنده همراه با RTMP ساختار ارسال هنوز در برخی Workflowها دیده می‌شود
وب‌سایت‌های اشتراک ویدئو پخش اینترنتی اولیه جایگزین با HTML5
بازی و محتوای تعاملی داخل پروژه‌های Flash منسوخ

مزایای تاریخی FLV

نقاط قوت FLV در زمان رواج Flash
مزیت نتیجه
پخش داخل مرورگر بدون نیاز به پلیر خارجی
شروع سریع پخش مناسب ویدئوی آنلاین
ارتباط با RTMP مناسب پخش زنده
اکوسیستم گسترده Flash پشتیبانی وسیع در وب قدیمی

محدودیت‌های FLV

مهم‌ترین ضعف FLV وابستگی تاریخی آن به Flash
Player و اکوسیستم منسوخ Flash است.

محدودیت‌های اصلی FLV
محدودیت پیامد
پایان پشتیبانی Flash عدم پخش مستقیم در مرورگرهای جدید
Codecهای محدودتر سازگاری ضعیف با فناوری‌های جدید
امکانات کمتر از MKV و MP4 Metadata و Trackهای محدودتر
پشتیبانی ضعیف از HDR و AV1 نامناسب برای محتوای مدرن
وابستگی به نرم‌افزار قدیمی ریسک امنیتی و ناسازگاری

مقایسه FLV با MP4 و WebM

مقایسه FLV با Containerهای جدیدتر وب
ویژگی FLV MP4 WebM
پخش HTML5 ضعیف بسیار گسترده بسیار گسترده
H.264 قابل استفاده بسیار رایج استاندارد اصلی WebM نیست
AV1 نامناسب قابل استفاده بسیار مناسب
وضعیت امروزی عمدتاً منسوخ بسیار رایج رایج در وب مدرن
پخش زنده تاریخی با RTMP مناسب در Workflowهای جدید وابسته به پلتفرم و پروتکل

تبدیل FLV به MP4 یا MKV

اگر Streamهای داخلی فایل FLV با Container مقصد
سازگار باشند، می‌توان آن‌ها را بدون Encode
مجدد به MP4 یا MKV منتقل کرد.

این عملیات Remux نام دارد و
معمولاً سریع انجام می‌شود و افت کیفیت ایجاد
نمی‌کند.

اگر Codec داخلی قدیمی یا ناسازگار باشد، لازم
است فایل Transcode شود که زمان بیشتری می‌برد
و ممکن است کیفیت را تغییر دهد.

روش‌های تبدیل فایل FLV
روش Encode مجدد سرعت افت کیفیت
Remux خیر بسیار سریع ندارد
Transcode بله کندتر وابسته به تنظیمات

وضعیت امروزی FLV

FLV دیگر گزینه مناسبی برای تولید و انتشار
محتوای جدید محسوب نمی‌شود.

برای ویدئوی عمومی و سازگاری گسترده، MP4 و برای
ویدئوی متن‌باز وب، WebM گزینه‌های مناسب‌تری
هستند.

بااین‌حال، شناخت FLV برای تبدیل آرشیوهای قدیمی،
مدیریت سامانه‌های Legacy و درک ارتباط تاریخی
میان Flash و RTMP همچنان اهمیت دارد.

MPEG-TS و M2TS

MPEG Transport Stream یا MPEG-TS یک Container
طراحی‌شده برای انتقال پیوسته و مقاوم ویدئو و
صدا در شبکه‌ها، تلویزیون دیجیتال، IPTV و
سامانه‌های Broadcast است. نسخه M2TS نیز
ساختاری نزدیک به MPEG-TS دارد و بیشتر در
دیسک‌های Blu-ray و دوربین‌های AVCHD دیده
می‌شود.

MPEG-TS چیست؟

MPEG-TS مخفف
MPEG Transport Stream
است و داده‌های صوتی، تصویری و اطلاعات کنترلی
را در بسته‌های کوچک و پیوسته منتقل می‌کند.

این ساختار برای محیط‌هایی طراحی شده است که
احتمال گم‌شدن، خراب‌شدن یا تأخیر بعضی بسته‌ها
وجود دارد.

برخلاف Containerهایی مانند MP4 که بیشتر برای
ذخیره فایل کامل مناسب‌اند، MPEG-TS برای انتقال
زنده و دریافت تدریجی Stream بهینه شده است.

ساختار Packet در MPEG-TS

Stream در MPEG-TS به Packetهای کوچک تقسیم
می‌شود. اندازه رایج هر Packet برابر
188 بایت است.

هر Packet دارای Header و Payload است. Header
اطلاعاتی مانند شناسه Stream، ترتیب بسته و
وضعیت خطا را نگهداری می‌کند و Payload شامل
بخشی از داده صوتی، تصویری یا اطلاعات کنترلی
است.

Sync Byte چیست؟

ابتدای هر Packet استاندارد MPEG-TS با یک
Sync Byte مشخص می‌شود.

گیرنده با پیدا کردن این مقدار می‌تواند مرز
Packetها را تشخیص دهد و در صورت از دست رفتن
همگام‌سازی، دوباره به Stream متصل شود.

PID در MPEG-TS چیست؟

هر نوع داده داخل Transport Stream با شناسه‌ای
به نام
Packet Identifier یا PID
مشخص می‌شود.

گیرنده با استفاده از PID تشخیص می‌دهد هر Packet
به ویدئو، صدا، زیرنویس یا اطلاعات مدیریتی مربوط
است.

نمونه کاربرد PID در یک Stream
PID نوع داده نمونه
Video PID تصویر H.264 یا HEVC
Audio PID صدا AAC یا AC-3
Subtitle PID زیرنویس یا داده جانبی DVB Subtitle
Control PID اطلاعات ساختار برنامه PAT و PMT

PAT و PMT چه هستند؟

برای اینکه گیرنده بداند چه برنامه‌ها و
Streamهایی داخل MPEG-TS وجود دارند، جدول‌های
کنترلی در Stream ارسال می‌شوند.

دو جدول مهم در این ساختار
PAT
و
PMT
هستند.

تفاوت PAT و PMT
جدول نام کامل وظیفه
PAT Program Association Table معرفی برنامه‌ها و PID مربوط به PMT هر برنامه
PMT Program Map Table معرفی PIDهای ویدئو، صدا و داده‌های هر برنامه

حمل چند برنامه در یک Transport Stream

یک MPEG-TS می‌تواند یک یا چند برنامه مستقل را
هم‌زمان حمل کند.

برای مثال، در پخش تلویزیون دیجیتال ممکن است
چند کانال تلویزیونی داخل یک Transport Stream
مشترک Multiplex شوند.

مقاومت MPEG-TS در برابر خطا

MPEG-TS برای محیط‌های انتقال طراحی شده است؛
بنابراین از Packetهای مستقل، شمارنده ترتیب و
اطلاعات همگام‌سازی استفاده می‌کند.

اگر بخشی از Stream خراب یا گم شود، معمولاً
تنها قسمت کوتاهی از تصویر یا صدا آسیب می‌بیند
و گیرنده می‌تواند با Packetهای بعدی پخش را
ادامه دهد.

قابلیت‌های افزایش پایداری MPEG-TS
قابلیت نقش
Packet ثابت بازیابی سریع مرز داده
Sync Byte حفظ و بازیابی همگام‌سازی
Continuity Counter تشخیص Packet گم‌شده یا تکراری
ارسال تکراری PAT و PMT امکان ورود گیرنده در میانه Stream

PTS، DTS و PCR

برای هماهنگ‌سازی صدا و تصویر و حفظ زمان‌بندی
پخش، MPEG-TS از Timestampهای مختلف استفاده
می‌کند.

Timestampهای مهم در MPEG-TS
مقدار نام کامل وظیفه
PTS Presentation Time Stamp زمان نمایش یا پخش فریم
DTS Decoding Time Stamp زمان Decode فریم
PCR Program Clock Reference مرجع ساعت برای همگام‌سازی گیرنده

Codecهای رایج در MPEG-TS

Streamهای متداول داخل MPEG-TS
نوع Codecهای رایج کاربرد
Video MPEG-2 Video، H.264، HEVC تلویزیون، IPTV و Broadcast
Audio MPEG Audio، AAC، AC-3، E-AC-3 صدا و چندکاناله
Subtitle DVB Subtitle و Teletext زیرنویس Broadcast
Data Service Information و Metadata جدول کانال و اطلاعات برنامه

کاربردهای MPEG-TS

مهم‌ترین کاربردهای MPEG Transport Stream
کاربرد دلیل استفاده
تلویزیون دیجیتال انتقال چند کانال و اطلاعات سرویس
ماهواره مقاومت در برابر خطای انتقال
IPTV ارسال Stream زنده در شبکه
HLS استفاده تاریخی از قطعه‌های TS
دوربین و Capture ذخیره پیوسته و مقاوم‌تر در برابر قطع ناگهانی
Broadcast Studio انتقال و توزیع برنامه زنده

M2TS چیست؟

M2TS نسخه‌ای از MPEG Transport Stream است که
بیشتر در Blu-ray Disc و دوربین‌های مبتنی بر
AVCHD استفاده می‌شود.

Packetهای M2TS معمولاً یک بخش اضافه برای
Timestamp دارند و اندازه آن‌ها نسبت به Packet
استاندارد TS بزرگ‌تر است.

مقایسه Packet در TS و M2TS
قالب اندازه Packet کاربرد رایج
MPEG-TS 188 بایت Broadcast، IPTV و Streaming
M2TS 192 بایت Blu-ray و AVCHD

M2TS در Blu-ray

دیسک‌های Blu-ray معمولاً Streamهای اصلی فیلم،
صدا و زیرنویس را داخل فایل‌های M2TS نگهداری
می‌کنند.

یک فایل M2TS می‌تواند شامل ویدئوی باکیفیت،
چند Track صوتی، زیرنویس تصویری و اطلاعات جانبی
باشد.

داده‌های رایج داخل M2TS در Blu-ray
نوع داده نمونه
Video AVC، HEVC یا MPEG-2
Audio DTS-HD MA، Dolby TrueHD، AC-3
Subtitle PGS
Chapter و Playlist مدیریت‌شده توسط ساختار Blu-ray

مقایسه MPEG-TS و MP4

تفاوت MPEG-TS و MP4
معیار MPEG-TS MP4
هدف اصلی انتقال و پخش زنده ذخیره و توزیع فایل
مقاومت در برابر خطا بالا کمتر
ورود از میانه Stream مناسب وابسته به ساختار فایل
سربار Container بیشتر کمتر
Metadata و آرشیو محدودتر مناسب‌تر
Broadcast بسیار مناسب کاربرد محدودتر

مقایسه MPEG-TS و MKV

کاربرد مناسب TS و MKV
ویژگی MPEG-TS MKV
پخش زنده بسیار مناسب کاربرد محدودتر
آرشیو فیلم متوسط بسیار مناسب
چند زیرنویس و Attachment محدودتر بسیار کامل
تحمل خطای شبکه بهتر کمتر
ویرایش Metadata محدودتر انعطاف‌پذیرتر

تبدیل TS و M2TS به MP4 یا MKV

اگر Codecهای داخلی با Container مقصد سازگار
باشند، می‌توان Streamهای TS یا M2TS را بدون
Encode مجدد به MP4 یا MKV منتقل کرد.

این عملیات Remux نام دارد، سریع است و کیفیت
ویدئو و صدا را تغییر نمی‌دهد.

Transcode فقط زمانی لازم است که Codec مقصد
ناسازگار باشد یا تغییر Resolution، Bitrate،
Frame Rate یا Codec موردنیاز باشد.

تفاوت Remux و Transcode
عملیات تغییر Codec افت کیفیت سرعت
Remux خیر ندارد بسیار سریع
Transcode بله وابسته به تنظیمات کندتر

Remux، Transcode و Re-encode

یکی از رایج‌ترین اشتباهات در دنیای ویدئو،
یکسان دانستن Remux و Transcode است.
این دو فرآیند کاملاً متفاوت هستند و اثر
مستقیمی بر زمان پردازش، کیفیت تصویر، حجم فایل
و مصرف CPU و GPU دارند.

چرا شناخت این سه فرآیند مهم است؟

هنگام تبدیل فایل‌های ویدئویی ممکن است تنها
Container تغییر کند یا کل ویدئو دوباره Encode
شود.

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

Remux چیست؟

در عملیات Remux، Streamهای صوتی، تصویری و
زیرنویس بدون Decode و Encode مجدد، فقط از یک
Container به Container دیگر منتقل می‌شوند.

Codec، Bitrate، Resolution و کیفیت تصویر
کاملاً بدون تغییر باقی می‌مانند.

Transcode چیست؟

در عملیات Transcode ابتدا فایل Decode شده و
سپس دوباره توسط یک Codec دیگر Encode می‌شود.

این فرآیند معمولاً برای کاهش حجم فایل،
تغییر Codec یا افزایش سازگاری انجام می‌شود.

Re-encode چیست؟

Re-encode نوعی Transcode است که معمولاً
Codec تغییر نمی‌کند اما ویدئو دوباره Encode
می‌شود.

برای مثال H.264 دوباره به H.264 تبدیل می‌شود
ولی Bitrate یا Resolution تغییر می‌کند.

مقایسه Remux، Transcode و Re-encode

تفاوت سه فرآیند اصلی
ویژگی Remux Transcode Re-encode
Decode خیر بله بله
Encode خیر بله بله
تغییر Codec خیر معمولاً بله خیر
افت کیفیت ندارد ممکن است ممکن است
سرعت بسیار سریع کند کند

مصرف CPU و GPU

میزان مصرف منابع
عملیات CPU GPU
Remux بسیار کم تقریباً صفر
Software Transcode بسیار زیاد ندارد
Hardware Encode متوسط زیاد

مثال‌های عملی

نمونه عملیات
عملیات نتیجه
MKV → MP4 معمولاً Remux
H.264 → HEVC Transcode
H.264 50Mbps → H.264 10Mbps Re-encode
Blu-ray M2TS → MKV معمولاً Remux

چه زمانی از هرکدام استفاده کنیم؟

انتخاب مناسب
نیاز بهترین انتخاب
فقط تغییر Container Remux
کاهش حجم فایل Transcode
تغییر Codec Transcode
تغییر Resolution Re-encode
تغییر Bitrate Re-encode

Pipeline کامل پردازش ویدئو

پردازش ویدئو فقط به Decode یا Encode محدود
نمی‌شود. از لحظه دریافت تصویر تا نمایش،
ذخیره یا ارسال آن، چندین مرحله متوالی انجام
می‌شود که در مجموع Video Processing Pipeline
نام دارند.

Video Processing Pipeline چیست؟

Video Processing Pipeline زنجیره‌ای از مراحل
سخت‌افزاری و نرم‌افزاری است که داده تصویری را
از منبع دریافت کرده و برای نمایش، تدوین،
ذخیره‌سازی یا انتقال آماده می‌کند.

هر مرحله ممکن است توسط CPU، موتور ویدئویی
اختصاصی GPU، Shader Core، واحد پردازش تصویر،
حافظه یا نرم‌افزار انجام شود.

مراحل اصلی Pipeline ویدئو

وظیفه هر مرحله در Pipeline

مراحل اصلی پردازش ویدئو و وظیفه آن‌ها
مرحله وظیفه واحد درگیر
Capture دریافت تصویر از دوربین، نمایشگر یا ورودی خارجی Capture Device، CPU یا GPU
Demux جداسازی Streamهای صوت، تصویر و زیرنویس نرم‌افزار و CPU
Decode تبدیل Bitstream فشرده به Frame NVDEC، VCN، QSV یا CPU
Color Conversion تبدیل YUV، RGB، Bit Depth و Color Space GPU، Video Processor یا CPU
Scaling تغییر Resolution Shader، Scaler یا CPU
Filtering حذف نویز، Sharpening و اصلاح تصویر Shader، CUDA، Compute یا CPU
Encode تبدیل Frame به Bitstream فشرده NVENC، VCN، QSV یا CPU
Mux قرار دادن Streamها داخل Container نرم‌افزار و CPU
Output ذخیره، نمایش یا ارسال در شبکه Storage، Display Engine یا Network

منابع ورودی ویدئو

Pipeline ویدئو می‌تواند از منابع مختلفی آغاز
شود. نوع منبع مشخص می‌کند اولین مرحله Capture،
خواندن فایل یا دریافت Stream شبکه باشد.

انواع ورودی در Pipeline ویدئو
منبع نوع داده مرحله اول
دوربین تصویر زنده یا Stream فشرده Capture
فایل ویدئویی Container روی Storage Demux
شبکه RTMP، HLS، RTP یا WebRTC دریافت و Buffering
Capture Card HDMI یا SDI Capture و تبدیل سیگنال
ضبط صفحه Frame Buffer دسکتاپ یا بازی Screen Capture
دوربین نظارتی H.264 یا HEVC شبکه‌ای دریافت Stream و Decode

مرحله Capture

Capture به معنی دریافت تصویر از منبعی مانند
دوربین، نمایشگر، کارت کپچر یا خروجی یک برنامه
است.

داده Captureشده ممکن است خام باشد یا از همان
ابتدا با Codec مشخصی فشرده شده باشد.

در ضبط صفحه یا بازی، فریم‌ها معمولاً مستقیماً
از حافظه GPU خوانده و برای پردازش یا Encode
آماده می‌شوند.

انواع Capture

روش‌های رایج دریافت تصویر
روش منبع کاربرد چالش اصلی
Camera Capture دوربین داخلی یا USB تماس تصویری و ضبط Latency و کیفیت سنسور
HDMI Capture کنسول، دوربین یا رایانه دیگر استریم و تولید زنده پهنای باند و تأخیر
SDI Capture تجهیزات Broadcast استودیو حرفه‌ای همگام‌سازی و تجهیزات تخصصی
Screen Capture دسکتاپ یا برنامه آموزش و ارائه وضوح متن و نرخ فریم
Game Capture Frame Buffer بازی ضبط و استریم گیم افت عملکرد و Frame Pacing

مرحله Demux

فایل‌های MP4، MKV، MOV یا TS ممکن است چندین
Stream صوتی، تصویری و زیرنویس داشته باشند.

Demuxer ساختار Container را می‌خواند و Stream
موردنیاز را برای Decoder جدا می‌کند.

در این مرحله هنوز Codec Decode نمی‌شود و کیفیت
تصویر تغییری نمی‌کند.

تفاوت Demux و Decode

مقایسه Demux و Decode
معیار Demux Decode
ورودی Container Bitstream فشرده
خروجی Stream جداشده Frame خام یا نیمه‌خام
تغییر کیفیت ندارد بازسازی تصویر
واحد اصلی CPU و نرم‌افزار Video Engine یا CPU

مرحله Decode

Decoder جریان فشرده H.264، HEVC، VP9 یا AV1 را
به Frameهای قابل پردازش تبدیل می‌کند.

Decode ممکن است توسط CPU یا موتور سخت‌افزاری
اختصاصی مانند NVDEC، AMD VCN و Intel Quick
Sync انجام شود.

پس از Decode، حجم داده بسیار بیشتر از Bitrate
فایل اولیه است؛ زیرا فریم‌ها باید در حافظه برای
پردازش یا نمایش نگهداری شوند.

Decode سخت‌افزاری و نرم‌افزاری در Pipeline

تفاوت مسیر Hardware و Software Decode
معیار Hardware Decode Software Decode
واحد پردازش موتور اختصاصی GPU هسته‌های CPU
مصرف انرژی کمتر بیشتر
مصرف CPU پایین‌تر بالاتر
انعطاف Codec محدود به قابلیت موتور معمولاً گسترده‌تر
چند Stream هم‌زمان معمولاً بهتر وابسته به قدرت CPU

Frame Buffer در Pipeline

فریم‌های Decodeشده باید در RAM یا VRAM نگهداری
شوند تا مراحل بعدی بتوانند آن‌ها را بخوانند.

Codecهای Inter-frame علاوه بر فریم فعلی، چند
Reference Frame را نیز در حافظه نگهداری می‌کنند.

در پروژه‌های Multicam، تدوین چندلایه یا پردازش
AI، ممکن است تعداد زیادی Buffer به‌صورت هم‌زمان
ایجاد شود.

انواع Buffer در پردازش ویدئو
Buffer کاربرد اثر بر حافظه
Decode Buffer نگهداری فریم‌های بازسازی‌شده وابسته به Resolution و Codec
Reference Buffer پیش‌بینی فریم‌های بعدی وابسته به GOP و Codec
Processing Buffer افکت، Color و Scaling افزایش مصرف VRAM
Encode Buffer آماده‌سازی فریم برای Encoder وابسته به Bit Depth و Chroma
Display Buffer ارائه تصویر به نمایشگر وابسته به Resolution خروجی

Zero-Copy Pipeline

در Pipeline بهینه، فریم‌ها پس از Decode داخل
حافظه GPU باقی می‌مانند و بدون کپی‌شدن به RAM،
وارد مراحل Scaling، افکت و Encode می‌شوند.

این روش Latency، مصرف پهنای باند PCI Express و
بار CPU را کاهش می‌دهد.

هزینه انتقال فریم میان RAM و VRAM

اگر یک مرحله روی CPU و مرحله بعدی روی GPU اجرا
شود، ممکن است فریم چندین‌بار میان RAM و VRAM
جابه‌جا شود.

در Resolutionهای بالا و چند Stream هم‌زمان،
این انتقال می‌تواند به گلوگاه مهمی تبدیل شود.

پیامدهای انتقال مکرر Frame Buffer
پیامد نتیجه
مصرف PCI Express کاهش پهنای باند در دسترس
افزایش Latency تأخیر بیشتر در استریم و Preview
مصرف CPU افزایش مدیریت حافظه و کپی داده
افت Throughput کاهش تعداد Streamهای قابل پردازش

گلوگاه‌های مراحل ابتدایی Pipeline

مشکلات رایج از ورودی تا Decode
گلوگاه نشانه علت احتمالی
Capture Device افت فریم ورودی پهنای باند USB، HDMI یا درایور
Network Buffer توقف یا نوسان تصویر Packet Loss یا Jitter
Storage Timeline ناپایدار سرعت خواندن ناکافی
Demuxer خطا در بازکردن فایل Container خراب یا ناسازگار
Decoder مصرف CPU بالا یا Frame Drop نبود Hardware Decode سازگار
Memory Copy Latency و مصرف منابع زیاد انتقال مکرر میان RAM و VRAM

Color Space Conversion در Pipeline ویدئو

فریم Decodeشده همیشه در قالب مناسب نمایش، تدوین یا
Encode بعدی قرار ندارد. به همین دلیل ممکن است لازم
باشد فضای رنگ، مدل رنگ، دامنه سیگنال یا عمق رنگ آن
تغییر کند.

تبدیل‌هایی مانند YUV به RGB، Limited Range به
Full Range، Rec.709 به Rec.2020 و SDR به HDR یا
برعکس، در این مرحله انجام می‌شوند.

این عملیات ممکن است توسط موتور پردازش ویدئو،
Shaderهای GPU، واحدهای Compute یا CPU اجرا شود.

تفاوت YUV و RGB

بیشتر فایل‌های فشرده ویدئویی با ساختاری مبتنی بر
روشنایی و مؤلفه‌های رنگ ذخیره می‌شوند که معمولاً
با نام عمومی YUV یا دقیق‌تر YCbCr شناخته می‌شود.

نمایشگرها و بسیاری از مراحل رندر گرافیکی معمولاً
با مقادیر قرمز، سبز و آبی یا RGB کار می‌کنند.

بنابراین در مسیر پخش یا تدوین، تبدیل میان YUV و RGB
یکی از عملیات بسیار رایج است.

مقایسه ساختارهای YUV و RGB
معیار YUV / YCbCr RGB
مؤلفه‌ها روشنایی و اطلاعات رنگ قرمز، سبز و آبی
کاربرد اصلی Codec، Broadcast و Video نمایشگر، رابط کاربری و رندر
Chroma Subsampling رایج معمولاً وجود ندارد
حجم داده قابل کاهش با 4:2:0 و 4:2:2 معمولاً بیشتر
مناسب تدوین گرافیکی وابسته به Workflow بسیار رایج

مسیر تبدیل YUV به RGB

هنگام پخش یک فایل ویدئویی، Decoder معمولاً فریم را
در قالب YUV تولید می‌کند. سپس Display Pipeline یا
GPU آن را به RGB مناسب نمایشگر تبدیل می‌کند.

اگر ماتریس رنگ، Range یا Transfer Function به‌درستی
تفسیر نشوند، تصویر ممکن است روشن‌تر، تیره‌تر،
کم‌رنگ یا دارای رنگ‌های اشتباه نمایش داده شود.

Color Matrix چیست؟

Color Matrix مجموعه ضرایبی است که نحوه تبدیل
مؤلفه‌های YCbCr به RGB و برعکس را تعیین می‌کند.

استانداردهایی مانند Rec.601، Rec.709 و Rec.2020
از ضرایب متفاوتی استفاده می‌کنند.

انتخاب Matrix اشتباه می‌تواند باعث تغییر محسوس
رنگ پوست، سبزها، قرمزها و میزان اشباع تصویر شود.

ماتریس‌های رنگ رایج در ویدئو
استاندارد کاربرد رایج نکته
Rec.601 SD Video رایج در محتوای قدیمی‌تر
Rec.709 HD و SDR استاندارد رایج Full HD
Rec.2020 UHD و HDR محدوده رنگ گسترده‌تر

تفاوت Full Range و Limited Range

دامنه عددی سیگنال ویدئویی می‌تواند به‌صورت Full
Range یا Limited Range تعریف شود.

در Limited Range بخشی از محدوده عددی برای مقادیر
کنترلی و سازگاری Broadcast کنار گذاشته می‌شود،
درحالی‌که Full Range از دامنه گسترده‌تری استفاده
می‌کند.

مقایسه دامنه رنگ Full و Limited
معیار Limited Range Full Range
کاربرد Video و Broadcast رایانه و Graphics
سیاه و سفید در محدوده محدودتر در کل دامنه قابل استفاده
خطر تنظیم اشتباه سیاهی خاکستری یا تصویر کم‌کنتراست ازبین‌رفتن جزئیات سایه و Highlight
استفاده رایج تلویزیون و فایل ویدئویی مانیتور و محتوای رایانه‌ای

خطای Range Mismatch

اگر فایل Limited Range به‌عنوان Full Range تفسیر
شود، سایه‌ها بیش‌ازحد تیره و بخش‌های روشن بریده
می‌شوند.

اگر فایل Full Range به‌عنوان Limited Range نمایش
داده شود، تصویر خاکستری، کم‌کنتراست و شسته‌شده
به نظر می‌رسد.

نشانه‌های تنظیم نادرست Range
خطا نشانه ظاهری نتیجه
Limited به‌عنوان Full سایه‌های بسیار تیره Black Crush و White Clipping
Full به‌عنوان Limited سیاهی خاکستری کاهش Contrast

Transfer Function چیست؟

Transfer Function رابطه میان مقدار عددی سیگنال
و روشنایی قابل نمایش را تعیین می‌کند.

محتوای SDR و HDR از منحنی‌های متفاوتی استفاده
می‌کند. برای نمونه، PQ و HLG برای HDR طراحی
شده‌اند.

Transfer Functionهای رایج
منحنی کاربرد ویژگی
Gamma / BT.1886 SDR نمایش سنتی تلویزیونی
PQ HDR10 و Dolby Vision مدل‌سازی دامنه روشنایی بسیار گسترده
HLG Broadcast HDR مناسب پخش زنده و سازگاری Broadcast

تبدیل SDR و HDR

تبدیل میان SDR و HDR تنها افزایش یا کاهش روشنایی
نیست. فضای رنگ، Transfer Function، Metadata،
Bit Depth و محدوده روشنایی باید هم‌زمان مدیریت
شوند.

تبدیل HDR به SDR معمولاً با Tone Mapping انجام
می‌شود تا جزئیات نقاط روشن در محدوده محدودتر SDR
حفظ شوند.

تبدیل SDR به HDR می‌تواند دامنه روشنایی را گسترش
دهد، اما جزئیات واقعی HDR را که در منبع ثبت نشده‌اند
ایجاد نمی‌کند.

Tone Mapping چیست؟

Tone Mapping دامنه روشنایی تصویر را با توان
نمایشگر یا قالب خروجی هماهنگ می‌کند.

برای مثال، ویدئوی HDR ممکن است نقاط بسیار روشنی
داشته باشد که نمایشگر SDR قادر به نمایش مستقیم
آن‌ها نیست.

الگوریتم Tone Mapping تلاش می‌کند این اطلاعات را
به محدوده کوچک‌تر منتقل کند، بدون اینکه تصویر
بیش‌ازحد تاریک یا Highlightها کاملاً سفید شوند.

اهداف اصلی Tone Mapping
هدف نتیجه
حفظ Highlight کاهش White Clipping
حفظ سایه جلوگیری از تاریک‌شدن بیش‌ازحد
حفظ Contrast طبیعی‌ماندن تصویر
تطبیق با نمایشگر استفاده از توان واقعی پنل

Gamut Mapping چیست؟

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

Gamut Mapping این رنگ‌ها را به محدوده مقصد منتقل
می‌کند تا از Clipping شدید یا تغییر غیرطبیعی رنگ
جلوگیری شود.

نمونه تبدیل محدوده رنگ
مبدأ مقصد نیاز اصلی
Rec.2020 Rec.709 فشرده‌سازی Gamut
P3 Rec.709 مدیریت رنگ‌های اشباع
Rec.709 Rec.2020 تبدیل فضای سیگنال بدون ایجاد رنگ واقعی جدید

تبدیل Bit Depth در Pipeline

ممکن است فریم ۱۰ بیت برای پردازش وارد Pipeline
شود، اما خروجی نهایی ۸ بیت باشد یا برعکس.

کاهش Bit Depth می‌تواند باعث Banding شود، به‌ویژه
در Gradientهای نرم، آسمان، سایه و محتوای HDR.

افزایش عددی Bit Depth بدون وجود اطلاعات واقعی
بیشتر، جزئیات ازدست‌رفته را بازسازی نمی‌کند؛ اما
می‌تواند برای پردازش داخلی دقیق‌تر مفید باشد.

اثر تبدیل عمق رنگ
تبدیل نتیجه خطر
10-bit به 8-bit کاهش سطوح رنگ Banding
8-bit به 10-bit فضای پردازشی بزرگ‌تر ایجادنشدن اطلاعات واقعی جدید
Integer به Float دقت بیشتر در پردازش میانی مصرف حافظه و محاسبات بیشتر

Dithering در کاهش Bit Depth

هنگام تبدیل ویدئوی ۱۰ یا ۱۲ بیت به ۸ بیت، Dithering
می‌تواند احتمال Banding را کاهش دهد.

این روش نویز بسیار کنترل‌شده‌ای به تصویر اضافه
می‌کند تا مرز میان سطوح رنگ کمتر قابل مشاهده باشد.

Scaling در Pipeline ویدئو

Scaling به معنی تغییر Resolution تصویر است.
کاهش وضوح Downscaling و افزایش وضوح Upscaling
نامیده می‌شود.

کیفیت Scaling به الگوریتم، Bit Depth، Chroma،
نوع محتوا و توان واحد پردازشی وابسته است.

Scaling ممکن است توسط Shaderهای GPU، واحد ثابت
Video Processor، نمایشگر یا CPU انجام شود.

انواع Scaling در ویدئو
نوع نمونه کاربرد
Downscaling 4K به 1080p کاهش حجم و سازگاری
Upscaling 1080p به 4K تطبیق با نمایشگر یا خروجی
Aspect Ratio Scaling 4:3 به 16:9 تطبیق قاب تصویر
Adaptive Scaling تولید چند Resolution Streaming تطبیقی

الگوریتم‌های Scaling

مقایسه الگوریتم‌های رایج Scaling
الگوریتم سرعت کیفیت کاربرد
Nearest Neighbor بسیار سریع پایین Pixel Art و کاربرد خاص
Bilinear سریع متوسط پردازش Real-Time
Bicubic متوسط خوب تدوین و خروجی عمومی
Lanczos کندتر بالا Downscaling باکیفیت
AI Upscaling وابسته به سخت‌افزار بالقوه بسیار بالا بازسازی جزئیات و Super Resolution

Chroma Scaling

در فایل‌های 4:2:0 و 4:2:2، وضوح اطلاعات رنگ کمتر
از وضوح روشنایی است.

پیش از تبدیل YUV به RGB یا اجرای بعضی افکت‌ها،
اطلاعات Chroma باید Upsample شود.

الگوریتم ضعیف Chroma Upsampling می‌تواند باعث
لبه‌های رنگی، تاری متن یا تغییر رنگ در مرز اجسام
شود.

Aspect Ratio در Scaling

تغییر Resolution بدون توجه به نسبت تصویر می‌تواند
باعث کشیدگی یا فشردگی سوژه‌ها شود.

Pipeline باید میان Pixel Aspect Ratio، Display
Aspect Ratio و Resolution واقعی تفاوت قائل شود.

روش‌های مدیریت نسبت تصویر
روش نتیجه کاربرد
Stretch پرشدن قاب با تغییر شکل تصویر معمولاً نامطلوب
Letterbox نوار افقی یا عمودی حفظ کامل تصویر
Crop حذف بخشی از تصویر پرکردن کامل قاب
Smart Reframe Crop متحرک بر اساس سوژه شبکه‌های اجتماعی و AI

ویدئوی Interlaced چیست؟

در ویدئوی Interlaced هر تصویر به دو Field تقسیم
می‌شود. یک Field خطوط فرد و Field دیگر خطوط زوج
تصویر را نگهداری می‌کند.

این روش در تلویزیون‌های قدیمی و بسیاری از سیستم‌های
Broadcast استفاده می‌شد تا با پهنای باند محدود،
حرکت روان‌تری ایجاد شود.

Deinterlacing چیست؟

نمایشگرهای جدید Progressive هستند و باید دو Field
ویدئوی Interlaced را به فریم کامل تبدیل کنند.

این عملیات Deinterlacing نام دارد و کیفیت آن
تأثیر مستقیمی بر وضوح و روانی حرکت دارد.

Deinterlacing می‌تواند توسط Display Engine،
Video Processor، Shaderهای GPU یا CPU انجام شود.

روش‌های رایج Deinterlacing
روش کیفیت ویژگی
Weave مناسب تصویر ثابت ترکیب دو Field بدون تحلیل حرکت
Bob متوسط تبدیل هر Field به فریم مستقل
Motion Adaptive خوب انتخاب روش بر اساس حرکت
Motion Compensated بسیار بالا بازسازی بر اساس تخمین حرکت
AI Deinterlacing بالقوه بسیار بالا بازسازی Field با مدل یادگیری ماشین

خطاهای رایج Deinterlacing

Artifactهای ناشی از Deinterlacing نامناسب
خطا ظاهر علت
Combing لبه‌های دندانه‌دار در حرکت ترکیب Fieldهای متعلق به زمان‌های متفاوت
Flicker لرزش خطوط ریز بازسازی ضعیف Field
کاهش وضوح تصویر نرم یا تار Bob یا فیلتر ساده
Ghosting رد حرکت تحلیل نادرست Motion

کدام واحدها Color Conversion و Scaling را انجام می‌دهند؟

تقسیم وظایف مراحل میانی Pipeline
عملیات واحد احتمالی نکته
YUV به RGB Video Processor، Shader یا Display Engine وابسته به مسیر نمایش یا تدوین
Tone Mapping Shader، Compute، AI یا نمایشگر کیفیت الگوریتم اهمیت زیادی دارد
Scaling Fixed-Function Scaler، Shader یا CPU کیفیت و سرعت متفاوت است
Deinterlacing Video Processor، GPU یا CPU نیازمند تحلیل حرکت در روش‌های پیشرفته
Bit Depth Conversion Shader، Video Processor یا Encoder Dithering ممکن است لازم باشد
Gamut Mapping Color Management Engine یا Shader وابسته به پروفایل رنگ و خروجی

گلوگاه‌های مراحل میانی Pipeline

مشکلات رایج در Color، Scaling و Deinterlacing
گلوگاه نشانه علت احتمالی
Color Conversion رنگ یا Contrast اشتباه Matrix، Range یا Transfer نادرست
Tone Mapping HDR بسیار تاریک یا روشن الگوریتم نامناسب یا Metadata ناقص
Scaling تاری، Halo یا لبه‌های دندانه‌دار الگوریتم ضعیف یا Resize چندباره
Chroma Upsampling متن رنگی تار بازسازی ضعیف 4:2:0 یا 4:2:2
Deinterlacing Combing یا Ghosting تحلیل حرکت نامناسب
Memory Bandwidth افت سرعت در 4K یا 8K چند Buffer و فیلتر هم‌زمان

مرحله Filtering و Video Processing

پس از Decode، تبدیل فضای رنگ و تغییر Resolution،
معمولاً تصویر وارد مرحله‌ای می‌شود که در آن
کیفیت تصویر بهبود یافته یا افکت‌های مختلف روی آن
اعمال می‌شوند.

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

بسته به نوع نرم‌افزار و سخت‌افزار، این عملیات
می‌تواند روی CPU، Shaderهای GPU، واحدهای Compute،
Tensor Core یا NPU انجام شود.

جایگاه Filtering در Pipeline

انواع Filterهای پردازش تصویر

مهم‌ترین گروه‌های Filter در پردازش ویدئو
گروه هدف نمونه
Noise Reduction حذف نویز Denoise
Sharpening افزایش وضوح Unsharp Mask
Color Correction اصلاح رنگ White Balance
Tone Mapping مدیریت HDR PQ → SDR
Geometric تغییر شکل تصویر Rotate و Crop
AI Filters بازسازی تصویر Super Resolution

Noise Reduction یا Denoising

نویز می‌تواند توسط سنسور دوربین، ISO بالا،
فشرده‌سازی شدید یا انتقال تصویر ایجاد شود.

الگوریتم‌های Denoise تلاش می‌کنند بدون از بین بردن
جزئیات مهم، نویز را کاهش دهند.

انواع Denoise
روش ویژگی سرعت
Spatial بررسی پیکسل‌های همسایه زیاد
Temporal استفاده از چند Frame متوسط
AI Denoise مدل یادگیری ماشین وابسته به GPU

Sharpening

Sharpening اختلاف روشنایی در لبه‌ها را افزایش
می‌دهد تا تصویر واضح‌تر به نظر برسد.

افزایش بیش از حد Sharpening باعث Halo، نویز و
مصنوعی‌شدن تصویر می‌شود.

Color Correction

Color Correction برای اصلاح خطاهای ثبت تصویر
استفاده می‌شود و معمولاً شامل تنظیم White Balance،
Exposure، Contrast، Saturation و Gamma است.

هدف این مرحله بازگرداندن تصویر به ظاهر طبیعی است،
نه ایجاد سبک هنری.

Color Grading

برخلاف Color Correction، در Color Grading ظاهر
هنری تصویر تغییر داده می‌شود.

فیلم‌های سینمایی، تبلیغات و بازی‌های رایانه‌ای
معمولاً از Grading برای ایجاد حس بصری خاص استفاده
می‌کنند.

تفاوت Color Correction و Color Grading
معیار Correction Grading
هدف اصلاح تصویر خلق ظاهر هنری
زمان انجام ابتدای تدوین پس از اصلاح
نمونه اصلاح White Balance ظاهر سینمایی گرم یا سرد

پردازش مبتنی بر هوش مصنوعی

در سال‌های اخیر بسیاری از مراحل Pipeline توسط
مدل‌های هوش مصنوعی انجام می‌شوند.

این مدل‌ها می‌توانند جزئیات ازدست‌رفته را بازسازی،
نویز را حذف، چهره را ترمیم یا Resolution را افزایش
دهند.

کاربردهای AI در پردازش ویدئو
عملیات هدف
AI Upscaling افزایش Resolution
AI Denoise حذف نویز
Frame Interpolation افزایش نرخ فریم
Object Removal حذف عناصر ناخواسته
Face Restoration ترمیم چهره
Background Replacement تعویض پس‌زمینه

اجرای Filterها توسط کدام واحد؟

تقسیم وظایف سخت‌افزاری
عملیات واحد رایج
Blur Shader یا Compute
Sharpen Shader
Color LUT Shader
AI Processing Tensor Core یا NPU
Temporal Filter GPU Compute یا CPU
Motion Estimation Video Engine یا GPU

گلوگاه‌های مرحله Filtering

مشکلات رایج هنگام پردازش تصویر
گلوگاه پیامد
فیلترهای AI سنگین افزایش زمان پردازش
کمبود VRAM جابجایی مکرر داده میان RAM و VRAM
فیلترهای متعدد کاهش سرعت Timeline
Temporal Filter مصرف حافظه زیاد
CPU Processing استفاده زیاد از پردازنده

مرحله Encode

پس از پایان تمام مراحل پردازش، فریم‌های خام یا
پردازش‌شده باید دوباره به یک Bitstream فشرده
تبدیل شوند. این مرحله Encode نام دارد.

Encoder با استفاده از Codec انتخاب‌شده مانند
H.264، HEVC، AV1 یا VP9 داده تصویری را فشرده
می‌کند تا برای ذخیره یا انتقال مناسب باشد.

برخلاف Decoder که Bitstream را بازسازی می‌کند،
Encoder باید تصمیم بگیرد کدام اطلاعات حفظ شوند،
کدام قسمت‌ها حذف شوند و هر Frame چگونه فشرده شود.

مسیر Encode در Pipeline

Encoder چه کارهایی انجام می‌دهد؟

مراحل اصلی عملیات Encode
مرحله توضیح
Motion Estimation تشخیص حرکت میان Frameها
Prediction پیش‌بینی بخش‌های مشابه تصویر
Transform تبدیل داده برای فشرده‌سازی
Quantization کاهش دقت داده برای کم‌شدن حجم
Entropy Coding تولید Bitstream نهایی

Encode سخت‌افزاری و نرم‌افزاری

مقایسه Hardware و Software Encoding
ویژگی Hardware Software
سرعت بسیار زیاد کمتر
مصرف CPU پایین زیاد
کیفیت در Bitrate پایین معمولاً کمتر معمولاً بهتر
تنظیمات قابل کنترل محدودتر بسیار گسترده
مناسب برای Live Streaming آرشیو و خروجی نهایی

مرحله Multiplexing یا Mux

خروجی Encoder تنها Stream تصویری است. برای تولید
فایل نهایی باید این Stream همراه با صدا، زیرنویس،
Chapter و Metadata داخل یک Container قرار گیرد.

این عملیات Multiplexing یا به اختصار Mux نام
دارد.

تفاوت Demux و Mux

مقایسه Demux و Mux
معیار Demux Mux
ورودی Container Streamهای جداگانه
خروجی Streamها Container
جهت عملیات جداسازی ترکیب
تغییر Codec خیر خیر

خروجی نهایی Pipeline

پس از عملیات Mux، خروجی می‌تواند به‌صورت فایل،
Stream زنده یا مستقیماً برای نمایش ارسال شود.

انواع خروجی Pipeline
خروجی نمونه
File MP4، MKV، MOV
Streaming RTMP، HLS، DASH، WebRTC
Broadcast MPEG-TS
Display نمایش مستقیم روی مانیتور

Pipeline هنگام پخش ویدئو

تفاوت Export و Playback

مقایسه Export و Playback
معیار Playback Export
Encode معمولاً ندارد دارد
Mux ندارد دارد
سرعت Real-Time وابسته به پروژه
خروجی نمایش تصویر فایل یا Stream

جمع‌بندی کامل Pipeline ویدئو

گلوگاه‌های رایج Pipeline

عوامل محدودکننده عملکرد Pipeline
مرحله گلوگاه رایج
Capture پهنای باند ورودی
Decode توان Decoder
Color Processing Memory Bandwidth
Scaling Shader یا Video Processor
Filtering GPU Compute و VRAM
Encode Encoder و Bitrate
Mux Storage و I/O
Output دیسک یا شبکه

معماری سخت‌افزاری پردازش ویدئو در GPU

پردازش ویدئو در GPU تنها توسط یک واحد انجام
نمی‌شود. موتور Decode، موتور Encode، واحدهای
Shader یا Compute، حافظه گرافیکی، موتور نمایش
و مسیرهای انتقال داده، همگی بخش‌هایی از یک
زیرسیستم هماهنگ هستند که هرکدام وظیفه مشخصی
در Pipeline ویدئو دارند.

نمای کلی معماری پردازش ویدئو در GPU

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

Decode و Encode Codecهای مشخص معمولاً روی
موتورهای ثابت انجام می‌شوند، اما افکت،
Color Grading، Scaling پیشرفته، پردازش AI و
Compositing به Shader Core، Compute Unit یا
واحدهای هوش مصنوعی نیاز دارند.

مسیر کامل داده درون GPU

واحدهای اصلی در پردازش ویدئو

اجزای سخت‌افزاری درگیر در Pipeline ویدئو
واحد وظیفه اصلی نمونه عملیات
Decode Engine بازکردن Bitstream فشرده H.264، HEVC، VP9 و AV1 Decode
Encode Engine فشرده‌سازی Frameها ضبط، Export و Streaming
Shader Core پردازش قابل برنامه‌ریزی تصویر Color، Blur، Sharpen و Scaling
Compute Unit عملیات محاسباتی عمومی Denoise، Optical Flow و Effects
AI Accelerator اجرای مدل‌های یادگیری ماشین Upscaling، حذف نویز و تشخیص اشیا
Display Engine آماده‌سازی خروجی نمایشگر Timing، HDR، Overlay و Scanout
Memory Controller مدیریت دسترسی به VRAM انتقال Frame Buffer و Texture
Copy Engine جابه‌جایی داده میان حافظه‌ها RAM به VRAM و Buffer Copy

واحدهای Fixed-Function چیستند؟

واحد Fixed-Function مداری است که برای انجام
مجموعه‌ای مشخص از عملیات طراحی شده است.

موتورهای NVENC، NVDEC، AMD VCN و Intel Media
Engine نمونه‌هایی از واحدهای Fixed-Function
هستند.

این واحدها انعطاف Shaderها را ندارند، اما برای
وظیفه تخصصی خود معمولاً سریع‌تر و کم‌مصرف‌تر
هستند.

ویژگی‌های واحدهای Fixed-Function
ویژگی نتیجه
طراحی تخصصی سرعت زیاد برای Codecهای مشخص
مصرف انرژی کمتر مناسب لپ‌تاپ و پخش طولانی
انعطاف محدود فقط قابلیت‌های پیاده‌سازی‌شده در سخت‌افزار
فعالیت مستقل امکان Encode یا Decode هم‌زمان با Shader
وابستگی به نسل تفاوت Codec و Profile در معماری‌های مختلف

واحدهای قابل برنامه‌ریزی

Shader Coreها و Compute Unitها می‌توانند
الگوریتم‌های متنوعی را اجرا کنند و محدود به
یک Codec یا عملیات ثابت نیستند.

این واحدها معمولاً برای پردازش‌های میانی
Pipeline مانند Color، Scaling، Filtering،
Compositing، Optical Flow و AI استفاده می‌شوند.

تفاوت واحد ثابت و قابل برنامه‌ریزی
معیار Fixed-Function Programmable Unit
انعطاف محدود بسیار زیاد
مصرف انرژی برای Codec کمتر بیشتر
قابلیت اجرای افکت محدود یا ندارد گسترده
قابلیت به‌روزرسانی الگوریتم محدود به سخت‌افزار از طریق نرم‌افزار و Shader
وظیفه رایج Encode و Decode Processing و Effects

نقش Shader Core در پردازش ویدئو

Shader Coreها تنها برای بازی و رندر سه‌بعدی
استفاده نمی‌شوند. بسیاری از افکت‌ها و
تبدیل‌های تصویری نیز با Shader اجرا می‌شوند.

هرچه Resolution، Bit Depth و تعداد Layerها
بیشتر باشد، تعداد عملیات موردنیاز Shaderها
نیز افزایش پیدا می‌کند.

وظایف رایج Shaderها در ویدئو
عملیات توضیح فشار سخت‌افزاری
Color Correction تغییر رنگ، Gamma و Contrast متوسط
LUT Processing اعمال جدول تبدیل رنگ کم تا متوسط
Scaling تغییر Resolution وابسته به الگوریتم
Blur و Sharpen فیلترهای Spatial متوسط
Compositing ترکیب چند Layer زیاد
Noise Reduction پردازش Spatial یا Temporal زیاد تا بسیار زیاد

نقش Compute در ویدئو

Compute APIهایی مانند CUDA، OpenCL، DirectCompute
و Metal اجازه می‌دهند نرم‌افزار الگوریتم‌های
پیچیده پردازش ویدئو را روی GPU اجرا کند.

پردازش Temporal، Optical Flow، Stabilization،
Noise Reduction و بعضی عملیات RAW Processing
معمولاً به Compute وابسته هستند.

نقش Tensor Core، XMX و واحدهای AI

بعضی GPUها دارای واحدهای اختصاصی برای محاسبات
ماتریسی و مدل‌های هوش مصنوعی هستند.

این واحدها می‌توانند الگوریتم‌هایی مانند
Super Resolution، Frame Interpolation،
Denoising، Background Removal و Face
Restoration را سریع‌تر اجرا کنند.

نام واحدهای هوش مصنوعی در معماری‌های مختلف
سازنده نام واحد کاربرد ویدئویی
NVIDIA Tensor Core AI Upscaling، Denoise و Inference
Intel XMX XeSS، AI Processing و Media Effects
AMD AI Accelerator پردازش مدل‌های AI در معماری‌های مناسب
Apple Neural Engine Video Effects و Machine Learning

تفاوت Video Engine و واحد AI

مقایسه موتور Codec و شتاب‌دهنده AI
معیار Video Engine AI Accelerator
وظیفه اصلی Encode و Decode Codec اجرای مدل یادگیری ماشین
ورودی Bitstream یا Frame Tensor و داده پردازشی
انعطاف محدود به Codecها وابسته به مدل نرم‌افزاری
نمونه کاربرد H.264 و AV1 Encode Upscaling و حذف پس‌زمینه
فعالیت هم‌زمان امکان‌پذیر امکان‌پذیر

Display Engine چیست؟

Display Engine بخش مستقلی از GPU است که Frame
نهایی را از حافظه خوانده و با Timing مناسب به
خروجی‌های HDMI، DisplayPort یا پنل داخلی
ارسال می‌کند.

این واحد ممکن است وظایفی مانند Scaling نهایی،
ترکیب Overlayها، مدیریت HDR، تبدیل Range،
Refresh Rate و همگام‌سازی نمایشگر را انجام دهد.

وظایف اصلی Display Engine
وظیفه توضیح
Scanout خواندن Frame Buffer و ارسال به نمایشگر
Timing تولید زمان‌بندی پیکسل و Refresh Rate
Overlay ترکیب Video Plane و رابط کاربری
HDR Output ارسال Metadata و سیگنال HDR
Output Encoding آماده‌سازی سیگنال HDMI یا DisplayPort

Video Overlay و Hardware Plane

بعضی GPUها می‌توانند ویدئو را روی یک Hardware
Plane مستقل از رابط کاربری نمایش دهند.

در این حالت، Display Engine تصویر ویدئو و
Desktop را هنگام خروجی ترکیب می‌کند و نیاز
به Compositing کامل توسط Shader کاهش می‌یابد.

Copy Engine و انتقال Frame

Copy Engine برای جابه‌جایی داده میان RAM،
VRAM و Bufferهای مختلف استفاده می‌شود.

این واحد می‌تواند انتقال داده را بدون اشغال
کامل Shaderها انجام دهد، اما همچنان به پهنای
باند PCI Express و حافظه محدود است.

مسیرهای رایج انتقال داده ویدئویی
مسیر کاربرد گلوگاه احتمالی
RAM به VRAM بارگذاری Frame یا Texture PCI Express
VRAM به RAM Readback، Capture یا پردازش CPU Latency و پهنای باند
VRAM به VRAM کپی میان Bufferها Memory Bandwidth
GPU به GPU سیستم‌های چند GPU Interconnect یا PCI Express

فعالیت هم‌زمان واحدهای مختلف GPU

یکی از مزیت‌های GPU مدرن این است که Decode،
Compute، Encode و Display می‌توانند تا حدی
هم‌زمان فعالیت کنند.

برای مثال، در یک Workflow زنده ممکن است NVDEC
فریم ورودی را Decode کند، Shaderها افکت را
اعمال کنند و NVENC هم‌زمان Frame قبلی را
Encode کند.

پردازش Asynchronous در Pipeline

در پردازش Asynchronous، نرم‌افزار تلاش می‌کند
هر موتور مستقل GPU را بدون انتظار غیرضروری
برای سایر بخش‌ها مشغول نگه دارد.

استفاده صحیح از Queueها، Fenceها، Bufferها و
Synchronization می‌تواند Throughput را افزایش
دهد.

همگام‌سازی نامناسب نیز می‌تواند باعث شود یک
موتور سریع منتظر تکمیل مرحله دیگری بماند و
ظرفیت سخت‌افزار استفاده نشود.

تعادل میان واحدهای GPU

قدرت بالای یک واحد به‌تنهایی عملکرد کل Pipeline
را تضمین نمی‌کند.

ممکن است Encoder بسیار سریع باشد، اما Decode،
VRAM، Memory Bandwidth یا Shader Processing
نتواند Frame کافی در اختیار آن قرار دهد.

نمونه عدم تعادل در معماری ویدئویی
بخش قدرتمند بخش محدودکننده نتیجه
Encode Engine Shader Processing Encoder منتظر Frame می‌ماند
Shader Core Decode Engine ورودی کافی برای افکت وجود ندارد
Decode Engine VRAM چند Stream قابل نگهداری نیست
AI Accelerator Memory Bandwidth مدل منتظر انتقال داده می‌ماند
GPU Compute PCI Express انتقال RAM و VRAM گلوگاه می‌شود

گلوگاه‌های رایج معماری GPU در ویدئو

محدودیت‌های متداول در زیرسیستم ویدئویی GPU
گلوگاه نشانه علت احتمالی
Video Decode افت فریم در پخش چند Stream Throughput ناکافی Decoder
Video Encode Export یا Stream کند Session یا ظرفیت Encoder
Shader Core Preview کند با افکت فعال بار زیاد Color یا Filtering
AI Unit کندی Super Resolution ظرفیت کم یا نبود شتاب‌دهنده سازگار
VRAM Stutter یا انتقال به RAM ظرفیت ناکافی Frame Buffer
Memory Bandwidth افت سرعت در 8K و Multicam انتقال چند Buffer بزرگ
Copy Engine تأخیر در Readback یا Upload انتقال‌های هم‌زمان زیاد
PCI Express کندی میان CPU و GPU Zero-Copy نبودن Pipeline

موتورهای پردازش ویدئو در GPUهای مدرن

تقریباً تمام GPUهای امروزی دارای یک یا چند
موتور اختصاصی برای Decode و Encode ویدئو هستند.
این موتورها مستقل از Shader Coreها کار
می‌کنند و وظیفه آن‌ها اجرای سریع و کم‌مصرف
Codecهای ویدئویی است.

Video Engine چیست؟

Video Engine مجموعه‌ای از مدارهای
Fixed-Function است که عملیات Decode،
Encode و در بعضی معماری‌ها پردازش‌های جانبی
ویدئو را انجام می‌دهد.

این موتور به گونه‌ای طراحی شده است که بدون
اشغال Shader Coreها بتواند چندین Stream
ویدئویی را با مصرف انرژی پایین پردازش کند.

معماری عمومی موتورهای ویدئویی

NVIDIA Video Engine

NVIDIA برای Decode از موتور
NVDEC
و برای Encode از
NVENC
استفاده می‌کند.

این دو موتور از Shaderها مستقل هستند و حتی
هنگام اجرای بازی یا رندر سه‌بعدی نیز می‌توانند
فعال باقی بمانند.

اجزای موتور ویدئویی NVIDIA
واحد وظیفه
NVDEC Decode سخت‌افزاری
NVENC Encode سخت‌افزاری
Optical Flow Engine تحلیل حرکت
Tensor Core AI Video Processing

AMD Video Core Next (VCN)

AMD از معماری
Video Core Next یا VCN
برای Encode و Decode استفاده می‌کند.

VCN نسل‌های مختلفی دارد که هر نسل قابلیت
پشتیبانی از Codecهای بیشتری را اضافه کرده است.

اجزای VCN
واحد وظیفه
Decode بازکردن Stream
Encode تولید Stream فشرده
Memory Interface ارتباط با VRAM

Intel Media Engine و Quick Sync Video

اینتل سال‌هاست از فناوری
Quick Sync Video
برای Encode و Decode سخت‌افزاری استفاده می‌کند.

در معماری‌های جدید Xe، این قابلیت بخشی از
Media Engine محسوب می‌شود و در کنار واحدهای
XMX برای پردازش AI فعالیت می‌کند.

اجزای Media Engine اینتل
بخش وظیفه
Quick Sync Encode و Decode
XMX AI Processing
Display Engine خروجی تصویر

مقایسه موتورهای ویدئویی

مقایسه کلی معماری‌های ویدئویی
سازنده نام موتور Decode Encode قابلیت‌های ویژه
NVIDIA NVDEC / NVENC بله بله Optical Flow، Tensor Core
AMD VCN بله بله Video Core Next
Intel Media Engine بله بله Quick Sync، XMX

اجرای هم‌زمان موتورهای ویدئویی

یکی از مهم‌ترین مزایای GPUهای مدرن، اجرای
موازی چند موتور مستقل است.

گلوگاه‌های موتورهای ویدئویی

محدودیت‌های رایج Video Engine
گلوگاه پیامد
ظرفیت Decode کاهش تعداد Stream هم‌زمان
ظرفیت Encode کاهش سرعت Export
Memory Bandwidth انتظار موتورهای ویدئویی برای داده
VRAM محدودشدن تعداد Frame Bufferها
انتقال RAM و VRAM افزایش Latency

نسل‌های موتورهای Encode و Decode

نام Video Engine تنها بخشی از مشخصات آن است.
آنچه در عمل اهمیت بیشتری دارد، نسل موتور است.
هر نسل قابلیت پشتیبانی از Codecهای جدید،
Bit Depth بالاتر، Chroma Sampling متنوع‌تر،
رزولوشن‌های بزرگ‌تر و نرخ فریم بیشتر را اضافه
می‌کند.

چرا نسل Video Engine مهم‌تر از مدل GPU است؟

ممکن است دو کارت گرافیک از نظر تعداد Shader،
فرکانس یا حافظه تفاوت زیادی داشته باشند اما
دقیقاً از یک نسل Video Engine استفاده کنند.

در چنین شرایطی توان Encode و Decode آن‌ها
تقریباً یکسان خواهد بود.

برعکس، گاهی اختلاف یک نسل Video Engine باعث
اضافه شدن قابلیت‌هایی مانند AV1 Encode،
Decode سخت‌افزاری AV1، HDR پیشرفته یا
پشتیبانی از رزولوشن‌های بالاتر می‌شود.

نسل‌های NVENC و NVDEC

انویدیا تقریباً در هر نسل معماری GPU، نسخه
جدیدی از NVENC و NVDEC معرفی کرده است.

روند تکامل NVENC و NVDEC
معماری GPU قابلیت شاخص تغییر مهم
Kepler اولین NVENC Encode سخت‌افزاری اولیه
Maxwell HEVC اولیه بهبود کیفیت Encode
Pascal HEVC 10-bit HDR و کیفیت بهتر
Turing کیفیت بسیار بالاتر بهبود Motion Estimation
Ampere AV1 Decode Decode نسل جدید
Ada Lovelace AV1 Encode جهش بزرگ در Streaming

نسل‌های AMD VCN

AMD از زمان معرفی Video Core Next، چندین نسل
از VCN را ارائه کرده که هر نسل پشتیبانی از
Codecهای بیشتری را فراهم کرده است.

تکامل Video Core Next
نسل ویژگی شاخص
VCN 1.x HEVC و VP9
VCN 2.x بهبود کیفیت Encode
VCN 3.x Decode پیشرفته‌تر
VCN 4.x AV1 Encode و Decode

نسل‌های Intel Media Engine

Quick Sync Video از نسل Sandy Bridge تاکنون
به‌طور مداوم توسعه یافته و در معماری‌های Xe
بخشی از Media Engine محسوب می‌شود.

تکامل موتور رسانه اینتل
نسل ویژگی شاخص
Quick Sync اولیه H.264
Skylake HEVC 10-bit
Tiger Lake AV1 Decode
Arc و Xe AV1 Encode

قابلیت‌های هر نسل

ویژگی‌هایی که با هر نسل تغییر می‌کنند
قابلیت توضیح
Codec H.264، HEVC، VP9، AV1 و …
Bit Depth 8-bit، 10-bit، 12-bit
Chroma 4:2:0، 4:2:2، 4:4:4
Resolution 4K، 8K و بالاتر
FPS نرخ فریم قابل Encode و Decode
HDR HDR10، HLG و سایر قابلیت‌ها
کیفیت Encode الگوریتم Motion و Quantization

نسل جدید همیشه فقط سریع‌تر نیست

پیشرفت نسل‌های جدید تنها به افزایش سرعت محدود
نمی‌شود.

کیفیت Encode، پشتیبانی از Codecهای جدید،
مصرف انرژی، تعداد Streamهای هم‌زمان و امکانات
پردازشی نیز معمولاً بهبود پیدا می‌کنند.

نقش VRAM در پردازش ویدئو

VRAM حافظه محلی GPU است و Frameهای Decodeشده،
Textureها، Cacheها، Bufferهای پردازشی،
داده‌های افکت و خروجی‌های موقت را نگهداری
می‌کند. ظرفیت VRAM به‌تنهایی سرعت GPU را
مشخص نمی‌کند، اما کمبود آن می‌تواند باعث
افت شدید عملکرد، افزایش انتقال داده و
ناپایداری Timeline شود.

VRAM چیست؟

VRAM مخفف
Video Random Access Memory
است و حافظه‌ای با پهنای باند بالا محسوب می‌شود
که GPU برای دسترسی سریع به داده‌های گرافیکی و
ویدئویی از آن استفاده می‌کند.

برخلاف RAM سیستم که توسط CPU مدیریت می‌شود،
VRAM مستقیماً در اختیار GPU و کنترلر حافظه
گرافیکی قرار دارد.

Frameهای ویدئویی پس از Decode معمولاً در VRAM
ذخیره می‌شوند تا Shaderها، واحدهای Compute،
موتور Encode یا Display Engine بتوانند بدون
انتقال غیرضروری به RAM از آن‌ها استفاده کنند.

مسیر داده ویدئویی در VRAM

چه داده‌هایی در VRAM نگهداری می‌شوند؟

مهم‌ترین داده‌های ویدئویی داخل VRAM
نوع داده کاربرد عامل افزایش مصرف
Decode Frame Buffer نگهداری Frameهای بازسازی‌شده Resolution، Bit Depth و Chroma
Reference Frames پیش‌بینی فریم‌های وابسته Codec، GOP و تعداد Reference
Processing Buffers افکت، Scaling و Color تعداد Pass و Layer
Textures تصویر، Overlay، LUT و Asset اندازه و تعداد Texture
Temporal Buffers Denoise، Optical Flow و AI تعداد Frameهای تحلیل‌شده
Encode Surfaces آماده‌سازی Frame برای Encoder تعداد Stream و Lookahead
Display Buffers Frame نهایی نمایشگر Resolution و تعداد نمایشگر
AI Model Data وزن‌ها و Tensorهای مدل اندازه مدل و Precision

اندازه Frame Buffer چگونه تعیین می‌شود؟

اندازه یک Frame خام به Resolution، Bit Depth،
Chroma Sampling و فرمت ذخیره‌سازی داخلی بستگی
دارد.

افزایش Resolution تنها تعداد پیکسل را بیشتر
نمی‌کند؛ بلکه تقریباً تمام Bufferهای وابسته
به آن Frame را نیز بزرگ‌تر می‌سازد.

عوامل اصلی تعیین اندازه Frame Buffer
عامل اثر
Resolution افزایش تعداد کل پیکسل‌ها
Bit Depth افزایش داده هر مؤلفه رنگ
Chroma Sampling تعیین مقدار اطلاعات رنگی ذخیره‌شده
Alpha Channel افزودن مؤلفه شفافیت
Internal Format امکان استفاده از Integer یا Float
Alignment ایجاد Padding برای دسترسی سریع‌تر

اثر Resolution بر مصرف VRAM

با دو برابر شدن عرض و ارتفاع تصویر، تعداد کل
پیکسل‌ها تقریباً چهار برابر می‌شود.

به همین دلیل عبور از 1080p به 4K می‌تواند
مصرف حافظه Frame Buffer و بسیاری از افکت‌های
وابسته را چند برابر کند.

مقایسه تعداد تقریبی پیکسل در Resolutionهای رایج
Resolution تعداد تقریبی پیکسل بار نسبی حافظه
1920×1080 حدود 2.1 میلیون مبنا
2560×1440 حدود 3.7 میلیون بیشتر
3840×2160 حدود 8.3 میلیون نزدیک به چهار برابر 1080p
7680×4320 حدود 33.2 میلیون نزدیک به چهار برابر 4K

اثر Bit Depth بر مصرف VRAM

ویدئوی ۱۰ یا ۱۲ بیت برای هر مؤلفه رنگ داده
بیشتری نسبت به ویدئوی ۸ بیت نگهداری می‌کند.

در بسیاری از Pipelineهای حرفه‌ای، فریم‌ها
برای جلوگیری از خطای محاسباتی به فرمت‌های
16-bit Integer یا 16-bit و 32-bit Float تبدیل
می‌شوند که مصرف VRAM را بیشتر می‌کند.

اثر فرمت پردازشی بر حافظه
فرمت کاربرد مصرف نسبی
8-bit Integer پخش و خروجی عمومی پایین
10-bit / 12-bit HDR و تدوین حرفه‌ای بیشتر
16-bit Integer پردازش داخلی دقیق‌تر زیاد
16-bit Float Color Grading و Compositing زیاد
32-bit Float VFX و پردازش بسیار دقیق بسیار زیاد

اثر Chroma Sampling بر VRAM

در 4:2:0 اطلاعات رنگ با وضوح کمتری نسبت به
روشنایی ذخیره می‌شود، اما در 4:4:4 تمام
مؤلفه‌های رنگی با وضوح کامل نگهداری می‌شوند.

بنابراین پروژه‌های 4:4:4، RGB و دارای Alpha
معمولاً حافظه بیشتری نسبت به ویدئوی معمولی
4:2:0 مصرف می‌کنند.

مصرف نسبی حافظه در ساختارهای رنگی
ساختار اطلاعات رنگ مصرف نسبی VRAM
4:2:0 کاهش‌یافته کمترین
4:2:2 بیشتر متوسط
4:4:4 کامل زیاد
RGBA RGB کامل همراه Alpha بسیار زیاد

تعداد Layerها و مصرف VRAM

در Timelineهای چندلایه، هر Track ویدئویی،
Adjustment Layer، Mask، Graphic یا Overlay
ممکن است Frame Buffer مستقلی ایجاد کند.

پیش از ترکیب نهایی، چندین Layer باید هم‌زمان
در حافظه باقی بمانند.

مصرف VRAM در پروژه‌های Multicam

در تدوین Multicam چند Stream باید هم‌زمان
Decode شوند و Frameهای آن‌ها برای Preview،
Switching یا ساخت Proxy در حافظه باقی بمانند.

تعداد دوربین‌ها، Resolution، Codec، Bit Depth
و افکت‌های هر زاویه، مصرف VRAM را تعیین می‌کنند.

عوامل افزایش مصرف VRAM در Multicam
عامل اثر
تعداد Camera Angle افزایش Frame Bufferهای هم‌زمان
4K یا 8K بزرگ‌ترشدن هر Buffer
HEVC یا AV1 افزایش Reference و Decode Surface
Color Correction مستقل ایجاد Buffer پردازشی برای هر زاویه
Preview چندگانه نگهداری هم‌زمان خروجی چند Stream

افکت‌های Temporal و مصرف حافظه

افکت‌های Temporal تنها Frame فعلی را بررسی
نمی‌کنند و به Frameهای قبلی یا بعدی نیز نیاز
دارند.

Noise Reduction زمانی، Optical Flow،
Stabilization و Frame Interpolation ممکن است
چندین Frame کامل را هم‌زمان در VRAM نگهداری
کنند.

نمونه افکت‌های وابسته به چند Frame
افکت داده موردنیاز فشار حافظه
Temporal Denoise چند Frame متوالی زیاد
Optical Flow Frameهای مرجع و Motion Data زیاد
Stabilization تحلیل حرکت چند Frame متوسط تا زیاد
Frame Interpolation Frame قبل، بعد و Flow Map بسیار زیاد
Motion Blur Sampleهای زمانی متعدد وابسته به کیفیت

مصرف VRAM در پردازش ویدئویی AI

پردازش AI علاوه بر Frameهای ورودی و خروجی،
وزن‌های مدل، Activationها، Tensorهای میانی و
Bufferهای موقت را نیز در VRAM نگهداری می‌کند.

افزایش Resolution، Batch Size، Precision مدل
و تعداد Frameهای هم‌زمان می‌تواند مصرف حافظه
را به‌سرعت افزایش دهد.

عوامل مصرف VRAM در مدل‌های ویدئویی AI
عامل اثر
Model Size نگهداری وزن‌های بیشتر
Input Resolution افزایش Tensorهای ورودی و میانی
Batch Size پردازش چند Frame به‌صورت هم‌زمان
Precision تفاوت میان FP32، FP16 و INT8
Temporal Context نگهداری چند Frame برای تحلیل زمانی

تفاوت ظرفیت VRAM و سرعت VRAM

ظرفیت VRAM مشخص می‌کند چه مقدار داده می‌تواند
هم‌زمان در حافظه GPU باقی بماند.

پهنای باند حافظه مشخص می‌کند این داده‌ها با چه
سرعتی میان GPU و VRAM منتقل شوند.

یک کارت ممکن است VRAM زیادی داشته باشد اما
پهنای باند آن برای پردازش سنگین محدود باشد؛
یا برعکس، حافظه سریعی داشته باشد اما ظرفیت آن
برای پروژه بزرگ کافی نباشد.

مقایسه ظرفیت و پهنای باند VRAM
معیار ظرفیت VRAM پهنای باند VRAM
واحد اندازه‌گیری GB GB/s
نقش مقدار داده قابل نگهداری سرعت انتقال داده
کمبود Eviction و انتقال به RAM انتظار واحدهای پردازشی
کاربرد حساس 8K، AI و پروژه چندلایه Filtering، Color و Frameهای بزرگ

هنگام پرشدن VRAM چه اتفاقی می‌افتد؟

وقتی داده‌های پروژه از ظرفیت VRAM بیشتر شوند،
نرم‌افزار یا درایور ممکن است بخشی از Bufferها
را به RAM سیستم منتقل کند یا آن‌ها را دوباره
ایجاد نماید.

این فرآیند باعث افزایش Latency و استفاده از
PCI Express می‌شود و می‌تواند Timeline را
ناپایدار کند.

نشانه‌های کمبود VRAM

علائم رایج کمبود حافظه گرافیکی
نشانه علت احتمالی
Stutter ناگهانی Timeline انتقال Buffer میان VRAM و RAM
افت شدید سرعت با فعال‌شدن افکت ایجاد Bufferهای موقت بزرگ
خطای Out of Memory نبود فضای کافی برای Allocation جدید
کرش نرم‌افزار یا درایور شکست مدیریت حافظه یا Allocation
کاهش ناگهانی Resolution Preview تلاش نرم‌افزار برای کاهش مصرف حافظه
افزایش استفاده از RAM Shared یا Evicted GPU Memory

Shared GPU Memory چیست؟

سیستم‌عامل ممکن است بخشی از RAM را به‌عنوان
Shared GPU Memory در اختیار GPU قرار دهد.

این حافظه جایگزین واقعی VRAM نیست؛ زیرا دسترسی
به آن معمولاً تأخیر بیشتر و پهنای باند کمتری
دارد.

در گرافیک مجتمع، RAM سیستم حافظه اصلی GPU است،
اما در کارت مجزا Shared Memory بیشتر نقش فضای
اضطراری را دارد.

تفاوت VRAM و Shared GPU Memory
معیار VRAM اختصاصی Shared Memory
محل روی کارت گرافیک RAM سیستم
پهنای باند معمولاً بیشتر کمتر یا مشترک با CPU
Latency کمتر بیشتر
کاربرد فضای کاری اصلی GPU حافظه مجتمع یا فضای پشتیبان

Unified Memory در GPUهای مجتمع

در معماری‌های مجتمع، CPU و GPU ممکن است از
حافظه فیزیکی مشترک استفاده کنند.

این طراحی می‌تواند انتقال جداگانه میان RAM و
VRAM را کاهش دهد، اما CPU و GPU برای ظرفیت و
پهنای باند یک حافظه مشترک رقابت می‌کنند.

مزایا و محدودیت‌های حافظه یکپارچه
ویژگی نتیجه
فضای آدرس مشترک کاهش بعضی عملیات Copy
ظرفیت مشترک امکان استفاده انعطاف‌پذیرتر از RAM
پهنای باند مشترک رقابت CPU و GPU برای حافظه
نبود VRAM مجزا وابستگی بیشتر به سرعت RAM

چه عواملی VRAM موردنیاز پروژه را تعیین می‌کنند؟

عوامل تعیین‌کننده نیاز به VRAM
عامل مصرف VRAM
1080p با افکت ساده کم تا متوسط
4K ده‌بیتی متوسط تا زیاد
8K بسیار زیاد
Multicam وابسته به تعداد Stream
Fusion و VFX زیاد تا بسیار زیاد
Temporal Noise Reduction زیاد
AI Upscaling وابسته به مدل و Resolution
RAW Processing زیاد

روش‌های کاهش مصرف VRAM

روش‌های مدیریت بهتر حافظه گرافیکی
روش نتیجه
کاهش Preview Resolution کوچک‌شدن Frame Bufferهای Timeline
استفاده از Proxy کاهش Resolution و پیچیدگی Decode
Render Cache کاهش پردازش زنده بعضی افکت‌ها
کاهش Layerهای فعال آزادشدن Bufferهای Compositing
غیرفعال‌کردن افکت سنگین کاهش Bufferهای موقت و Temporal
کاهش Batch یا AI Model کاهش Tensor و وزن‌های فعال
بستن برنامه‌های GPUمحور آزادشدن VRAM رزروشده

چگونه مصرف VRAM را بررسی کنیم؟

ابزارهای مانیتورینگ می‌توانند مقدار Dedicated
GPU Memory، Shared GPU Memory، Memory
Bandwidth و فعالیت موتورهای مختلف GPU را
نمایش دهند.

تنها رسیدن مصرف VRAM به عدد بالا الزاماً مشکل
نیست؛ بعضی نرم‌افزارها حافظه آزاد را برای Cache
رزرو می‌کنند.

نشانه مهم‌تر، افت عملکرد هم‌زمان با افزایش
Shared Memory، انتقال PCI Express یا خطای
Allocation است.

پهنای باند حافظه (Memory Bandwidth)

اگر VRAM را انبار داده‌های GPU در نظر بگیریم،
Memory Bandwidth سرعت جابه‌جایی داده میان GPU و
این انبار است. بسیاری از پروژه‌های ویدئویی،
مخصوصاً در رزولوشن‌های بالا، نه به دلیل کمبود
قدرت پردازشی GPU بلکه به علت محدود بودن پهنای
باند حافظه کند می‌شوند.

Memory Bandwidth چیست؟

Memory Bandwidth مقدار داده‌ای است که GPU در
هر ثانیه می‌تواند میان هسته‌های پردازشی و
حافظه گرافیکی منتقل کند.

این مقدار معمولاً برحسب
GB/s
بیان می‌شود.

مسیر انتقال داده

چرا پهنای باند اهمیت دارد؟

هر افکت، هر Shader، هر عملیات AI و حتی Decode
و Encode برای پردازش باید داده را از VRAM
بخوانند و نتیجه را دوباره در VRAM بنویسند.

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

چه بخش‌هایی از پهنای باند استفاده می‌کنند؟

مصرف‌کنندگان اصلی Memory Bandwidth
بخش نوع دسترسی شدت مصرف
Shader خواندن و نوشتن Frame زیاد
Compute دسترسی تصادفی زیاد
AI Tensor و Buffer بسیار زیاد
Decode Frame Buffer متوسط
Encode Encode Surface متوسط
Display Engine Scanout کم تا متوسط

چه عواملی پهنای باند را تعیین می‌کنند؟

عوامل مؤثر بر Memory Bandwidth
عامل اثر
Memory Clock افزایش نرخ انتقال داده
Bus Width افزایش حجم داده در هر سیکل
نوع حافظه GDDR6، GDDR6X، HBM و …
تعداد کانال حافظه افزایش مسیرهای انتقال
Compression کاهش نیاز واقعی به انتقال

Bus Width چیست؟

Bus Width تعداد بیت‌هایی است که در هر سیکل
ساعت میان GPU و حافظه منتقل می‌شود.

هرچه Bus Width بیشتر باشد، در صورت ثابت بودن
سرعت حافظه، پهنای باند نیز افزایش پیدا می‌کند.

نمونه Bus Widthهای رایج
Bus Width کاربرد معمول
64-bit کارت‌های اقتصادی
128-bit رده میان‌رده
192-bit میان‌رده قدرتمند
256-bit حرفه‌ای
320-bit رده بالا
384-bit پرچمدار

نوع حافظه و اثر آن بر پهنای باند

مقایسه فناوری‌های حافظه
نوع ویژگی کاربرد
GDDR5 نسل قدیمی کارت‌های قدیمی
GDDR6 پهنای باند بالا اکثر GPUهای امروزی
GDDR6X نرخ انتقال بسیار بالا کارت‌های پرچمدار
HBM پهنای باند بسیار زیاد HPC و AI

گلوگاه‌های ناشی از پهنای باند کم

اثر کمبود Memory Bandwidth
وضعیت نتیجه
4K و 8K کاهش سرعت افکت‌ها
AI Processing انتظار Tensor Core برای داده
Color Grading افت FPS Preview
Temporal Effects افزایش زمان پردازش
Multicam Stutter و Lag
Fusion / VFX کند شدن Rendering

ظرفیت حافظه یا پهنای باند؟

تفاوت دو مفهوم مهم حافظه
ویژگی ظرفیت پهنای باند
واحد GB GB/s
بیانگر حجم داده سرعت انتقال
کمبود Out of Memory Memory Bottleneck
اثر روی پروژه اندازه پروژه سرعت پردازش

معماری Memory Controller و Memory Bus

داشتن VRAM سریع به‌تنهایی کافی نیست. GPU باید
بتواند داده‌ها را به‌درستی میان هسته‌های
پردازشی و تراشه‌های حافظه هدایت کند. این وظیفه
بر عهده Memory Controller و Memory Bus است.
این دو بخش تعیین می‌کنند داده‌ها با چه سرعت،
چه ترتیبی و از چه مسیری میان GPU و VRAM جابه‌جا
شوند.

Memory Controller چیست؟

Memory Controller واحدی در داخل GPU است که
تمام عملیات خواندن و نوشتن حافظه را مدیریت
می‌کند.

این بخش درخواست‌های Shader، Compute، Video
Engine، Display Engine و سایر واحدها را
دریافت کرده و آن‌ها را به دستورات قابل اجرا
برای تراشه‌های حافظه تبدیل می‌کند.

مسیر انتقال داده

وظایف اصلی Memory Controller

مسئولیت‌های Memory Controller
وظیفه توضیح
Memory Scheduling زمان‌بندی درخواست‌ها
Read / Write Control کنترل عملیات خواندن و نوشتن
Address Translation تبدیل آدرس حافظه
Channel Distribution تقسیم بار میان کانال‌ها
Error Handling مدیریت خطاهای حافظه
Priority Control اولویت‌بندی درخواست‌ها

Memory Channel چیست؟

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

افزایش تعداد کانال‌ها باعث افزایش پهنای باند
کل سیستم حافظه می‌شود.

Bus Width چگونه تشکیل می‌شود؟

هر کانال حافظه معمولاً عرض ثابتی دارد. مجموع
عرض تمام کانال‌ها Bus Width نهایی GPU را
تشکیل می‌دهد.

نمونه تشکیل Bus Width
تعداد کانال عرض هر کانال Bus Width
4 32-bit 128-bit
6 32-bit 192-bit
8 32-bit 256-bit
10 32-bit 320-bit
12 32-bit 384-bit

جریان درخواست‌های حافظه

درخواست هم‌زمان چند واحد

در یک GPU مدرن تنها Shaderها از حافظه استفاده
نمی‌کنند.

Decode Engine، Encode Engine، Display Engine،
AI Accelerator و Copy Engine نیز هم‌زمان
درخواست خواندن یا نوشتن حافظه ارسال می‌کنند.

نمونه درخواست‌های هم‌زمان
واحد نوع درخواست
Shader Texture Read
Compute Random Access
Decode Frame Buffer Write
Encode Surface Read
Display Scanout Read
Copy Engine Buffer Copy

زمان‌بندی دسترسی به حافظه

اگر همه واحدها هم‌زمان بخواهند به یک بخش از
حافظه دسترسی داشته باشند، Memory Controller
باید درخواست‌ها را زمان‌بندی کند.

هدف این زمان‌بندی کاهش انتظار، افزایش Throughput
و جلوگیری از بلااستفاده ماندن واحدهای پردازشی
است.

Memory Contention چیست؟

وقتی چند واحد سخت‌افزاری هم‌زمان به یک مسیر
حافظه نیاز داشته باشند، رقابت برای دسترسی
ایجاد می‌شود.

این وضعیت Memory Contention نام دارد و می‌تواند
باعث افزایش Latency و کاهش کارایی شود.

چرا دو کارت با VRAM یکسان عملکرد متفاوتی دارند؟

ظرفیت حافظه تنها یکی از ویژگی‌های سیستم حافظه
است.

عوامل ایجاد تفاوت عملکرد
عامل اثر
Bus Width تفاوت پهنای باند
Memory Clock سرعت انتقال
نوع حافظه GDDR6 یا GDDR6X
Controller Design کارایی زمان‌بندی
Cache کاهش نیاز به VRAM
Compression کاهش انتقال واقعی

سلسله‌مراتب Cache در GPU

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

Cache در GPU چیست؟

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

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

مسیر دسترسی داده از هسته تا VRAM

نام و ترتیب دقیق Cacheها در معماری‌های مختلف
یکسان نیست، اما هدف کلی آن‌ها کاهش دسترسی
مستقیم به VRAM است.

سطوح اصلی Cache در GPU

نمای کلی سلسله‌مراتب Cache
سطح محل تقریبی سرعت ظرفیت
Register داخل واحد پردازشی بسیار زیاد بسیار کم
L0 بسیار نزدیک به هسته بسیار زیاد کم
L1 داخل یا نزدیک هر Cluster زیاد کم تا متوسط
L2 مشترک میان بخش‌های بزرگ GPU کمتر از L1 بیشتر
Last-Level Cache نزدیک Memory Controller بیشتر از VRAM وابسته به معماری
VRAM حافظه خارجی GPU کمتر از Cache بسیار بیشتر

Register File

Registerها نزدیک‌ترین فضای ذخیره‌سازی به
واحدهای محاسباتی هستند و داده‌های فعال هر
Thread یا Wave را نگهداری می‌کنند.

متغیرهای موقت، مختصات پیکسل، ضرایب محاسباتی
و نتایج میانی Shader ممکن است داخل Register
باقی بمانند.

اگر مصرف Register یک Kernel بیش‌ازحد بالا
باشد، تعداد Threadهای قابل اجرای هم‌زمان کاهش
می‌یابد و Occupancy افت می‌کند.

ویژگی‌های Register File
ویژگی نتیجه
Latency بسیار کم دسترسی سریع واحد محاسباتی
ظرفیت محدود محدودیت تعداد داده فعال
اختصاص به Thread نگهداری متغیرهای محلی
مصرف زیاد کاهش Occupancy

L0 Cache

در بعضی معماری‌ها، سطحی بسیار کوچک و نزدیک
به واحدهای اجرایی با عنوان L0 Cache وجود
دارد.

این Cache ممکن است برای Instruction، داده،
Texture یا عملیات خاص داخلی استفاده شود.

وجود و نام L0 در همه GPUها یکسان نیست و باید
بر اساس معماری دقیق بررسی شود.

L1 Cache

L1 Cache معمولاً نزدیک مجموعه‌ای از Shader
Coreها یا Compute Unitها قرار دارد و داده‌های
موردنیاز آن مجموعه را نگهداری می‌کند.

در بعضی معماری‌ها، بخشی از L1 با Shared
Memory یا Local Data Store ارتباط نزدیک دارد
یا منابع آن‌ها به‌صورت مشترک مدیریت می‌شود.

کاربردهای رایج L1 Cache
داده کاربرد
Pixel Data فیلترهای تصویری و Shader
Texture Samples Sampling و Scaling
Intermediate Results نتایج محاسبات میانی
Neighboring Data Blur، Sharpen و Denoise

L2 Cache

L2 Cache معمولاً میان بخش‌های بزرگ GPU مشترک
است و آخرین سطح Cache پیش از Memory Controller
محسوب می‌شود.

Shaderها، Compute Unitها، Copy Engine و برخی
واحدهای دیگر ممکن است از طریق L2 به داده‌های
مشترک دسترسی پیدا کنند.

افزایش ظرفیت L2 می‌تواند تعداد مراجعه‌های
مستقیم به VRAM را کاهش دهد و پهنای باند مؤثر
سیستم حافظه را بهتر کند.

Cache Hit و Cache Miss

اگر داده موردنیاز داخل Cache پیدا شود،
Cache Hit رخ می‌دهد.

اگر داده در Cache وجود نداشته باشد، GPU باید
آن را از سطح پایین‌تر یا VRAM دریافت کند که
به آن Cache Miss گفته می‌شود.

تفاوت Cache Hit و Cache Miss
وضعیت منبع داده نتیجه
Cache Hit Cache داخلی Latency کمتر و مصرف پهنای باند پایین‌تر
Cache Miss Cache پایین‌تر یا VRAM انتظار بیشتر و ترافیک حافظه بالاتر

Locality در پردازش ویدئو

عملکرد Cache به الگوی دسترسی داده وابسته است.
اگر Shader چند بار به داده‌های نزدیک یا مشابه
مراجعه کند، احتمال Cache Hit افزایش می‌یابد.

Spatial Locality به استفاده از داده‌های نزدیک
به یکدیگر و Temporal Locality به استفاده دوباره
از یک داده در فاصله زمانی کوتاه اشاره دارد.

انواع Locality در پردازش تصویر
نوع مثال ویدئویی اثر
Spatial Locality خواندن پیکسل‌های مجاور در Blur استفاده بهتر از Cache Line
Temporal Locality استفاده مجدد از LUT یا Texture افزایش Cache Hit
Poor Locality دسترسی پراکنده به Frame بزرگ افزایش Cache Miss

Texture Cache

Texture Cache برای الگوهای دسترسی مربوط به
Sampling تصویر و Texture بهینه شده است.

Scaling، Rotation، Warp، LUT و بسیاری از
افکت‌های تصویری از Texture Sampling استفاده
می‌کنند.

Texture Cache می‌تواند داده‌های پیکسل نزدیک
را نگهداری کند تا عملیات Interpolation با
دسترسی کمتر به VRAM انجام شود.

کاربردهای Texture Cache در ویدئو
عملیات نوع دسترسی
Bilinear Scaling خواندن چند پیکسل مجاور
Bicubic Scaling Sampling گسترده‌تر همسایگی
LUT مراجعه مکرر به جدول رنگ
Warp و Stabilization Sampling مختصات غیرخطی
Chroma Upsampling بازسازی مؤلفه‌های رنگ

Constant Cache

Constant Cache برای داده‌های کوچک و ثابتی
مناسب است که تعداد زیادی Thread به مقدار
یکسان آن‌ها نیاز دارند.

ضرایب Color Matrix، پارامترهای افکت، مقدار
Gamma یا تنظیمات Kernel می‌توانند در چنین
حافظه‌ای نگهداری شوند.

Shared Memory و Local Data Store

Shared Memory در CUDA یا Local Data Store در
برخی معماری‌ها، حافظه‌ای سریع و قابل مدیریت
توسط برنامه است که میان Threadهای یک گروه
مشترک می‌شود.

Shader می‌تواند بخشی از Frame را داخل این
حافظه بارگذاری کند و چندین عملیات را بدون
مراجعه دوباره به VRAM انجام دهد.

اثر Cache بر Filterهای ویدئویی

رابطه نوع Filter با الگوی استفاده از Cache
Filter الگوی دسترسی اهمیت Cache
Blur پیکسل‌های مجاور بسیار زیاد
Sharpen Kernel همسایگی زیاد
Color LUT جدول کوچک و پرتکرار زیاد
Temporal Denoise چند Frame بزرگ محدودتر به دلیل حجم داده
AI Upscaling وزن مدل و Tensor بسیار مهم
Random Particle Effect دسترسی پراکنده Cache Hit کمتر

AMD Infinity Cache

Infinity Cache نام تجاری AMD برای یک Cache
بزرگ در سطح بالای سلسله‌مراتب حافظه برخی
GPUهای Radeon است.

هدف این Cache کاهش تعداد دسترسی‌های مستقیم
به VRAM و افزایش پهنای باند مؤثر است.

میزان اثرگذاری آن به ظرفیت Cache، Resolution،
نوع بار پردازشی و الگوی دسترسی داده بستگی دارد.

افزایش ظرفیت L2 در GPUهای جدید

برخی معماری‌های جدید ظرفیت L2 Cache را به شکل
محسوسی افزایش داده‌اند.

L2 بزرگ‌تر می‌تواند در بعضی بارهای کاری تعداد
مراجعه به VRAM را کاهش دهد، اما نتیجه نهایی
به نوع داده و میزان Locality وابسته است.

مزایا و محدودیت‌های L2 بزرگ‌تر
اثر نتیجه احتمالی
Cache Hit بیشتر کاهش دسترسی به VRAM
ترافیک کمتر حافظه آزادشدن پهنای باند برای واحدهای دیگر
Latency پایین‌تر تحویل سریع‌تر داده‌های تکراری
Dataset بزرگ‌تر از Cache ادامه وابستگی به VRAM
دسترسی پراکنده سود محدودتر از Cache

Cacheهای داخلی Video Engine

موتورهای Decode و Encode ممکن است Bufferها،
SRAMها یا Cacheهای داخلی مخصوص خود داشته
باشند.

این فضاها برای نگهداری داده‌های موقت Codec،
Reference Data، Context و نتایج میانی استفاده
می‌شوند.

جزئیات این Cacheها معمولاً به‌صورت کامل در
مشخصات عمومی GPU منتشر نمی‌شود و میان نسل‌ها
تفاوت دارد.

داده‌های احتمالی داخل حافظه محلی Video Engine
داده کاربرد
Codec Context نگهداری وضعیت Decoder یا Encoder
Motion Data پردازش بردارهای حرکت
Transform Data نتایج میانی Transform و Quantization
Bitstream Buffer نگهداری موقت داده فشرده
Reference Metadata مدیریت Frameهای مرجع

Cache Coherency

وقتی چند واحد GPU یا CPU و GPU به یک Buffer
مشترک دسترسی دارند، باید اطمینان حاصل شود که
همه واحدها جدیدترین نسخه داده را مشاهده
می‌کنند.

این هماهنگی Cache Coherency نام دارد و ممکن
است با Barrier، Fence، Flush، Invalidate یا
سازوکارهای سخت‌افزاری انجام شود.

همگام‌سازی بیش‌ازحد می‌تواند عملکرد را کاهش
دهد و همگام‌سازی ناکافی ممکن است داده اشتباه
یا Frame ناقص تولید کند.

Flush و Invalidate

عملیات مدیریت Cache
عملیات وظیفه
Flush نوشتن داده تغییرکرده Cache در سطح پایین‌تر
Invalidate بی‌اعتبارکردن نسخه قدیمی داده در Cache
Barrier کنترل ترتیب مشاهده عملیات حافظه
Fence اعلام تکمیل عملیات یک Queue یا Engine

مقایسه Cache و VRAM

تفاوت Cache داخلی و حافظه گرافیکی
معیار Cache VRAM
ظرفیت کم زیاد
سرعت بسیار زیاد کمتر
Latency پایین بالاتر
وظیفه نگهداری موقت داده پرتکرار نگهداری اصلی Frame و Asset
مدیریت بیشتر توسط سخت‌افزار یا Kernel توسط درایور و نرم‌افزار
جایگزینی یکدیگر نمی‌تواند جای VRAM را بگیرد نمی‌تواند سرعت Cache را فراهم کند

گلوگاه‌های مرتبط با Cache

مشکلات رایج در سلسله‌مراتب Cache
مشکل نشانه پیامد
Cache Miss زیاد افزایش ترافیک VRAM افت عملکرد
Dataset بزرگ خارج‌شدن مکرر داده از Cache کاهش بهره‌وری Cache
دسترسی پراکنده Locality ضعیف استفاده ناکامل از Cache Line
Synchronization زیاد Flush و Barrier مکرر توقف Pipeline
Register Pressure Spill به حافظه پایین‌تر افزایش Latency
Cache Thrashing جایگزینی سریع و مداوم داده‌ها Cache Hit پایین

بهینه‌سازی استفاده از Cache

روش‌های افزایش بهره‌وری Cache در پردازش ویدئو
روش نتیجه
Tile-Based Processing پردازش بخش کوچک‌تر Frame داخل Cache
Coalesced Access ترکیب دسترسی Threadهای مجاور
استفاده از Shared Memory کاهش خواندن تکراری از VRAM
کاهش Passهای غیرضروری کاهش خواندن و نوشتن Frame
ادغام Filterها اجرای چند عملیات در یک Kernel
Buffer Reuse کاهش Allocation و جابه‌جایی داده
حفظ Zero-Copy جلوگیری از خروج Frame از حافظه GPU

PCI Express و انتقال داده میان CPU و GPU

در کارت‌های گرافیک مجزا، RAM سیستم و VRAM دو
فضای حافظه مستقل هستند. داده‌های ویدئویی،
Textureها، Frame Bufferها و نتایج پردازش باید
در صورت نیاز از طریق PCI Express میان این دو
فضا جابه‌جا شوند. اگر این انتقال‌ها به‌درستی
مدیریت نشوند، حتی یک GPU قدرتمند نیز ممکن است
به دلیل انتظار برای داده، عملکرد ضعیفی داشته
باشد.

PCI Express چیست؟

PCI Express یا PCIe رابط ارتباطی پرسرعت میان
CPU، چیپ‌ست، کارت گرافیک، کارت Capture،
تجهیزات ذخیره‌سازی و سایر قطعات توسعه است.

در یک سیستم دارای GPU مجزا، بسیاری از داده‌ها
از RAM سیستم از طریق PCIe به VRAM منتقل
می‌شوند و در صورت نیاز، نتایج نیز از GPU به
حافظه سیستم بازگردانده می‌شوند.

مدل حافظه در GPU مجزا

در کارت گرافیک مجزا، CPU معمولاً به RAM سیستم
دسترسی مستقیم دارد و GPU نیز داده‌های فعال خود
را در VRAM نگهداری می‌کند.

هر زمان داده‌ای در محل مناسب قرار نداشته باشد،
باید میان این دو حافظه منتقل شود.

Upload و Download داده در GPU

انتقال داده از RAM سیستم به VRAM معمولاً
Upload و انتقال از VRAM به RAM معمولاً
Download یا Readback نامیده می‌شود.

مسیرهای اصلی انتقال میان CPU و GPU
عملیات مسیر نمونه کاربرد
Upload RAM به VRAM ارسال Frame، Texture یا Model
Download VRAM به RAM ذخیره خروجی یا پردازش CPU
GPU-to-GPU Copy VRAM به VRAM انتقال میان Bufferها یا GPUها
Device Readback GPU به CPU Screenshot، Analysis یا Export

Lane در PCI Express چیست؟

هر اتصال PCIe از یک یا چند Lane تشکیل می‌شود.
هر Lane یک مسیر ارسال و یک مسیر دریافت مستقل
دارد.

کارت‌های گرافیک معمولاً از اتصال‌هایی مانند
x16، x8 یا در بعضی مدل‌ها x4 استفاده می‌کنند.

تعداد Laneهای رایج PCIe
اتصال تعداد Lane کاربرد رایج
PCIe x1 1 کارت‌های جانبی سبک
PCIe x4 4 SSD و بعضی GPUهای اقتصادی
PCIe x8 8 GPU، Capture و Accelerator
PCIe x16 16 کارت گرافیک اصلی

نسل‌های PCI Express

در هر نسل PCIe، نرخ انتقال هر Lane افزایش
پیدا می‌کند. بنابراین یک اتصال x8 نسل جدید
ممکن است پهنای باندی مشابه یا بیشتر از x16
یک نسل قدیمی داشته باشد.

روند کلی افزایش سرعت PCI Express
نسل وضعیت نسبی پهنای باند کاربرد رایج
PCIe 3.0 مبنای سیستم‌های قدیمی‌تر GPU و SSD نسل قبل
PCIe 4.0 تقریباً دو برابر نسل قبل سیستم‌های مدرن
PCIe 5.0 تقریباً دو برابر PCIe 4.0 Workstation و Storage سریع
PCIe 6.0 و جدیدتر پهنای باند بسیار بالاتر Server، AI و زیرساخت حرفه‌ای

تفاوت پهنای باند PCIe و VRAM

پهنای باند داخلی میان GPU و VRAM معمولاً بسیار
بیشتر از پهنای باند PCIe است.

به همین دلیل نرم‌افزارها تلاش می‌کنند Frameها
و داده‌های فعال را تا حد امکان داخل VRAM
نگهداری کنند.

مقایسه کاربرد PCIe و Memory Bus
مسیر وظیفه سرعت نسبی
PCI Express ارتباط CPU، RAM و GPU کمتر
Memory Bus ارتباط GPU با VRAM بسیار بیشتر
Cache Fabric ارتباط داخلی Cacheها و Coreها بسیار سریع

DMA چیست؟

DMA مخفف
Direct Memory Access
است و به یک دستگاه اجازه می‌دهد بدون دخالت
مستقیم CPU در انتقال تک‌تک داده‌ها، اطلاعات
را میان حافظه‌ها جابه‌جا کند.

GPU و کارت‌های Capture می‌توانند با استفاده
از DMA داده را به Bufferهای حافظه منتقل کنند
و CPU تنها عملیات را تنظیم و کنترل کند.

نقش Copy Engine در انتقال داده

Copy Engine واحدی در GPU است که عملیات انتقال
Buffer را مستقل از Shader Coreها انجام می‌دهد.

این واحد می‌تواند هم‌زمان با Compute، Decode
یا Encode فعالیت کند؛ البته همه این عملیات
همچنان برای دسترسی به حافظه و PCIe رقابت
می‌کنند.

وظایف متداول Copy Engine
عملیات مسیر
Host-to-Device RAM به VRAM
Device-to-Host VRAM به RAM
Device-to-Device VRAM به VRAM
Peer-to-Peer GPU به GPU

Pinned Memory چیست؟

Pinned یا Page-Locked Memory بخشی از RAM است
که سیستم‌عامل آن را هنگام عملیات جابه‌جا
نمی‌کند.

این ویژگی به DMA و GPU اجازه می‌دهد انتقال
داده را با مسیر پایدارتر و معمولاً سریع‌تر
انجام دهند.

استفاده بیش‌ازحد از Pinned Memory می‌تواند
حافظه در دسترس سیستم‌عامل و برنامه‌های دیگر
را کاهش دهد.

تفاوت حافظه معمولی و Pinned
معیار Pageable Memory Pinned Memory
جابه‌جایی توسط سیستم‌عامل امکان‌پذیر محدود یا غیرفعال
مناسب DMA نیازمند مرحله اضافی احتمالی مناسب‌تر
سرعت انتقال GPU معمولاً کمتر معمولاً بیشتر
هزینه تخصیص کمتر بیشتر

Staging Buffer چیست؟

گاهی داده نمی‌تواند مستقیماً از حافظه برنامه
به VRAM منتقل شود و ابتدا در یک Buffer میانی
قرار می‌گیرد.

این Buffer میانی Staging Buffer نام دارد و
برای تطبیق فرمت حافظه، Alignment یا نوع دسترسی
استفاده می‌شود.

وجود Staging Buffer ممکن است یک کپی اضافی
ایجاد کند، اما در بسیاری از APIها برای انتقال
ایمن و سازگار ضروری است.

انتقال Synchronous

در انتقال Synchronous، برنامه تا پایان عملیات
کپی منتظر می‌ماند.

این روش ساده است، اما می‌تواند CPU یا GPU را
بدون انجام کار مفید متوقف نگه دارد.

انتقال Asynchronous

در انتقال Asynchronous، Copy Engine داده را
جابه‌جا می‌کند و CPU یا سایر موتورهای GPU
می‌توانند هم‌زمان کار دیگری انجام دهند.

این روش برای Pipelineهای Real-Time و چند
Stream بسیار مهم است.

Double Buffering و Pipeline انتقال

با استفاده از چند Buffer می‌توان هم‌زمان یک
Frame را منتقل، Frame قبلی را پردازش و Frame
بعدی را آماده کرد.

این روش باعث کاهش زمان انتظار میان مراحل
Pipeline می‌شود.

نقش Bufferهای موازی در Pipeline
Buffer وضعیت
Buffer A در حال پردازش توسط GPU
Buffer B در حال انتقال به GPU
Buffer C در حال آماده‌سازی توسط CPU

Zero-Copy چیست؟

Zero-Copy به معماری‌ای گفته می‌شود که در آن
داده بدون ایجاد نسخه‌های غیرضروری میان مراحل
مختلف Pipeline استفاده می‌شود.

Zero-Copy الزاماً به معنی نبود کامل هیچ انتقال
فیزیکی نیست؛ بلکه هدف آن حذف Copyهای اضافی و
نگهداری داده در مناسب‌ترین حافظه است.

Zero-Copy در پردازش ویدئو

در یک Pipeline بهینه، Decoder فریم را مستقیماً
در سطحی از حافظه GPU تولید می‌کند که Shader،
Compute و Encoder بتوانند همان Buffer را
استفاده کنند.

Pipeline دارای Copyهای غیرضروری

اگر Decode روی CPU، افکت روی GPU و Encode
دوباره روی CPU انجام شود، Frame ممکن است
چند بار میان RAM و VRAM جابه‌جا شود.

این مسیر Latency، مصرف حافظه و ترافیک PCIe
بیشتری ایجاد می‌کند.

Interop میان APIها

مراحل مختلف Pipeline ممکن است از APIهای
متفاوت مانند CUDA، OpenCL، Vulkan، Direct3D،
OpenGL، VA-API یا VideoToolbox استفاده کنند.

Interop اجازه می‌دهد یک Buffer یا Surface
بدون کپی کامل میان این APIها به اشتراک گذاشته
شود.

نمونه کاربرد Interoperability
مرحله اول مرحله دوم هدف
Hardware Decode CUDA Processing استفاده مستقیم از Decode Surface
Vulkan Render Video Encode Encode مستقیم Frame رندرشده
Direct3D Capture NVENC یا QSV ضبط صفحه با Copy کمتر
Camera Surface AI Processing پردازش زنده با Latency پایین

انتقال مستقیم دستگاه به GPU

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

نام و قابلیت دقیق این فناوری میان سازندگان و
سیستم‌عامل‌ها متفاوت است، اما هدف مشترک کاهش
Copy، Latency و مصرف CPU است.

Resizable BAR چیست؟

در بعضی معماری‌های قدیمی، CPU تنها می‌توانست
بخش کوچکی از VRAM را در هر لحظه در فضای آدرس
خود مشاهده کند.

Resizable BAR اجازه می‌دهد CPU ناحیه بزرگ‌تری
از VRAM را آدرس‌دهی کند.

اثر این قابلیت بر پردازش ویدئو به نرم‌افزار،
الگوی انتقال داده و معماری سیستم وابسته است و
لزوماً در همه Workflowها افزایش عملکرد قابل
توجهی ایجاد نمی‌کند.

IOMMU و آدرس‌دهی دستگاه‌ها

IOMMU واحدی برای ترجمه و محافظت از آدرس‌های
حافظه مورد استفاده دستگاه‌های I/O است.

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

IOMMU در مجازی‌سازی، امنیت، Passthrough و
مدیریت حافظه میان چند دستگاه اهمیت دارد.

انتقال داده در GPU مجتمع

در GPU مجتمع، CPU و GPU معمولاً از RAM فیزیکی
مشترک استفاده می‌کنند.

این طراحی می‌تواند نیاز به انتقال جداگانه از
RAM به VRAM را کاهش دهد، اما همچنان ممکن است
تبدیل Layout، Synchronization یا Copy داخلی
میان Bufferها لازم باشد.

مقایسه مدل حافظه GPU مجزا و مجتمع
معیار GPU مجزا GPU مجتمع
حافظه اصلی GPU VRAM مستقل RAM مشترک
انتقال CPU به GPU معمولاً از طریق PCIe ممکن است بدون انتقال فیزیکی مجزا
پهنای باند معمولاً بالاتر در VRAM مشترک با CPU
ظرفیت حافظه محدود به VRAM کارت وابسته به RAM سیستم
رقابت حافظه کمتر با CPU بیشتر میان CPU و GPU

Latency انتقال داده

پهنای باند تنها معیار عملکرد انتقال نیست.
شروع هر عملیات Copy نیز هزینه زمانی دارد.

انتقال تعداد زیادی Buffer کوچک ممکن است حتی
با حجم کل پایین، به دلیل Overhead و
Synchronization کندتر از انتقال یک Buffer بزرگ
باشد.

عوامل مؤثر بر Latency انتقال
عامل اثر
اندازه Buffer Buffer کوچک‌تر معمولاً سربار نسبی بیشتری دارد
تعداد Transfer افزایش Command و Synchronization
نوع حافظه میزبان Pinned یا Pageable بودن
وضعیت PCIe نسل، Lane و اشتراک مسیر
Queue Synchronization انتظار میان Copy و Compute
NUMA Placement فاصله CPU و دستگاه در Workstation و Server

رقابت برای پهنای باند PCIe

ممکن است چند دستگاه یا چند موتور هم‌زمان از
مسیر PCIe استفاده کنند.

کارت Capture، SSD، GPU دوم و تجهیزات شبکه
می‌توانند برای Laneها یا مسیرهای مشترک چیپ‌ست
رقابت ایجاد کنند.

نشانه‌های گلوگاه انتقال CPU و GPU

علائم رایج محدودیت PCIe و Copy
نشانه علت احتمالی
GPU Utilization پایین انتظار GPU برای Frame ورودی
Copy Engine Utilization بالا انتقال مکرر RAM و VRAM
Preview ناپایدار Readback یا Upload بیش‌ازحد
کندی با فعال‌شدن CPU Filter خروج Frame از VRAM و بازگشت دوباره
Shared Memory زیاد کمبود VRAM و Paging
افت عملکرد در سیستم چند GPU انتقال Peer-to-Peer یا مسیر نامناسب
Latency بالای استریم کپی‌های متوالی میان مراحل

روش‌های بهینه‌سازی انتقال داده

راهکارهای کاهش هزینه انتقال CPU و GPU
روش نتیجه
Zero-Copy Pipeline حذف Copyهای میانی غیرضروری
Hardware Decode و Encode باقی‌ماندن Frame در GPU
API Interop اشتراک Surface میان مراحل
Asynchronous Copy هم‌پوشانی انتقال و پردازش
Pinned Memory افزایش کارایی DMA
Batch Transfer کاهش سربار Bufferهای کوچک
Buffer Reuse کاهش Allocation و Copy
نگهداری افکت‌ها روی یک Device جلوگیری از رفت‌وبرگشت CPU و GPU
بررسی Lane و نسل PCIe جلوگیری از لینک محدودشده

Pipeline پردازش در GPU

GPU مجموعه‌ای از واحدهای مستقل نیست که هرکدام
جداگانه کار کنند؛ بلکه بیشتر شبیه یک خط تولید
بزرگ است که داده در آن مرحله‌به‌مرحله حرکت
می‌کند. این زنجیره پردازش را Pipeline می‌نامند.

Pipeline چیست؟

Pipeline مجموعه‌ای از مراحل متوالی است که
هر مرحله وظیفه مشخصی را روی داده انجام می‌دهد.

در حالی که یک مرحله روی Frame فعلی کار می‌کند،
مرحله دیگر ممکن است هم‌زمان Frame بعدی را
پردازش کند.

نمای کلی Pipeline

مراحل اصلی Pipeline

مراحل رایج پردازش یک Frame
مرحله وظیفه خروجی
Decode تبدیل Bitstream به Frame Surface
Color Convert تبدیل فضای رنگ RGB / YUV
Compute اجرای افکت‌ها Frame جدید
AI Denoise، Upscale و… Frame بهبود یافته
Encode فشرده‌سازی خروجی Bitstream

اجرای هم‌زمان مراحل Pipeline

در GPU مدرن، مراحل مختلف می‌توانند به‌صورت
هم‌زمان روی Frameهای متفاوت اجرا شوند.

همگام‌سازی (Synchronization) در GPU

GPU ده‌ها یا حتی صدها واحد پردازشی دارد که
هم‌زمان روی داده‌های مختلف کار می‌کنند. برای
جلوگیری از خواندن داده ناقص، نوشتن هم‌زمان روی
یک Buffer یا اجرای نادرست مراحل Pipeline،
لازم است ترتیب اجرای عملیات کنترل شود. این
وظیفه را مکانیزم‌های Synchronization بر عهده
دارند.

Synchronization چیست؟

Synchronization مجموعه‌ای از مکانیزم‌ها برای
هماهنگ‌کردن ترتیب اجرای عملیات میان CPU،
موتورهای مختلف GPU و Threadهای پردازشی است.

هدف اصلی آن جلوگیری از استفاده از داده‌ای است
که هنوز تولید نشده یا هنوز در حافظه نوشته
نشده است.

چرا Synchronization لازم است؟

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

انواع همگام‌سازی

انواع Synchronization
نوع هدف مثال
CPU ↔ GPU هماهنگی پردازنده و GPU پایان Render
GPU ↔ GPU هماهنگی Engineها Decode → Compute
Thread هماهنگی Threadها Shared Memory
Memory ترتیب مشاهده داده Barrier

Fence

Fence شیئی برای اطلاع از پایان یک عملیات
پردازشی است.

CPU یا Queue دیگر می‌تواند منتظر بماند تا Fence
سیگنال پایان عملیات را دریافت کند.

Barrier

Barrier ترتیب دسترسی به حافظه را کنترل می‌کند.

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

کاربردهای Barrier
وضعیت نقش Barrier
Compute → Compute تکمیل نوشتن Buffer
Compute → Encode آماده بودن Frame
Copy → Shader پایان انتقال داده
Render → Display جلوگیری از نمایش Frame ناقص

Semaphore

Semaphore برای هماهنگی میان Queueها یا Engineهای
مختلف GPU استفاده می‌شود.

یک Queue می‌تواند تا زمان دریافت سیگنال از
Queue دیگر منتظر بماند.

Event

Event روشی برای ثبت وقوع یک عملیات است و
معمولاً جهت زمان‌سنجی، همگام‌سازی سبک یا
پروفایلینگ استفاده می‌شود.

بسیاری از APIها امکان اندازه‌گیری زمان اجرای
Kernelها را با استفاده از Event فراهم می‌کنند.

Memory Barrier

Memory Barrier تضمین می‌کند که تمام عملیات
خواندن و نوشتن حافظه پیش از ادامه اجرای
دستورهای بعدی کامل شده باشند.

این موضوع هنگام استفاده از Cache، Shared
Memory و Bufferهای مشترک اهمیت زیادی دارد.

Thread Barrier

در بسیاری از Shaderها، تمام Threadهای یک Work
Group باید قبل از ادامه اجرا به یک نقطه مشخص
برسند.

Thread Barrier این هماهنگی را برقرار می‌کند و
از استفاده زودهنگام از داده‌های Shared Memory
جلوگیری می‌کند.

Deadlock

اگر دو Queue یا دو Thread منتظر پایان کار
یکدیگر بمانند، هیچ‌کدام ادامه پیدا نمی‌کنند.

این وضعیت Deadlock نام دارد و یکی از مشکلات
مهم طراحی Pipelineهای موازی است.

هزینه Synchronization

همگام‌سازی برای صحت اجرای برنامه ضروری است،
اما استفاده بیش‌ازحد از آن می‌تواند باعث
توقف Pipeline و کاهش کارایی شود.

اثر Synchronization بیش‌ازحد
علت نتیجه
Barrier زیاد توقف Kernelها
Fence مکرر انتظار CPU
Semaphore اضافی کاهش موازی‌سازی
Readback مداوم افزایش Latency

Command Buffer و Command Queue در GPU

GPU هیچ‌گاه مستقیماً کد برنامه را اجرا نمی‌کند.
نرم‌افزار ابتدا دستورات را به مجموعه‌ای از
فرمان‌ها تبدیل می‌کند. این فرمان‌ها داخل
Command Buffer ذخیره شده و سپس از طریق
Command Queue به GPU ارسال می‌شوند تا توسط
Scheduler اجرا شوند.

چرا Command Buffer وجود دارد؟

اگر CPU برای هر دستور مستقیماً با GPU ارتباط
برقرار کند، سربار بسیار زیادی ایجاد می‌شود.

به همین دلیل، تعداد زیادی دستور ابتدا در یک
Buffer جمع‌آوری شده و سپس به صورت یکجا به GPU
ارسال می‌شوند.

مسیر حرکت دستورات

Command Buffer چیست؟

Command Buffer مجموعه‌ای از فرمان‌هایی است
که CPU یا Driver برای GPU آماده می‌کند.

این فرمان‌ها می‌توانند شامل اجرای Shader،
انتقال Buffer، Decode، Encode، رسم تصویر،
تغییر وضعیت Pipeline یا عملیات دیگر باشند.

نمونه فرمان‌های داخل Command Buffer
فرمان وظیفه
Copy Buffer انتقال داده
Dispatch Compute اجرای Compute Shader
Draw اجرای Render
Decode اجرای Video Decoder
Encode اجرای Video Encoder
Pipeline Barrier همگام‌سازی

Command Queue چیست؟

Command Queue صفی است که Command Bufferهای
آماده اجرا در آن قرار می‌گیرند.

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

تفاوت Command Buffer و Command Queue

مقایسه Buffer و Queue
ویژگی Command Buffer Command Queue
وظیفه نگهداری فرمان‌ها صف اجرای فرمان‌ها
ایجاد توسط CPU یا Driver Driver یا Runtime
قابلیت اجرا خیر بله
ترتیب مجموعه دستور ترتیب اجرای Bufferها

چند Command Queue

بسیاری از GPUهای مدرن چند Queue مستقل دارند
تا عملیات مختلف بتوانند به‌صورت هم‌زمان اجرا
شوند.

انواع Queue

Queueهای متداول GPU
Queue کاربرد
Graphics Render
Compute Compute Shader
Copy انتقال Buffer
Video Decode Decode Engine
Video Encode Encode Engine

Recording Command Buffer

برنامه ابتدا Command Buffer را ضبط یا Record
می‌کند.

در این مرحله هیچ پردازشی انجام نمی‌شود و فقط
فهرست دستورات آماده می‌شود.

Submit چیست؟

پس از آماده شدن Command Buffer، برنامه آن را
به Queue ارسال می‌کند. این عملیات Submit
نام دارد.

Submit به معنی اجرای فوری نیست؛ بلکه Buffer
وارد صف انتظار می‌شود.

ترتیب اجرای فرمان‌ها

Scheduler معمولاً ترتیب داخل هر Command Buffer
را حفظ می‌کند، اما ممکن است اجرای Queueهای
مختلف را بر اساس منابع موجود مدیریت کند.

وابستگی میان فرمان‌ها

بعضی فرمان‌ها تنها پس از پایان فرمان قبلی
قابل اجرا هستند.

Queue خالی

اگر Queue هیچ فرمانی نداشته باشد، بخشی از GPU
بیکار خواهد ماند.

طراحی مناسب Pipeline تلاش می‌کند Queueها تا
حد امکان پر باقی بمانند تا استفاده از GPU
افزایش یابد.

چرخه عمر Command Buffer

مزایای Command Buffer

مزایای استفاده از Command Buffer
مزیت نتیجه
کاهش سربار CPU ارسال گروهی فرمان‌ها
موازی‌سازی بهتر آماده‌سازی هم‌زمان فرمان‌ها
مدیریت وابستگی‌ها اجرای صحیح Pipeline
استفاده بهتر از GPU کاهش زمان بیکاری Queueها

GPU Scheduler و Hardware Queue

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

GPU Scheduler چیست؟

GPU Scheduler بخشی از معماری سخت‌افزار و
درایور است که اجرای Workloadهای مختلف را
زمان‌بندی می‌کند.

Scheduler مشخص می‌کند کدام Command، Kernel،
Draw Call، عملیات Copy، Decode یا Encode
در چه زمانی برای اجرا به Engine مناسب ارسال
شود.

مسیر زمان‌بندی دستورات

Software Scheduling و Hardware Scheduling

بخشی از تصمیم‌گیری‌های زمان‌بندی ممکن است توسط
سیستم‌عامل و Driver انجام شود و بخش دیگری در
خود GPU و Firmware اجرا شود.

Scheduler نرم‌افزاری بیشتر با برنامه‌ها،
Contextها، اولویت‌ها و مدیریت منابع سروکار
دارد؛ درحالی‌که Scheduler سخت‌افزاری وظایف
آماده را میان Engineها و واحدهای اجرایی توزیع
می‌کند.

تفاوت زمان‌بندی نرم‌افزاری و سخت‌افزاری
معیار Software Scheduler Hardware Scheduler
محل اجرا سیستم‌عامل و Driver GPU یا Firmware
وظیفه مدیریت Context و اولویت توزیع Workload میان Engineها
سطح تصمیم‌گیری برنامه و Process Queue، Command و Work Item
Latency بیشتر کمتر
انعطاف بیشتر وابسته به معماری

Hardware Queue چیست؟

Hardware Queue صفی در سطح GPU است که فرمان‌های
آماده اجرا را برای یک Engine یا گروهی از
واحدهای سخت‌افزاری نگهداری می‌کند.

وجود چند Hardware Queue به GPU اجازه می‌دهد
چند نوع عملیات را با استقلال بیشتری مدیریت
و اجرا کند.

تفاوت Software Queue و Hardware Queue

مقایسه Queue نرم‌افزاری و سخت‌افزاری
ویژگی Software Queue Hardware Queue
محل Driver یا Runtime داخل GPU
مدیریت CPU و Driver Scheduler سخت‌افزاری
سرعت تصمیم‌گیری کمتر بیشتر
تعداد می‌تواند زیاد باشد محدود به معماری GPU
نقش اصلی نگهداری درخواست برنامه‌ها تغذیه مستقیم Engineها

GPU Context چیست؟

هر برنامه‌ای که از GPU استفاده می‌کند، معمولاً
دارای Context مخصوص خود است.

Context شامل وضعیت Pipeline، Shaderها،
Bufferها، تنظیمات حافظه و اطلاعات لازم برای
ادامه اجرای آن برنامه است.

Scheduler هنگام جابه‌جایی میان برنامه‌ها باید
Context فعلی را ذخیره و Context برنامه بعدی
را فعال کند.

Context Switch

Context Switch زمانی رخ می‌دهد که GPU اجرای
یک Workload را متوقف کرده و اجرای Workload
دیگری را آغاز کند.

در این فرآیند، بخشی از وضعیت قبلی باید ذخیره
و وضعیت جدید بارگذاری شود.

Context Switch برای اجرای چند برنامه ضروری
است، اما اگر بیش‌ازحد تکرار شود می‌تواند
Latency و سربار ایجاد کند.

Preemption چیست؟

Preemption به Scheduler اجازه می‌دهد اجرای
یک Workload را موقتاً متوقف کند تا وظیفه‌ای
با اولویت بالاتر اجرا شود.

برای مثال، سیستم ممکن است پردازش طولانی
Compute را متوقف کند تا رابط کاربری یا Frame
نمایشگر با تأخیر مواجه نشود.

کاربردهای Preemption
وضعیت Workload متوقف‌شده Workload اولویت‌دار
Desktop Responsiveness Compute طولانی Render رابط کاربری
Video Playback Background Render Frame نمایش
Real-Time Capture Export غیرزنده Capture و Encode زنده
System Recovery Kernel کند عملیات حیاتی سیستم

Preemption Granularity

Granularity مشخص می‌کند GPU در چه نقطه‌ای
می‌تواند اجرای Workload را متوقف کند.

هرچه سطح Preemption ریزتر باشد، Scheduler
سریع‌تر می‌تواند میان وظایف جابه‌جا شود؛ اما
پیاده‌سازی و ذخیره وضعیت پیچیده‌تر خواهد بود.

سطوح مختلف Preemption
سطح محل توقف Latency واکنش
Command Level پایان یک Command زیاد
Draw / Dispatch Level پایان Draw یا Dispatch متوسط
Thread Group Level پایان یک Work Group کمتر
Instruction Level نزدیک سطح دستور بسیار کم

اولویت Queueها

Queueها می‌توانند اولویت‌های متفاوتی داشته
باشند.

عملیات Real-Time مانند پخش ویدئو، Capture،
رابط کاربری یا پردازش صدا ممکن است نسبت به
Export پس‌زمینه اولویت بیشتری دریافت کنند.

نمونه سطح اولویت Workloadها
Workload اولویت احتمالی دلیل
Display Scanout بسیار بالا جلوگیری از Frame Drop
Live Video Encode بالا حفظ Latency و نرخ فریم
Interactive Preview بالا پاسخ‌گویی Timeline
Background Export متوسط حساسیت کمتر به Latency
Offline AI Processing پایین تا متوسط تمرکز بر Throughput

Fairness در Scheduler

Scheduler باید میان Workloadهای مختلف تعادل
برقرار کند تا یک برنامه تمام منابع GPU را
برای مدت طولانی اشغال نکند.

اگر تنها Priority در نظر گرفته شود، ممکن است
Queueهای کم‌اولویت هرگز فرصت اجرا پیدا نکنند.
این وضعیت Starvation نام دارد.

Queue Starvation

Queue Starvation زمانی رخ می‌دهد که یک Queue
به دلیل حضور مداوم Queueهای پراولویت، زمان
اجرای کافی دریافت نکند.

Schedulerهای مناسب معمولاً از مکانیزم‌هایی
برای جلوگیری از Starvation استفاده می‌کنند.

Round-Robin Scheduling

در روش Round-Robin، هر Queue یا Context برای
مدت محدودی فرصت اجرا دریافت می‌کند و سپس نوبت
به Queue بعدی می‌رسد.

این روش Fairness مناسبی ایجاد می‌کند، اما ممکن
است برای Workloadهای Real-Time نیاز به Priority
اضافی داشته باشد.

Time Slice چیست؟

Time Slice بازه زمانی مشخصی است که Scheduler
برای اجرای یک Context یا Queue در نظر می‌گیرد.

Time Slice بسیار کوتاه باعث افزایش Context
Switch می‌شود و Time Slice بسیار بلند ممکن
است Latency برنامه‌های دیگر را افزایش دهد.

اثر اندازه Time Slice
Time Slice مزیت محدودیت
کوتاه پاسخ‌گویی بهتر Context Switch بیشتر
متوسط تعادل Latency و Throughput نیازمند تنظیم مناسب
بلند Throughput بیشتر برای یک Workload تأخیر Queueهای دیگر

Queue Depth

Queue Depth تعداد Work Itemها یا Command
Bufferهایی است که در صف انتظار قرار دارند.

Queue بسیار خالی باعث بیکار ماندن Engine می‌شود،
اما Queue بسیار عمیق می‌تواند Latency را افزایش
دهد.

اثر Queue Depth بر عملکرد
وضعیت نتیجه
Queue خالی بیکارشدن Engine
Queue کم‌عمق Latency پایین، Throughput محدودتر
Queue متعادل استفاده مناسب از سخت‌افزار
Queue بسیار عمیق افزایش زمان انتظار Command

Work-Conserving Scheduler

Scheduler نوع Work-Conserving تلاش می‌کند تا
زمانی که Workload آماده وجود دارد، واحد
سخت‌افزاری را بیکار نگذارد.

اگر Graphics Queue منتظر داده باشد، ممکن است
Compute Queue یا Copy Queue از ظرفیت آزاد
استفاده کند؛ البته فقط درصورتی‌که منابع و
وابستگی‌ها اجازه دهند.

زمان‌بندی چند Engine

GPU مدرن ممکن است چند Engine مستقل داشته باشد.
Scheduler می‌تواند Workloadهای سازگار را
هم‌زمان روی آن‌ها اجرا کند.

زمان‌بندی وابسته به Dependency

Scheduler نمی‌تواند فقط بر اساس خالی‌بودن
Engine تصمیم بگیرد؛ وابستگی داده‌ها نیز باید
رعایت شود.

برای مثال، Encode یک Frame تنها زمانی آغاز
می‌شود که پردازش Compute همان Frame کامل شده
باشد.

گلوگاه‌های مربوط به Scheduler

مشکلات رایج در زمان‌بندی GPU
مشکل نشانه پیامد
Queue خالی Utilization پایین بیکارشدن Engine
Queue بسیار عمیق تأخیر زیاد افزایش Latency
Context Switch زیاد نوسان عملکرد سربار Scheduler
Priority نامناسب افت Frame یا کندی رابط اجرای دیرهنگام کار حیاتی
Starvation پیشرفت‌نکردن Queue توقف Workload کم‌اولویت
Dependency زیاد Engineهای منتظر کاهش Parallelism
Preemption ضعیف تأخیر رابط کاربری واکنش کند سیستم

بهینه‌سازی زمان‌بندی GPU

راهکارهای بهبود استفاده از Scheduler
راهکار نتیجه
پر نگه‌داشتن Queueها کاهش بیکاری Engine
کاهش Synchronization اضافی افزایش اجرای هم‌زمان
اولویت صحیح Workload حفظ پاسخ‌گویی Real-Time
Command Buffer مناسب کاهش سربار Submit
تقسیم Workload طولانی Preemption و Fairness بهتر
استفاده از چند Queue بهره‌گیری از Engineهای مستقل
Queue Depth کنترل‌شده تعادل Throughput و Latency

Asynchronous Compute و اجرای هم‌زمان Engineها

GPUهای مدرن می‌توانند عملیات Graphics،
Compute، Copy، Decode و Encode را تا حدی
هم‌زمان اجرا کنند. این قابلیت زمانی مفید است
که Workloadها از واحدهای مستقل استفاده کنند،
منابع مشترک کافی داشته باشند و میان آن‌ها
وابستگی یا Synchronization غیرضروری وجود
نداشته باشد.

Asynchronous Compute چیست؟

Asynchronous Compute به اجرای Workloadهای
Compute در کنار سایر عملیات GPU گفته می‌شود،
بدون اینکه همه مراحل مجبور باشند کاملاً
متوالی اجرا شوند.

برای مثال، در حالی که بخشی از GPU یک Frame را
Render می‌کند، بخشی دیگر ممکن است Optical
Flow، Color Processing یا یک فیلتر Compute را
روی Frame دیگری اجرا کند.

اجرای متوالی و اجرای Asynchronous

در اجرای متوالی، هر مرحله باید کاملاً پایان
یابد تا مرحله بعدی شروع شود.

در اجرای Asynchronous، عملیات مستقل یا
بخش‌هایی از آن‌ها می‌توانند در بازه‌های زمانی
مشترک اجرا شوند.

چه زمانی اجرای واقعاً موازی رخ می‌دهد؟

قرارگرفتن چند Command در Queueهای متفاوت
به‌تنهایی تضمین نمی‌کند که آن‌ها واقعاً
هم‌زمان اجرا شوند.

اجرای واقعی موازی به وجود Engineهای مستقل،
منابع آزاد، نبود وابستگی مستقیم و پشتیبانی
Scheduler و Driver بستگی دارد.

شرایط لازم برای Parallel Execution
شرط دلیل
Engine مستقل جلوگیری از رقابت برای یک واحد اجرایی
نبود Dependency مستقیم امکان شروع بدون انتظار برای مرحله دیگر
Memory Bandwidth کافی تغذیه هم‌زمان چند Engine
ظرفیت VRAM کافی نگهداری Bufferهای هم‌زمان
Queue و Scheduler مناسب ارسال Workload به Engine صحیح
Synchronization محدود جلوگیری از توقف غیرضروری Pipeline

Multi-Engine Execution

GPU مدرن ممکن است چند Engine مستقل برای
Graphics، Compute، Copy، Decode، Encode و
Display داشته باشد.

Multi-Engine Execution یعنی استفاده هم‌زمان
از این واحدها برای اجرای بخش‌های مختلف
Pipeline.

استقلال Engineها

برخی Engineها مدارهای کاملاً جداگانه‌ای دارند،
اما همچنان ممکن است از منابع مشترکی مانند
VRAM، L2 Cache، Memory Controller و PCIe
استفاده کنند.

بنابراین مستقل‌بودن Engine به معنی مستقل‌بودن
کامل همه منابع سیستم نیست.

منابع اختصاصی و مشترک Engineهای GPU
منبع وضعیت معمول پیامد
Decode Unit اختصاصی Decode مستقل از Shader
Encode Unit اختصاصی Encode مستقل از Compute
Shader Core مشترک میان Graphics و Compute رقابت Workloadهای Shader
VRAM مشترک رقابت برای ظرفیت و پهنای باند
L2 Cache معمولاً مشترک Cache Contention احتمالی
Memory Controller مشترک رقابت درخواست‌های حافظه

هم‌پوشانی Graphics و Compute

Graphics و Compute ممکن است از Shader Coreهای
مشترک استفاده کنند. در این حالت، Scheduler
تلاش می‌کند Workloadهای آن‌ها را میان منابع
موجود توزیع کند.

اگر Graphics تمام Shaderها، Registerها یا
حافظه محلی را اشغال کرده باشد، Compute فضای
کافی برای اجرای هم‌زمان نخواهد داشت.

مزایای Asynchronous Compute

مزایای اجرای Compute به‌صورت Asynchronous
مزیت نتیجه
استفاده از منابع آزاد افزایش GPU Utilization
پنهان‌کردن Latency انجام کار دیگر هنگام انتظار یک مرحله
افزایش Throughput پردازش Frameهای بیشتر در زمان یکسان
کاهش زمان بیکاری Engine استفاده بهتر از سخت‌افزار
مناسب Pipeline ویدئو هم‌زمانی Decode، Effect و Encode

محدودیت‌های Asynchronous Compute

اجرای هم‌زمان همیشه باعث افزایش سرعت نمی‌شود.
اگر Workloadها برای یک منبع مشترک رقابت کنند،
ممکن است عملکرد هر دو کاهش یابد.

عوامل محدودکننده Async Compute
محدودیت اثر
Shader Saturation نبود فضای اجرایی برای Compute دوم
Memory Bandwidth Saturation انتظار هم‌زمان چند Engine برای داده
Register Pressure کاهش Workloadهای Resident
Shared Memory Usage محدودشدن تعداد Work Groupها
Dependency تبدیل اجرای موازی به انتظار متوالی
Synchronization Overhead کاهش سود اجرای هم‌زمان

ارتباط Async Compute با Occupancy

برای اجرای هم‌زمان چند Workload، باید منابع
کافی برای Resident شدن آن‌ها روی واحدهای
پردازشی وجود داشته باشد.

اگر Kernel اول تمام Register File، Shared
Memory یا ظرفیت Waveها را مصرف کند، Kernel دوم
حتی با وجود Queue مستقل منتظر خواهد ماند.

منابع مؤثر بر هم‌زمانی Kernelها
منبع اثر مصرف زیاد
Register کاهش Threadها و Kernelهای Resident
Shared Memory کاهش Work Groupهای هم‌زمان
Wave / Warp Slot محدودشدن Workload دوم
Cache افزایش Cache Thrashing
Memory Bandwidth کاهش Throughput هر دو Workload

مثال اجرای Asynchronous در Pipeline ویدئو

در یک Transcode سخت‌افزاری، چند Frame می‌توانند
هم‌زمان در مراحل مختلف Pipeline قرار داشته
باشند.

هم‌پوشانی Copy و Compute

Copy Engine می‌تواند Frame بعدی را Upload کند،
در حالی که Compute Engine Frame فعلی را
پردازش می‌کند.

برای این کار معمولاً از چند Buffer و انتقال
Asynchronous استفاده می‌شود.

Double Buffering و Triple Buffering

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

کاربرد Bufferهای هم‌زمان
Buffer وضعیت نمونه
Buffer A در حال پردازش Compute
Buffer B در حال Upload یا Decode
Buffer C در حال Encode یا Display

Pipeline Bubble چیست؟

Pipeline Bubble بازه‌ای است که یک یا چند Engine
به دلیل نبود Workload آماده یا انتظار برای
داده بیکار می‌مانند.

Queue خالی، Synchronization، انتقال کند و
Dependency می‌توانند Pipeline Bubble ایجاد
کنند.

موازی‌سازی ظاهری

ممکن است ابزار Profiler چند Queue فعال نشان
دهد، اما Workloadها عملاً به‌صورت نوبتی اجرا
شوند.

این حالت زمانی رخ می‌دهد که Queueها از Engine
مشترک استفاده کنند یا برای یک منبع اشباع‌شده
رقابت داشته باشند.

دلایل موازی نبودن واقعی Workloadها
علت نتیجه
Engine مشترک اجرای نوبتی Queueها
Dependency پنهان انتظار یک Queue برای Queue دیگر
Memory Saturation کندشدن هم‌زمان همه Engineها
Resource Exhaustion Resident نشدن Workload دوم
Driver Serialization اجرای متوالی در سطح Runtime

اثر Async Execution بر Latency و Throughput

Asynchronous Execution معمولاً Throughput کل
را افزایش می‌دهد، اما ممکن است زمان تکمیل یک
Frame مشخص را کاهش ندهد.

Queue Depth و Buffering بیشتر می‌توانند
سخت‌افزار را مشغول نگه دارند، ولی Latency
انتها‌به‌انتهای Pipeline را افزایش دهند.

تفاوت هدف در Workloadهای مختلف
کاربرد هدف اصلی تنظیم مناسب
Live Streaming Latency پایین Queue کوتاه و Buffer محدود
Offline Export Throughput بالا Queue عمیق‌تر و Parallelism بیشتر
Interactive Preview پاسخ‌گویی Priority بالا و Preemption مناسب
Batch Transcode بیشترین تعداد Frame در ثانیه چند Stream و Buffer موازی

گلوگاه‌های اجرای Asynchronous

مشکلات رایج در Multi-Engine Execution
گلوگاه نشانه پیامد
Memory Contention فعالیت زیاد چند Engine با سرعت پایین افت Throughput
Synchronization زیاد فاصله خالی میان Workloadها Pipeline Bubble
Queue Imbalance یک Engine بیکار و Engine دیگر اشباع استفاده ناقص از GPU
Resource Saturation اجرا نشدن Workload دوم تبدیل Async به Serial
Buffer کم انتظار Engine برای Frame کاهش موازی‌سازی
Buffer زیاد صف طولانی افزایش Latency

بهینه‌سازی Multi-Engine Execution

راهکارهای افزایش بهره‌وری اجرای هم‌زمان
راهکار نتیجه
توزیع Workload میان Engineهای مستقل افزایش Parallelism واقعی
کاهش Barrierهای غیرضروری حذف زمان انتظار
استفاده از Buffer Ring تغذیه پیوسته مراحل Pipeline
تنظیم Queue Depth تعادل Latency و Throughput
کاهش Register Pressure امکان Resident شدن Kernelهای بیشتر
ادغام Passهای حافظه‌محور کاهش Memory Traffic
Zero-Copy و API Interop کاهش Copy و PCIe Traffic
Profiling Timeline شناسایی Bubble و Serialization

Frame Buffer، Video Surface، Texture و Render Target

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

Frame Buffer چیست؟

Frame Buffer بخشی از حافظه GPU است که تصویر کامل یک
Frame در آن ذخیره می‌شود.

این تصویر ممکن است در حال Render شدن باشد،
آماده نمایش باشد یا نتیجه پردازش یک Shader یا
Video Engine را نگهداری کند.

Video Surface چیست؟

Video Surface ساختاری در حافظه GPU است که معمولاً
برای نگهداری Frameهای خام ویدئویی استفاده می‌شود.

Decoder، Video Processor، AI Engine و Encoder
مستقیماً روی Surfaceها کار می‌کنند.

Texture چیست؟

Texture نوعی ساختار حافظه است که برای دسترسی سریع
دوبعدی یا سه‌بعدی به داده‌ها طراحی شده است.

Texture تنها برای تصاویر رنگی نیست و می‌تواند شامل
داده‌های عمق، حجم، نویز، LUT یا هر آرایه دوبعدی
دیگری باشد.

Render Target چیست؟

Render Target حافظه‌ای است که خروجی عملیات Render
مستقیماً در آن نوشته می‌شود.

پس از پایان Render، همین تصویر می‌تواند به Texture،
Frame Buffer یا تصویر نهایی نمایشگر تبدیل شود.

مسیر حرکت Frame

مقایسه ساختارهای حافظه

تفاوت انواع ساختارهای نگهداری تصویر
ساختار کاربرد خواندن نوشتن
Video Surface پردازش ویدئو بله بله
Texture Sampling بسیار سریع محدود
Render Target خروجی Render گاهی بله
Frame Buffer تصویر نهایی بله بله

چند Frame Buffer

برای جلوگیری از توقف Pipeline معمولاً بیش از یک
Frame Buffer وجود دارد.

در سیستم‌های Real-Time معمولاً از Double Buffering یا
Triple Buffering استفاده می‌شود.

Layout حافظه تصویر

داده‌های تصویر همیشه به صورت خطی ذخیره نمی‌شوند.
بسیاری از GPUها از Tile Layout یا Block Layout
استفاده می‌کنند تا دسترسی Cache سریع‌تر شود.

Image Memory Layout در GPU

تصویر در حافظه GPU تنها مجموعه‌ای از Pixelها نیست.
نحوه چیدمان این Pixelها در حافظه، یکی از مهم‌ترین
عوامل تعیین‌کننده عملکرد Cache، پهنای باند حافظه،
سرعت Texture Sampling و کارایی Render Pipeline است.
به این نحوه سازمان‌دهی داده‌ها، Image Memory Layout
گفته می‌شود.

Image Memory Layout چیست؟

Image Memory Layout مشخص می‌کند Pixelهای یک تصویر
با چه ترتیبی در حافظه فیزیکی GPU ذخیره شوند.

دو تصویر ممکن است کاملاً یکسان به نظر برسند اما
داده‌های آن‌ها در حافظه کاملاً متفاوت سازمان‌دهی
شده باشند.

چرا Layout اهمیت دارد؟

Shaderها معمولاً Pixelهای مجاور را پشت سر هم
پردازش می‌کنند.

اگر Pixelهای مجاور در حافظه نیز کنار هم باشند،
Cache بسیار مؤثرتر عمل خواهد کرد و تعداد دسترسی
به VRAM کاهش می‌یابد.

انواع رایج Layout

رایج‌ترین Layoutهای حافظه تصویر
Layout کاربرد
Linear CPU ،DMA ،فایل‌ها
Pitched Alignment سطرها
Tiled Render و Texture
Block Linear GPUهای مدرن NVIDIA
Swizzled Texture Cache
Morton (Z-order) Locality بالا

تصویر و حافظه

Linear Layout

در این Layout تمام Pixelها دقیقاً پشت سر هم
ذخیره می‌شوند.

ساده‌ترین Layout است و معمولاً توسط CPU، فایل‌های
تصویری و انتقال DMA استفاده می‌شود.

مزایا و محدودیت‌های Linear Layout

ویژگی‌های Linear Layout
ویژگی وضعیت
سادگی بسیار زیاد
مناسب CPU بله
مناسب Cache GPU معمولاً خیر
سرعت Texture Sampling کمتر از Layoutهای Tiled

فصل بعد

GPU MEMORY ARCHITECTURE

Pitch، Stride و Row Alignment

بررسی فاصله واقعی میان سطرهای تصویر در حافظه،
Padding، Alignment و دلایلی که باعث می‌شوند اندازه
واقعی یک تصویر در حافظه با حاصل‌ضرب ساده عرض و ارتفاع
برابر نباشد.


سطح فصل


متوسط


زمان مطالعه


حدود ۱۵ دقیقه


موضوع


Image Memory Layout


نسخه


v1.0

پیش‌نیازهای فصل

  • آشنایی با Pixel و Byte
  • شناخت Linear Layout
  • درک مقدماتی حافظه و Alignment

در این فصل یاد می‌گیرید

  • Pitch و Stride چه تفاوتی دارند
  • چرا میان سطرهای تصویر Padding ایجاد می‌شود
  • چگونه آدرس یک Pixel در حافظه محاسبه می‌شود
  • چرا فرض فشرده‌بودن سطرها خطرناک است

نقشه مفهومی فصل
Image Row Layout
Row Size
Pitch / Stride
Alignment
Padding
Pixel Address
Buffer Size

Pitch چیست؟

Pitch تعداد Byteهایی است که از ابتدای یک سطر تصویر تا
ابتدای سطر بعدی در حافظه فاصله وجود دارد.

این مقدار ممکن است دقیقاً برابر اندازه واقعی داده‌های
یک سطر باشد، اما در بسیاری از Bufferهای GPU بزرگ‌تر است.

Stride چیست؟

Stride نیز معمولاً به فاصله میان دو عنصر متوالی در حافظه
اشاره دارد.

در پردازش تصویر، اصطلاح Row Stride اغلب همان مفهومی را
بیان می‌کند که Pitch بیان می‌کند؛ یعنی فاصله میان شروع
دو سطر متوالی.

بااین‌حال، Stride می‌تواند برای فاصله میان Pixelها،
Channelها، Planeها یا عناصر یک Tensor نیز استفاده شود.

تفاوت Pitch و Stride

مقایسه Pitch و Stride
معیار Pitch Stride
کاربرد رایج فاصله میان سطرهای تصویر فاصله میان عناصر یا سطرها
واحد معمولاً Byte Byte یا تعداد عنصر
حوزه استفاده APIهای گرافیکی و ویدئویی تصویر، Tensor و آرایه
هم‌معنی بودن در بسیاری از APIها بله وابسته به Context

اندازه واقعی داده یک سطر

در یک تصویر Packed، اندازه خام یک سطر از حاصل‌ضرب عرض
تصویر در تعداد Byteهای هر Pixel به‌دست می‌آید.

برای نمونه، در تصویر RGBA هشت‌بیتی هر Pixel چهار Byte
دارد.

Padding میان سطرها

GPU یا Driver ممکن است چند Byte اضافی در انتهای هر سطر
قرار دهد تا ابتدای سطر بعدی با مرز حافظه مناسب هم‌تراز
شود.

این Byteهای اضافی Padding نام دارند و بخشی از داده
قابل‌مشاهده تصویر نیستند.

Row Alignment چیست؟

Alignment مشخص می‌کند شروع یک سطر باید روی مضربی از چه
تعداد Byte قرار گیرد.

برای مثال، اگر Alignment برابر 256 Byte باشد، Pitch باید
مضربی از 256 باشد.

نمونه Alignmentهای متداول
Alignment کاربرد احتمالی
4 Byte داده‌های ساده CPU
16 Byte SIMD و Vector Access
64 Byte Cache Line و دسترسی سریع‌تر
128 Byte بعضی Bufferهای GPU
256 Byte Copy و Texture Resourceهای خاص

محاسبه Pitch بر اساس Alignment

برای محاسبه Pitch، اندازه خام سطر به نزدیک‌ترین مضرب
بالاتر Alignment گرد می‌شود.

فرض کنید اندازه خام سطر 1000 Byte و Alignment برابر
256 Byte باشد.

نمایش حافظه‌ای Pitch

محاسبه آدرس یک Pixel

برای یافتن آدرس Pixel با مختصات x و y، باید Pitch واقعی
Buffer استفاده شود، نه صرفاً عرض تصویر.

بخش y × Pitch آدرس ابتدای سطر و بخش x × Bytes Per Pixel
محل Pixel در همان سطر را مشخص می‌کند.

اندازه واقعی Buffer

اندازه حافظه موردنیاز تصویر دارای Pitch معمولاً از
حاصل‌ضرب Pitch در ارتفاع به‌دست می‌آید.

بنابراین مقدار واقعی حافظه می‌تواند از اندازه منطقی
Pixelهای تصویر بیشتر باشد.

اندازه منطقی و اندازه فیزیکی تصویر

تفاوت اندازه منطقی و فیزیکی Buffer
مفهوم فرمول شامل Padding
Logical Size Width × Height × Bpp خیر
Physical Buffer Size Pitch × Height بله

Negative Stride

در بعضی فرمت‌ها یا APIها، Stride می‌تواند منفی باشد.

Stride منفی معمولاً نشان می‌دهد سطرها در حافظه از پایین
به بالا ذخیره یا پیمایش می‌شوند.

این حالت در بعضی Bitmapهای قدیمی یا ساختارهای خاص
سیستم‌عامل دیده می‌شود.

Pitch در تصاویر چند Plane

فرمت‌های YUV Planar یا Semi-Planar ممکن است برای هر Plane
دارای Pitch مستقل باشند.

برای مثال، Plane روشنایی و Plane رنگ ممکن است عرض،
ارتفاع و Alignment متفاوتی داشته باشند.

نمونه Pitch در فرمت چند Plane
Plane داده Pitch
Y Plane روشنایی مستقل
U Plane مؤلفه رنگ اول ممکن است کوچک‌تر باشد
V Plane مؤلفه رنگ دوم ممکن است کوچک‌تر باشد
UV Plane رنگ Interleaved مستقل از Y

Pitch در APIهای مختلف


CUDA

cudaMallocPitch و مقدار pitch


Direct3D

RowPitch در Subresource Mapping


Vulkan

rowPitch در Subresource Layout


FFmpeg

linesize برای هر Plane


OpenCV

step یا step1


Metal

bytesPerRow

چرا GPU به Row Alignment نیاز دارد؟

دلایل استفاده از Alignment
دلیل نتیجه
دسترسی حافظه منظم کاهش عملیات حافظه شکسته
سازگاری با Cache Line استفاده بهتر از Cache
انتقال DMA افزایش کارایی Copy
محدودیت سخت‌افزار دسترسی ساده‌تر Memory Controller
Texture Sampling خواندن منظم Blockها

کپی تصویر دارای Pitch

هنگام کپی یک تصویر دارای Pitch، معمولاً نباید کل Buffer
را به‌عنوان یک آرایه فشرده از Pixelها در نظر گرفت.

Copy باید سطر‌به‌سطر انجام شود یا از API مخصوص کپی
دوبعدی استفاده شود.

تفاوت Source Pitch و Destination Pitch

هنگام انتقال تصویر میان CPU و GPU یا میان دو Buffer،
Pitch مبدأ و مقصد ممکن است متفاوت باشند.

تنها بخش واقعی Pixel Data هر سطر کپی می‌شود و Padding
مبدأ لزوماً به مقصد منتقل نمی‌شود.


PERFORMANCE IMPACT

اثر Pitch و Alignment بر عملکرد

Memory Access


زیاد

Copy Performance


زیاد

VRAM Usage


کم تا متوسط

Correctness


بسیار زیاد

خطاهای رایج مرتبط با Pitch

مشکلات متداول پردازش تصویر دارای Pitch
خطا نشانه علت
تصویر مورب جابه‌جایی تدریجی سطرها استفاده از Row Size به‌جای Pitch
خطوط خراب نمایش Pixelهای نامعتبر خواندن Padding به‌عنوان داده تصویر
رنگ‌های اشتباه Channelهای جابه‌جا یا شکسته Stride Pixel یا Format اشتباه
Crash دسترسی خارج از Buffer محاسبه نادرست اندازه حافظه
کپی ناقص سطرهای بریده‌شده Copy Size نادرست


M2


CHAPTER SUMMARY

خلاصه فصل

  • Pitch فاصله میان شروع دو سطر متوالی در حافظه است.
  • Pitch ممکن است از اندازه واقعی داده یک سطر بیشتر باشد.
  • Padding برای رعایت Alignment به انتهای سطر افزوده می‌شود.
  • آدرس Pixel باید با استفاده از Pitch واقعی محاسبه شود.
  • تصاویر چند Plane می‌توانند برای هر Plane Pitch جداگانه داشته باشند.
  • اندازه فیزیکی Buffer معمولاً Pitch ضرب‌در Height است.

واژه‌نامه فصل

Pitchفاصله Byteای میان شروع دو سطر متوالی تصویر.
Strideفاصله حافظه‌ای میان عناصر، Pixelها یا سطرها.
Paddingفضای اضافی میان داده واقعی و ابتدای بخش بعدی.
Alignmentقرارگیری آدرس یا اندازه روی مضربی مشخص از Byte.
RowPitchنام رایج Pitch در بعضی APIهای گرافیکی.

فصل بعد

GPU MEMORY ARCHITECTURE

Planar، Semi-Planar و Packed Pixel Formats

بررسی روش‌های ذخیره مؤلفه‌های رنگ در حافظه، تفاوت
Plane و Channel، ساختار فرمت‌هایی مانند RGB، RGBA،
YUV420P، NV12 و P010 و اثر چیدمان Pixelها بر Decode،
پردازش، Copy و نمایش تصویر.


سطح فصل


متوسط


زمان مطالعه


حدود ۲۰ دقیقه


موضوع


Pixel Memory Organization


نسخه


v1.0

پیش‌نیازهای فصل

  • شناخت فضای رنگ RGB و YUV
  • آشنایی با Chroma Subsampling
  • درک Pitch، Stride و Row Alignment

در این فصل یاد می‌گیرید

  • Plane و Channel چه تفاوتی دارند
  • Packed و Planar چگونه داده را ذخیره می‌کنند
  • NV12 و P010 چرا Semi-Planar هستند
  • آدرس هر مؤلفه رنگ چگونه محاسبه می‌شود

نقشه مفهومی فصل
Pixel Format Layout
Packed
Planar
Semi-Planar
Channel Order
Plane Pitch
Chroma Layout

Pixel Format چیست؟

Pixel Format مشخص می‌کند اطلاعات رنگ هر Pixel از چه
مؤلفه‌هایی تشکیل شده، هر مؤلفه چند Bit دارد و این
مؤلفه‌ها با چه ترتیبی در حافظه ذخیره می‌شوند.

دو تصویر با Resolution و محتوای کاملاً یکسان می‌توانند
به دلیل تفاوت Pixel Format، اندازه، Layout و روش دسترسی
متفاوتی در حافظه داشته باشند.

تفاوت Channel و Plane

Channel یک مؤلفه معنایی تصویر مانند Red، Green، Blue،
Alpha، Y، U یا V است.

Plane یک ناحیه یا Buffer حافظه‌ای است که یک یا چند
Channel را نگهداری می‌کند.

مقایسه Channel و Plane
مفهوم تعریف نمونه
Channel یک مؤلفه رنگ یا داده R، G، B، A، Y، U، V
Plane یک ناحیه مستقل حافظه Y Plane یا UV Plane

Packed Format

در فرمت Packed، مؤلفه‌های مربوط به یک Pixel یا گروهی از
Pixelها پشت سر هم در یک Plane حافظه ذخیره می‌شوند.

فرمت‌های RGB، RGBA و BGRA از نمونه‌های رایج Packed
هستند.

ویژگی‌های Packed Format

مزایا و محدودیت‌های فرمت Packed
ویژگی نتیجه
یک Plane مدیریت ساده‌تر Buffer
مؤلفه‌های مجاور دسترسی آسان به تمام Channelهای Pixel
مناسب Rendering سازگار با Texture و Render Target
استخراج یک Channel نیازمند عبور از داده‌های Interleaved
اندازه هر Pixel معمولاً ثابت و قابل محاسبه مستقیم

ترتیب Channelها در فرمت Packed

نام فرمت معمولاً ترتیب منطقی Channelها را بیان می‌کند،
اما نمایش Byteها در حافظه ممکن است به Endianness،
تعریف API و اندازه عنصر ذخیره‌سازی وابسته باشد.

نمونه فرمت‌های Packed رنگی
فرمت Channelها کاربرد رایج
RGB24 R، G، B تصویر سه‌کاناله ۸ بیت
RGBA32 R، G، B، A Rendering و Compositing
BGRA32 B، G، R، A رابط‌های گرافیکی و Frame Buffer
RGB565 R5، G6، B5 نمایشگر و سخت‌افزار کم‌حافظه
RGB10A2 RGB ده‌بیتی و Alpha دوبیتی خروجی رنگ با دقت بیشتر

فرمت‌های YUV Packed

فرمت Packed تنها مخصوص RGB نیست. در بعضی فرمت‌های YUV،
مؤلفه‌های روشنایی و رنگ چند Pixel در یک Stream مشترک
قرار می‌گیرند.

نمونه فرمت‌های YUV Packed
فرمت ترتیب حافظه Chroma
YUY2 / YUYV Y0 U0 Y1 V0 4:2:2
UYVY U0 Y0 V0 Y1 4:2:2
AYUV A Y U V برای هر Pixel 4:4:4

Planar Format

در فرمت Planar، هر Channel یا گروه مشخصی از داده‌ها در
Plane جداگانه ذخیره می‌شود.

در فرمت YUV420P، مؤلفه Y در Plane اول، U در Plane دوم
و V در Plane سوم قرار می‌گیرد.

سازمان‌دهی حافظه در فرمت Planar

Planeها ممکن است در Allocationهای کاملاً جداگانه باشند
یا به‌صورت متوالی داخل یک Buffer بزرگ قرار گیرند.

برای دسترسی صحیح، آدرس پایه، Pitch، ارتفاع و Offset هر
Plane باید جداگانه شناخته شود.

ویژگی‌های Planar Format

مزایا و محدودیت‌های فرمت Planar
ویژگی نتیجه
Plane مستقل پردازش جداگانه هر مؤلفه
Chroma Subsampling ذخیره U و V با ابعاد کوچک‌تر
مناسب Codec سازگار با ساختار طبیعی بسیاری از Codecها
مدیریت پیچیده‌تر نیاز به Pitch و Offset جداگانه
تبدیل به RGB نیازمند Sampling از چند Plane

ساختار YUV420P

در YUV420P برای هر Pixel یک Sample روشنایی وجود دارد،
اما هر Sample از U و V میان یک بلوک ۲×۲ از Pixelها
مشترک است.

ابعاد Planeها در YUV420P
Plane عرض ارتفاع
Y Width Height
U Width ÷ 2 Height ÷ 2
V Width ÷ 2 Height ÷ 2

تفاوت I420 و YV12

هر دو فرمت Planar و 4:2:0 هستند، اما ترتیب Planeهای
رنگی آن‌ها متفاوت است.

Semi-Planar Format

در فرمت Semi-Planar، روشنایی در یک Plane مستقل قرار دارد،
اما مؤلفه‌های U و V به‌صورت Interleaved در Plane دوم
ذخیره می‌شوند.

NV12 یکی از رایج‌ترین نمونه‌های این ساختار است.

NV12

NV12 یک فرمت YUV 4:2:0 هشت‌بیتی و دو Plane است.

ساختار NV12
Plane محتوا ابعاد منطقی
Plane 0 Y هشت‌بیتی Width × Height
Plane 1 UV Interleaved Width × Height ÷ 2 از نظر Byte

NV12 در Decode سخت‌افزاری، Video Processing و مسیرهای
Zero-Copy بسیار رایج است؛ زیرا تعداد Planeها را نسبت به
YUV420P کاهش می‌دهد.

NV21

NV21 از نظر ابعاد و Subsampling مشابه NV12 است، اما ترتیب
مؤلفه‌های Plane رنگی متفاوت است.

P010

P010 یک فرمت Semi-Planar از خانواده YUV 4:2:0 است که
معمولاً برای ویدئوی ده‌بیتی و HDR استفاده می‌شود.

هر Sample معمولاً داخل یک Container شانزده‌بیتی نگهداری
می‌شود؛ بنابراین نام ده‌بیتی فرمت به معنی مصرف دقیق ده
Bit فیزیکی برای هر Sample در حافظه نیست.

P016

P016 از نظر ساختار Plane مشابه P010 است، اما Container
شانزده‌بیتی می‌تواند Precision بیشتری را نمایش دهد.

تفسیر دقیق Bitهای معتبر باید از تعریف API، Codec یا
Metadata منبع مشخص شود.

مقایسه Packed، Planar و Semi-Planar

تفاوت سه روش اصلی چیدمان Pixel Format
معیار Packed Planar Semi-Planar
تعداد Plane معمولاً یک چند Plane مستقل معمولاً دو
Channelها Interleaved جدا بخشی جدا، بخشی Interleaved
نمونه RGBA، YUY2 I420، YV12 NV12، P010
مدیریت Buffer ساده‌تر پیچیده‌تر متعادل
کاربرد رایج Rendering و Display Codec و پردازش مستقل Plane Video Engine و Zero-Copy

محاسبه آدرس Pixel در فرمت Packed

پس از یافتن آدرس Pixel، Offset هر Channel بر اساس ترتیب
تعریف‌شده فرمت محاسبه می‌شود.

محاسبه آدرس در فرمت Planar

در فرمت Planar، هر Plane دارای Base Address و Pitch
مخصوص خود است.

تقسیم مختصات بر دو به دلیل Subsampling افقی و عمودی
مؤلفه‌های رنگ در 4:2:0 است.

محاسبه آدرس Chroma در NV12

در NV21، Offset مؤلفه‌های U و V در Pair برعکس می‌شود.

Pitch مستقل هر Plane

نباید فرض کرد Pitch تمام Planeها با یکدیگر برابر است.
Driver یا API می‌تواند هر Plane را بر اساس نیاز سخت‌افزار
به‌طور جداگانه Align کند.

اطلاعات موردنیاز برای دسترسی به هر Plane
ویژگی وظیفه
Base Address آدرس شروع Plane
Row Pitch فاصله میان سطرها
Width تعداد Sampleهای افقی
Height تعداد سطرهای Plane
Sample Size اندازه هر عنصر حافظه

محاسبه اندازه تقریبی Buffer

در Buffer فشرده و بدون Padding، فرمت‌های هشت‌بیتی YUV
4:2:0 معمولاً به ازای هر Pixel منطقی حدود ۱٫۵ Byte داده
ذخیره می‌کنند.

اندازه Allocation واقعی می‌تواند به دلیل Pitch، Alignment،
Metadata یا Layout سخت‌افزاری بیشتر باشد.

تبدیل میان Pixel Formatها

تبدیل Pixel Format تنها جابه‌جایی Byteها نیست. در بسیاری
از موارد باید Chroma بازسازی، Matrix رنگ اعمال، Range
تبدیل یا Bit Depth تغییر داده شود.

Pixel Format و Zero-Copy

Zero-Copy تنها زمانی مؤثر است که تمام مراحل Pipeline
بتوانند Surface را با Format و Layout موجود مصرف کنند.

اگر Decoder خروجی NV12 تولید کند ولی فیلتر فقط RGBA را
بپذیرد، مرحله تبدیل Format و احتمالاً Buffer جدید لازم
خواهد بود.

خطاهای رایج Pixel Format

مشکلات متداول هنگام تفسیر Layout
خطا نشانه علت
جابه‌جایی U و V رنگ‌های غیرطبیعی اشتباه میان I420، YV12، NV12 یا NV21
Pitch مشترک فرض‌شده خرابی سطرهای Chroma نادیده‌گرفتن Pitch مستقل Plane
ابعاد اشتباه Chroma دسترسی خارج از Buffer نادیده‌گرفتن Subsampling
RGBA و BGRA اشتباه جابه‌جایی قرمز و آبی ترتیب Channel نادرست
P010 مانند 10-bit Packed تصویر تاریک یا خراب نادیده‌گرفتن Container شانزده‌بیتی


PERFORMANCE IMPACT

اثر Pixel Format Layout بر عملکرد

Memory Usage
زیاد
Conversion Cost
بسیار زیاد
Cache Behavior
زیاد
Zero-Copy Compatibility
بسیار زیاد


API MAPPING

Pixel Format در APIهای مختلف

FFmpeg
AVPixelFormat، data و linesize
Vulkan
VkFormat و Multi-Planar Image Format
Direct3D
DXGI_FORMAT_NV12، P010 و BGRA
CUDA
Linear Memory، Array، Surface و Texture View
VA-API
Surface Format و Image Format
OpenCV
Channel Layout و Color Conversion


M3


CHAPTER SUMMARY

خلاصه فصل

  • Channel مفهوم رنگی است، اما Plane ساختار حافظه‌ای است.
  • در Packed Format مؤلفه‌ها در یک Plane Interleaved هستند.
  • در Planar Format مؤلفه‌ها در Planeهای مستقل قرار می‌گیرند.
  • Semi-Planar ترکیبی از Plane مستقل و Channelهای Interleaved است.
  • NV12 دارای Y Plane و UV Plane است؛ NV21 ترتیب VU دارد.
  • P010 داده ده‌بیتی را معمولاً در عنصر شانزده‌بیتی نگهداری می‌کند.
  • هر Plane می‌تواند Base Address، Pitch و ابعاد مستقل داشته باشد.

واژه‌نامه فصل

Packedذخیره Channelها به‌صورت Interleaved در یک Plane.
Planarذخیره مؤلفه‌ها در Planeهای مستقل.
Semi-Planarترکیب Plane مستقل و Channelهای Interleaved.
Planeناحیه مستقل حافظه برای یک یا چند Channel.
Interleavedقرارگیری متناوب چند مؤلفه در یک Stream حافظه.
NV12فرمت YUV 4:2:0 هشت‌بیتی با Y Plane و UV Plane.
P010فرمت Semi-Planar ده‌بیتی با Storage شانزده‌بیتی.

فصل بعد

GPU MEMORY ARCHITECTURE

Tiled Image Layout

بررسی تقسیم تصویر به Tileهای کوچک، تفاوت چیدمان
خطی و دوبعدی، اثر Tile بر Cache Locality، Texture
Sampling، Rendering و کاهش ترافیک حافظه در GPU.


سطح فصل


پیشرفته


زمان مطالعه


حدود ۲۰ دقیقه


موضوع


GPU Image Memory Layout


نسخه


v1.0

پیش‌نیازهای فصل

  • شناخت Linear Layout
  • آشنایی با Pitch و Alignment
  • درک Cache Line و Spatial Locality

در این فصل یاد می‌گیرید

  • Tile چیست و چگونه در حافظه قرار می‌گیرد
  • چرا GPU چیدمان دوبعدی را ترجیح می‌دهد
  • Tile Size چگونه بر Cache اثر می‌گذارد
  • چرا دسترسی CPU به Tiled Image دشوارتر است

نقشه مفهومی فصل
Tiled Image Layout
Tile
Locality
Cache Line
Sampling
Rendering
Memory Traffic

Tiled Layout چیست؟

در Tiled Layout تصویر به بلوک‌های کوچک دوبعدی تقسیم
می‌شود و Pixelهای هر Tile نزدیک یکدیگر در حافظه قرار
می‌گیرند.

پس از ذخیره کامل یک Tile، داده‌های Tile بعدی در حافظه
نوشته می‌شوند.

تفاوت Linear و Tiled Layout

در Layout خطی، مجاورت حافظه عمدتاً افقی است؛ اما در
Tiled Layout، همسایگی افقی و عمودی داخل Tile بهتر حفظ
می‌شود.

چرا GPU از Tile استفاده می‌کند؟

بسیاری از عملیات تصویری به Pixelهای همسایه نیاز دارند.
Sampling، Blur، Scaling، Depth Test و Rendering معمولاً
تنها یک Pixel منفرد را نمی‌خوانند.

اگر همسایه‌های دوبعدی در حافظه نزدیک باشند، GPU می‌تواند
با تعداد Cache Line و Transaction کمتر به آن‌ها دسترسی
پیدا کند.

مزایای اصلی Tiled Layout
مزیت نتیجه
Locality دوبعدی دسترسی سریع‌تر به Pixelهای مجاور
Cache Hit بیشتر کاهش مراجعه مستقیم به VRAM
Transaction منظم‌تر استفاده بهتر از Memory Bus
مناسب Rendering پردازش Blockهای کوچک تصویر
مناسب Sampling دسترسی مؤثر به همسایگی دوبعدی

ساختار یک Tile

Tile معمولاً یک ناحیه مستطیلی از Pixelهاست. اندازه دقیق
آن به معماری GPU، Format، نوع Resource و Layout بستگی
دارد.

این Pixelها ممکن است در حافظه به ترتیب خطی داخل همان
Tile قرار گیرند یا از Swizzle داخلی استفاده کنند.

Tile Size

Tile Size ممکن است برحسب Pixel، Sample، Byte یا Block
تعریف شود.

اندازه Tile ثابت و عمومی نیست. یک GPU ممکن است برای
Color Buffer، Depth Buffer و Video Surface از Tileهای
متفاوت استفاده کند.

عوامل تعیین‌کننده اندازه Tile
عامل اثر
Bytes Per Pixel تغییر تعداد Pixel قابل نگهداری در Tile
Pixel Format تفاوت Packed، Planar و Compressed
Cache Line Size هماهنگی Tile با Transaction حافظه
Resource Type تفاوت Texture، Depth و Render Target
GPU Architecture تفاوت Layout میان سازندگان و نسل‌ها

آدرس‌دهی Pixel در Tiled Layout

در Layout خطی، آدرس Pixel با Pitch و Offset افقی محاسبه
می‌شود؛ اما در Layout کاشی‌بندی‌شده ابتدا باید Tile
شامل Pixel مشخص شود.

مرحله پنجم ممکن است ساده، Block-Linear، Swizzled یا
وابسته به معماری باشد.

محاسبه Tile Index

در ساده‌ترین مدل، Tileها به‌صورت ردیفی شماره‌گذاری
می‌شوند.

اثر Tile بر Cache Locality

فرض کنید یک فیلتر برای هر Pixel، همسایه بالا، پایین،
چپ و راست را بخواند.

در Linear Layout، همسایه عمودی ممکن است یک Pitch کامل
دورتر باشد؛ اما در Tiled Layout احتمال بیشتری دارد که
داخل همان Tile یا Cache Line نزدیک قرار گیرد.

رفتار Locality در دو Layout
نوع دسترسی Linear Tiled
همسایه افقی معمولاً نزدیک نزدیک
همسایه عمودی ممکن است دور باشد اغلب داخل Tile نزدیک است
بلوک دوبعدی Cache Lineهای بیشتر Cache Lineهای کمتر
دسترسی سطر کامل بسیار مناسب ممکن است پیچیده‌تر باشد

مثال فیلتر همسایگی

Blur، Sharpen، Edge Detection و بسیاری از عملیات Spatial
چنین الگویی دارند و از Locality دوبعدی سود می‌برند.

Tiled Layout و Texture Sampling

Bilinear Sampling برای تولید یک Sample معمولاً چند Pixel
مجاور را می‌خواند.

Bicubic و Anisotropic Sampling ممکن است ناحیه بزرگ‌تری
را بررسی کنند. چیدمان Tiled دسترسی به این همسایه‌ها را
برای Texture Unit مؤثرتر می‌کند.

Tiled Layout در Render Target

هنگام Rendering، Pixelهای نزدیک صفحه معمولاً در بازه
زمانی مشابه تولید یا به‌روزرسانی می‌شوند.

نگهداری آن‌ها در Tileهای مشترک باعث می‌شود عملیات Blend،
Depth Test، Color Write و Resolve با ترافیک حافظه کمتری
انجام شوند.

Depth و Stencil Tiling

Depth Buffer و Stencil Buffer نیز معمولاً از Layoutهای
Tiled استفاده می‌کنند.

دلیل آن این است که تست عمق برای بلوک‌های نزدیک Pixelها
انجام می‌شود و دسترسی دوبعدی منظم اهمیت زیادی دارد.

مزایای Tiling برای Depth و Stencil
مزیت نتیجه
دسترسی Block-Based تست سریع‌تر نواحی نزدیک
Compression بهتر کاهش ترافیک Depth Buffer
Early-Z ردکردن Pixelهای پنهان زودتر
Cache Reuse استفاده دوباره از داده همان Tile

Tile Boundary

وقتی یک عملیات به Pixelهایی در دو Tile متفاوت نیاز داشته
باشد، GPU ممکن است مجبور شود Cache Line یا Tile دیگری
را نیز بارگذاری کند.

طراحی Tile Size و Cache تلاش می‌کند هزینه این مرزها را
محدود کند، اما آن را کاملاً حذف نمی‌کند.

Partial Tile

اگر عرض یا ارتفاع تصویر مضرب اندازه Tile نباشد، Tileهای
لبه تصویر کامل پر نمی‌شوند.

Driver یا سخت‌افزار ممکن است فضای اضافی برای تکمیل
Alignment Tile رزرو کند.

اندازه Allocation در Tiled Layout

اندازه واقعی Resource ممکن است از حاصل‌ضرب ساده Width،
Height و Bytes Per Pixel بیشتر باشد.

Padding سطر، Padding Tile، Metadata، Compression Surface
و Alignment کلی Allocation می‌توانند فضای بیشتری مصرف
کنند.

اجزای احتمالی Allocation
بخش توضیح
Pixel Data داده اصلی تصویر
Tile Padding فضای تکمیل Tileهای لبه
Row Alignment هماهنگی ردیف Tileها
Compression Metadata اطلاعات فشرده‌سازی سطحی
Allocation Alignment هم‌ترازی کل Resource

دسترسی CPU به تصویر Tiled

CPU معمولاً انتظار دارد تصویر به‌صورت Linear و با Pitch
مشخص در حافظه قرار گرفته باشد.

اگر Resource دارای Layout اختصاصی GPU باشد، CPU نمی‌تواند
همیشه Byteها را مستقیماً به‌عنوان سطرهای تصویر تفسیر کند.

در این حالت معمولاً Resource باید به Staging Buffer خطی
کپی یا Resolve شود.

Display Engine و Layout تصویر

Display Engine تنها Layoutهایی را می‌تواند مستقیماً
Scanout کند که سخت‌افزار و Driver پشتیبانی کنند.

بعضی Surfaceها باید پیش از نمایش Resolve، Convert یا به
Layout سازگار با Scanout منتقل شوند.

Tiling در Video Surface

Surfaceهای Decode و Encode نیز ممکن است از Layoutهای
Tiled یا Block-Based اختصاصی استفاده کنند.

Video Engine، Shader و Encoder باید برای Zero-Copy از
Layout و Modifier سازگار استفاده کنند.

ارتباط Tiling و Compression

بسیاری از فناوری‌های فشرده‌سازی Frame Buffer یا Color
Surface بر پایه Blockها و Tileها عمل می‌کنند.

اگر یک Tile دارای رنگ یا الگوی قابل پیش‌بینی باشد، ممکن
است به‌جای ذخیره تمام Pixelها، Metadata فشرده‌تری ذخیره
شود.

Layout Modifier چیست؟

در بعضی APIها و سیستم‌عامل‌ها، Pixel Format به‌تنهایی
برای توصیف Resource کافی نیست.

Modifier اطلاعاتی مانند Tiling، Compression و سازمان‌دهی
اختصاصی حافظه را مشخص می‌کند.

تفاوت Format و Modifier
ویژگی Format Modifier
مؤلفه‌های رنگ مشخص می‌کند معمولاً خیر
Bit Depth مشخص می‌کند خیر
Tiling همیشه کافی نیست مشخص می‌کند
Compression معمولاً مشخص نمی‌کند ممکن است مشخص کند
Vendor Layout خیر بله

اشتباهات رایج

خطاهای متداول در تفسیر Tiled Resource
اشتباه پیامد علت
تفسیر مستقیم به‌عنوان Linear تصویر کاملاً خراب نادیده‌گرفتن Tile Addressing
محاسبه اندازه با Width × Height Allocation ناکافی نادیده‌گرفتن Padding و Metadata
یکسان فرض‌کردن Layout سازندگان ناسازگاری Resource وابستگی Tiling به معماری
اشتراک فقط بر اساس Format خطای Import یا نمایش نادرست نادیده‌گرفتن Modifier
CPU Mapping مستقیم داده غیرقابل تفسیر نبود Staging یا Detiling


PERFORMANCE IMPACT

اثر Tiled Layout بر عملکرد

Cache Locality
بسیار زیاد
Texture Sampling
بسیار زیاد
Memory Bandwidth
زیاد
CPU Accessibility
کمتر


API MAPPING

Tiled Layout در APIهای مختلف

Vulkan
Optimal Tiling و Linear Tiling
Direct3D 12
Texture Layout و Tiled Resources
OpenGL
Layout داخلی مدیریت‌شده توسط Driver
Metal
Private Texture و Storage Mode
DRM / Linux
Format Modifier و DMA-BUF
CUDA
CUDA Array و Texture / Surface Object


M4


CHAPTER SUMMARY

خلاصه فصل

  • Tiled Layout تصویر را به بلوک‌های دوبعدی کوچک تقسیم می‌کند.
  • Pixelهای نزدیک دوبعدی در حافظه نزدیک‌تر قرار می‌گیرند.
  • Tiling باعث افزایش Cache Hit و کاهش ترافیک VRAM می‌شود.
  • Tile Size به Format، معماری و نوع Resource وابسته است.
  • CPU معمولاً برای خواندن Tiled Image به Staging Buffer نیاز دارد.
  • Format یکسان به معنی Layout یا Modifier یکسان نیست.
  • Compression و Render Targetها معمولاً ارتباط نزدیکی با Tiling دارند.

واژه‌نامه فصل

Tileبلوک دوبعدی کوچک از Pixelها یا Sampleها.
Tiled Layoutچیدمان تصویر بر اساس Tileهای دوبعدی.
Tile Boundaryمرز میان دو Tile مجاور.
Partial TileTile ناقص در لبه Resource.
Detilingتبدیل Layout کاشی‌بندی‌شده به Layout خطی.
Modifierتوصیف تکمیلی Layout، Tiling یا Compression.

فصل بعد

GPU MEMORY ARCHITECTURE

Block Linear Layout

بررسی چیدمان سلسله‌مراتبی تصویر در Blockهای حافظه،
مفهوم GOB و Block Height، تفاوت Block Linear با
Tiled ساده و نقش این Layout در Texture، Video Surface،
Decode، Encode و مسیرهای Zero-Copy.


سطح فصل


پیشرفته


زمان مطالعه


حدود ۲۲ دقیقه


موضوع


Hierarchical Image Layout


نسخه


v1.0

پیش‌نیازهای فصل

  • شناخت Linear و Tiled Layout
  • آشنایی با Pitch و Alignment
  • درک Cache Line و Locality دوبعدی
  • شناخت Planeهای فرمت‌های ویدئویی

در این فصل یاد می‌گیرید

  • Block Linear چه تفاوتی با Tiled ساده دارد
  • GOB و Block Height چه نقشی دارند
  • چرا آدرس‌دهی آن سلسله‌مراتبی است
  • چرا Layout دقیق نباید از روی Format حدس زده شود

نقشه مفهومی فصل
Block Linear Layout
GOB
Block Height
Block Address
Cache Locality
Video Surface
Interoperability

Block Linear Layout چیست؟

Block Linear نوعی Layout کاشی‌بندی‌شده و سلسله‌مراتبی
است که تصویر را ابتدا به Blockهای دوبعدی تقسیم می‌کند
و سپس داده‌های هر Block را با ترتیب داخلی مشخصی در
حافظه قرار می‌دهد.

برخلاف Linear Layout، یک سطر کامل تصویر الزاماً به‌صورت
پیوسته در حافظه قرار ندارد. بخشی از سطر در یک Block و
بخش بعدی آن در Block دیگری ذخیره می‌شود.

مقایسه Linear، Tiled و Block Linear

تفاوت ساختارهای اصلی حافظه تصویر
معیار Linear Tiled Block Linear
چیدمان اصلی سطر به سطر Tileهای دوبعدی Blockهای دارای زیرساختار داخلی
آدرس‌دهی ساده بر اساس Tile سلسله‌مراتبی
Locality دوبعدی محدود زیاد زیاد و معماری‌محور
دسترسی مستقیم CPU آسان محدود معمولاً نامناسب
کاربرد رایج Staging و CPU Mapping Texture و Rendering Surfaceهای بهینه GPU و Video Engine

ساختار سلسله‌مراتبی

در یک مدل ساده، تصویر ابتدا به Blockهای بزرگ‌تر و هر
Block به واحدهای کوچک‌تر تقسیم می‌شود.

نام، اندازه و ترتیب دقیق این لایه‌ها به معماری، نسل GPU،
Pixel Format و نوع Resource وابسته است.

GOB یا Group of Bytes

در برخی مستندات معماری NVIDIA، واحدهای داخلی Block Linear
با عنوان
Group of Bytes یا GOB
توصیف می‌شوند.

GOB را می‌توان یک واحد کوچک سازمان‌دهی حافظه دانست که
چندین Sample یا Pixel را در یک ساختار دوبعدی داخلی
گروه‌بندی می‌کند.

نمایش مفهومی GOB

Block Height چیست؟

Block Height مشخص می‌کند چند واحد داخلی مانند GOB در
جهت عمودی برای تشکیل یک Block بزرگ‌تر گروه‌بندی شوند.

افزایش Block Height باعث بلندترشدن ناحیه دوبعدی هر Block
می‌شود و نحوه حرکت از یک Block به Block بعدی را تغییر
می‌دهد.

اثر Block Height

نتایج تغییر Block Height
ویژگی Block کوتاه‌تر Block بلندتر
ناحیه دوبعدی Block کوچک‌تر بزرگ‌تر
تعداد Blockهای عمودی بیشتر کمتر
Padding لبه ممکن است کمتر باشد ممکن است بیشتر شود
Locality مناسب نواحی کوچک‌تر مناسب دسترسی عمودی گسترده‌تر
آدرس‌دهی وابسته به Blockهای بیشتر وابسته به زیرواحدهای بیشتر در هر Block

آدرس‌دهی در Block Linear

برای یافتن آدرس یک Pixel، تنها استفاده از Row Pitch
کافی نیست. ابتدا باید Block شامل Pixel، سپس واحد داخلی
Block و در نهایت Offset محلی Sample تعیین شود.

فرمول دقیق آدرس‌دهی باید از API، Driver یا مستندات
همان پلتفرم دریافت شود.

مدل مفهومی محاسبه آدرس

این رابطه فقط ساختار منطقی محاسبه را نشان می‌دهد و
جایگزین فرمول اختصاصی سخت‌افزار نیست.

مفهوم Pitch در Block Linear

در Block Linear ممکن است مقداری با عنوان Pitch یا
Stride وجود داشته باشد، اما این مقدار الزاماً فاصله
مستقیم میان دو سطر Pixel نیست.

Pitch می‌تواند فاصله میان ردیف‌های Block، پهنای
Allocation هم‌تراز یا پارامتری برای محاسبه آدرس داخلی
باشد.

Layout مستقل Planeها

در Surfaceهای چند Plane مانند NV12 یا P010، هر Plane
می‌تواند ابعاد، Offset، Pitch، Alignment و Block Height
مستقل داشته باشد.

ویژگی‌های مستقل هر Plane
ویژگی Y Plane UV Plane
Resolution کامل وابسته به Subsampling
Base Offset مستقل مستقل
Pitch ممکن است متفاوت باشد ممکن است متفاوت باشد
Block Height وابسته به Allocation می‌تواند متفاوت باشد
Padding مستقل مستقل

Block Linear در Pipeline ویدئو

Video Decoder می‌تواند Frame را مستقیماً در Surface
بهینه GPU تولید کند. سپس Video Processor، Compute
Shader یا Encoder همان Surface را مصرف می‌کنند.

این مسیر زمانی Zero-Copy باقی می‌ماند که تمام واحدها
Format و Layout واقعی Surface را پشتیبانی کنند.

تبدیل Block Linear و Pitch Linear

برای دسترسی مستقیم CPU، ذخیره فایل یا استفاده در
نرم‌افزاری که Layout اختصاصی GPU را نمی‌شناسد، معمولاً
باید Surface به Layout خطی تبدیل شود.

این تبدیل ممکن است Detiling، تغییر Alignment یا
تبدیل Pixel Format را نیز شامل شود.

Block Linear و Zero-Copy

اشتراک یک Buffer تنها با انتقال Handle حافظه کامل
نمی‌شود. مصرف‌کننده باید اطلاعات Layout، Planeها،
Offsetها، Pitchها و Modifierهای Resource را نیز دریافت
کند.

دسترسی CPU

Block Linear برای الگوی دسترسی GPU طراحی شده و معمولاً
برای پیمایش مستقیم سطر‌به‌سطر توسط CPU مناسب نیست.

حتی اگر CPU بتواند Allocation را Map کند، داده خام
الزاماً شکل قابل‌مشاهده تصویر را ندارد.

روش‌های دسترسی CPU به Surface
روش وضعیت
Map مستقیم تنها در صورت پشتیبانی و شناخت Layout
Copy به Staging Buffer روش رایج و قابل‌اعتماد
GPU Detiling تبدیل سریع‌تر با Engine یا Shader
Software Detiling پیچیده و وابسته به جزئیات معماری

اندازه واقعی Allocation

اندازه Block Linear Resource از اندازه منطقی تصویر
بیشتر است؛ زیرا عرض، ارتفاع، Planeها و Blockها باید
بر اساس محدودیت‌های سخت‌افزار Align شوند.

عوامل افزایش اندازه Allocation
عامل اثر
Block Padding تکمیل Blockهای لبه تصویر
Plane Alignment هم‌ترازی شروع هر Plane
Block Height گردکردن ارتفاع Plane
Metadata اطلاعات Compression یا Surface
Allocation Alignment هم‌ترازی کل حافظه

اشتباهات رایج

خطاهای متداول در کار با Block Linear
اشتباه پیامد راه صحیح
تفسیر به‌عنوان Linear تصویر کاملاً درهم‌ریخته استفاده از Copy یا Layout Metadata
حدس Block Height آدرس‌دهی نادرست دریافت مقدار از API یا Driver
یکسان‌فرض‌کردن Planeها خرابی Chroma بررسی مستقل هر Plane
اشتراک تنها با Pixel Format ناسازگاری Interop انتقال Modifier و Layout
محاسبه ساده اندازه Buffer Allocation ناکافی استفاده از اندازه اعلام‌شده API


PERFORMANCE IMPACT

اثر Block Linear بر عملکرد

GPU Locality
بسیار زیاد
Video Throughput
زیاد
Zero-Copy Potential
بسیار زیاد
CPU Accessibility
کم


API MAPPING

Block Linear در APIها و Frameworkها

NvMedia
Surface Layout و Video Surface
NvSciBuf
Image Attributes و Plane Layout
CUDA
Array، Surface و External Memory Interop
EGL
Image Interoperability میان Engineها
DRM / DMA-BUF
Format Modifier و Buffer Sharing
V4L2
Multi-Planar Video Buffer و Memory Type


M5


CHAPTER SUMMARY

خلاصه فصل

  • Block Linear یک Layout دوبعدی و سلسله‌مراتبی است.
  • داده داخل Blockها و واحدهای کوچک‌تر سازمان‌دهی می‌شود.
  • Block Height آرایش عمودی واحدهای داخلی Block را کنترل می‌کند.
  • Pitch در این Layout الزاماً فاصله دو سطر Pixel نیست.
  • Planeهای یک Surface می‌توانند Layout مستقل داشته باشند.
  • CPU معمولاً برای خواندن Surface به تبدیل Pitch Linear نیاز دارد.
  • Zero-Copy به سازگاری Format، Layout و Metadata وابسته است.

واژه‌نامه فصل

Block Linearچیدمان سلسله‌مراتبی داده در Blockهای دوبعدی.
GOBواحد داخلی گروه‌بندی Byteها در برخی معماری‌ها.
Block Heightتعداد واحدهای عمودی تشکیل‌دهنده یک Block.
Pitch Linearچیدمان سطر‌به‌سطر همراه با Pitch مشخص.
Detilingتبدیل Layout بلوکی یا Tiled به Layout خطی.
Surface Metadataاطلاعات لازم برای تفسیر Format و Layout حافظه.

فصل بعد

GPU MEMORY ARCHITECTURE

Swizzled Image Layout

بررسی تکنیک Swizzling، مفهوم Morton (Z-Order)،
نحوه جابه‌جایی بیت‌های مختصات، حفظ Spatial Locality،
تفاوت آن با Tiled و Block Linear و تأثیر آن بر
Texture Cache و Sampling.

نقشه مفهومی فصل
Swizzled Layout
Morton Order
Bit Interleaving
Locality
Texture Cache
Sampling
GPU Memory

Swizzling چیست؟

Swizzling روشی برای سازمان‌دهی حافظه است که در آن
ترتیب ذخیره Pixelها از ترتیب معمول سطر به سطر
(Linear) پیروی نمی‌کند.

هدف این روش نزدیک نگه داشتن Pixelهایی است که
در فضای دوبعدی تصویر به یکدیگر نزدیک هستند.

چرا Swizzle استفاده می‌شود؟

هنگام Texture Sampling،
GPU معمولاً فقط یک Pixel را
نمی‌خواند.

Bilinear،
Trilinear،
Anisotropic،
Blur،
Shadow Sampling
و بسیاری از الگوریتم‌ها
چندین Pixel همسایه را
به صورت همزمان نیاز دارند.

اگر این Pixelها در حافظه
نیز نزدیک باشند،
تعداد Cache Miss
به شدت کاهش پیدا می‌کند.

مقایسه Linear و Swizzled



Linear

A B C D
E F G H
I J K L
M N O P


Memory

A B C D E F G H I J K L ...


Swizzled

A B
E F

C D
G H

I J
M N

K L
O P

در Swizzle،
همسایگی دوبعدی
اهمیت بیشتری از
ترتیب خطی حافظه دارد.

Morton Order (Z-Order)

مشهورترین الگوریتم Swizzle،
Morton Order
یا Z-Order Curve است.

در این روش
بیت‌های X و Y
در هم تنیده
(Interleave)
می‌شوند.



X = x2 x1 x0

Y = y2 y1 y0


Morton Index

y2 x2 y1 x1 y0 x0

این کار باعث می‌شود
Pixelهای مجاور
معمولاً آدرس‌های نزدیک‌تری
داشته باشند.

Spatial Locality

Spatial Locality
یعنی داده‌هایی که
در فضای تصویر
به یکدیگر نزدیک‌اند،
در حافظه نیز
فاصله کمی داشته باشند.

Swizzle
دقیقاً برای
بهبود همین ویژگی
طراحی شده است.

تفاوت Swizzle و Tile

ویژگی Tiled Swizzled
واحد اصلی Tile Bit Mapping
آدرس‌دهی Tile سپس Offset Interleaved Bits
Locality زیاد بسیار زیاد
پیچیدگی کمتر بیشتر

تفاوت Swizzle و Block Linear

Block Linear
معمولاً ابتدا تصویر را
به Block تقسیم می‌کند
و سپس داخل هر Block
آرایش خاصی دارد.

اما Swizzle
معمولاً نگاشت مختصات
را مستقیماً تغییر می‌دهد.

اثر بر Texture Cache

هنگام Bilinear Sampling،
چهار Pixel مجاور
اغلب داخل همان
Cache Line
قرار می‌گیرند.

بنابراین تعداد Transaction
حافظه کاهش پیدا می‌کند.

اشتباهات رایج

اشتباه پیامد
فرض کردن Swizzle
مانند Linear
تصویر خراب می‌شود.
یکسان فرض کردن
همه GPUها
عدم سازگاری
نادیده گرفتن
Layout Modifier
شکست Interop


UNDER THE HOOD

Swizzle در داخل GPU چگونه عمل می‌کند؟

برنامه‌نویس معمولاً یک Texture یا Image منطقی می‌بیند؛
اما GPU باید مختصات دوبعدی را به آدرس واقعی حافظه تبدیل
کند. این تبدیل ممکن است شامل Tile، Swizzle، Bit
Interleaving، Bank Selection و محاسبه Offset داخلی باشد.


01

Behind the Abstraction

APIهایی مانند Vulkan و Direct3D معمولاً جزئیات کامل
ترتیب Byteها را پنهان می‌کنند. برنامه فقط Image،
Format، Usage و Layout منطقی را تعیین می‌کند و Driver
سازمان‌دهی فیزیکی مناسب را انتخاب می‌کند.


02

Address Generation

Texture Unit مختصات X و Y را دریافت کرده و با استفاده
از منطق Address Generator، Tile، Block و Offset داخلی
Sample را محاسبه می‌کند.


03

چرا Morton خالص همیشه استفاده نمی‌شود؟

Morton Order دوبعدی Locality مناسبی دارد، اما الزاماً
با ساختار Memory Channel، Cache Line، Compression Block
یا Burst سخت‌افزار هماهنگ نیست.

به همین دلیل GPU ممکن است از Morton اصلاح‌شده، Swizzle
چندمرحله‌ای یا ترکیب Tile و Bit Mapping استفاده کند.


04

Cache Line Mapping

هدف فقط نزدیک‌کردن Pixelها نیست؛ داده باید به شکلی
توزیع شود که Texture Unit بتواند یک ناحیه دوبعدی را
با تعداد کمی Cache Line و Transaction حافظه دریافت
کند.

رابطه الگوی دسترسی با Swizzle
الگوی دسترسی هدف Layout
Bilinear Sampling قرارگیری چهار Sample نزدیک یکدیگر
Mipmap Sampling دسترسی سریع به سطح و Tile مناسب
Anisotropic Sampling کاهش Transaction برای مسیر گسترده‌تر
Render Target Write گروه‌بندی Pixelهای مجاور در Block

05

تعامل با Compression

Swizzle باید با اندازه Blockهای فشرده‌سازی هماهنگ
باشد. اگر Metadata و Pixel Data از Layoutهای متفاوتی
استفاده کنند، Address Generator باید هر دو ساختار را
هم‌زمان مدیریت کند.


06

Practical Impact

  • Buffer اشتراکی باید Modifier صحیح داشته باشد.
  • Map کردن حافظه به معنی Linear بودن داده نیست.
  • Detiling نرم‌افزاری به اطلاعات معماری نیاز دارد.
  • تبدیل Layout ممکن است از تبدیل Format پرهزینه‌تر باشد.
  • Zero-Copy بدون توافق روی Layout کامل نیست.

M7

GPU MEMORY ARCHITECTURE


Frame Buffer Compression و Compression Layout

بررسی فشرده‌سازی داخلی Surfaceهای GPU، تفاوت آن با
Codecهای ویدئویی، نقش Metadata، فشرده‌سازی Color و
Depth، اثر آن بر پهنای باند حافظه و شرایطی که باعث
Resolve یا Decompression یک Resource می‌شوند.


سطح فصل


پیشرفته

زمان مطالعه


حدود ۲۵ دقیقه

موضوع


Memory Bandwidth Optimization

نسخه


v1.0


پیش‌نیازهای فصل

  • شناخت Tiled و Block Linear Layout
  • آشنایی با Cache و Memory Bandwidth
  • درک Frame Buffer و Render Target
  • شناخت Pixel Format و Plane


در این فصل یاد می‌گیرید

  • Frame Buffer Compression چیست
  • چرا با Video Codec متفاوت است
  • Metadata Surface چه نقشی دارد
  • چه زمانی Resource باید Resolve شود
  • Compression چگونه پهنای باند را کاهش می‌دهد

نقشه مفهومی فصل
Frame Buffer Compression
Pixel Data
Metadata
Compression Block

Bandwidth
Resolve
Interoperability

Frame Buffer Compression چیست؟

Frame Buffer Compression روشی برای کاهش مقدار داده‌ای
است که میان GPU، Cache و VRAM جابه‌جا می‌شود.

GPU به‌جای نوشتن و خواندن تمام Byteهای یک Tile، تلاش
می‌کند الگوی آن Tile را با داده کمتر و Metadata مناسب
نمایش دهد.

تفاوت Frame Buffer Compression و Video Codec

مقایسه فشرده‌سازی حافظه GPU و Codec ویدئویی
معیار Frame Buffer Compression Video Codec
هدف کاهش ترافیک داخلی حافظه کاهش حجم فایل یا Bitstream
محل استفاده داخل GPU و VRAM ذخیره‌سازی و انتقال ویدئو
Latency بسیار پایین بیشتر و وابسته به Codec
نوع فشرده‌سازی معمولاً Lossless اغلب Lossy یا ترکیبی
خروجی قابل حمل معمولاً خیر بله
وابستگی به GPU زیاد مبتنی بر استاندارد Codec

مسیر داده در یک Surface فشرده

هنگام خواندن Resource، سخت‌افزار Metadata را بررسی
می‌کند تا مشخص شود Tile به‌صورت فشرده، یکنواخت یا کامل
ذخیره شده است.

Compression Block

فشرده‌سازی معمولاً روی گروهی از Pixelها یا Sampleها
انجام می‌شود، نه روی کل تصویر به‌صورت یکجا.

این گروه می‌تواند با Tile، Cache Block یا واحد داخلی
Memory Controller هماهنگ باشد.

Color Compression

Color Compression برای Render Targetها، Textureها و
Frame Bufferهای رنگی استفاده می‌شود.

اگر Pixelهای یک Block مشابه یا قابل پیش‌بینی باشند،
GPU می‌تواند آن‌ها را با Base Color، Deltaها یا یک حالت
خاص مانند Uniform Block نمایش دهد.

Delta Color Compression

در Delta Color Compression، سخت‌افزار یک مقدار پایه
برای Block انتخاب می‌کند و تفاوت Pixelهای دیگر نسبت به
آن را ذخیره می‌کند.

اگر Deltaها کوچک باشند، تعداد Bit کمتری برای ذخیره
Block لازم خواهد بود.

Fast Clear و Clear Color

هنگام پاک‌کردن یک Render Target، GPU ممکن است به‌جای
نوشتن رنگ جدید در تمام Pixelها، تنها Metadata آن Surface
را به‌روزرسانی کند.

در خواندن بعدی، سخت‌افزار می‌داند که آن Block باید مانند
یک ناحیه یکنواخت با Clear Color تفسیر شود.

Depth و Stencil Compression

Depth Bufferها نیز معمولاً فشرده می‌شوند، زیرا مقادیر
عمق در نواحی مجاور اغلب رابطه قابل پیش‌بینی دارند.

مزایای فشرده‌سازی Depth و Stencil
اثر نتیجه
ترافیک کمتر کاهش خواندن و نوشتن Depth
Early-Z مؤثرتر رد سریع‌تر Geometry پنهان
Cache Hit بیشتر نگهداری Blockهای بیشتری در Cache
Fast Clear پاک‌سازی سریع Depth Buffer

Metadata Surface چیست؟

Metadata Surface ناحیه‌ای جدا یا همراه Resource است که
وضعیت فشرده‌سازی Blockها را نگهداری می‌کند.

اطلاعات احتمالی Metadata
اطلاعات کاربرد
Compression State فشرده یا Uncompressed بودن Block
Clear State استفاده از Clear Color
Compression Mode روش تفسیر Block
Base / Delta Data بازسازی Pixelهای فشرده
Validity معتبر بودن Metadata

Resolve و Decompression

اگر Engine یا دستگاه مقصد نتواند Layout فشرده را مستقیماً
مصرف کند، Resource باید به حالت سازگار تبدیل شود.

این عملیات ممکن است Resolve، Decompress، Expand یا
Materialize نامیده شود.

چه زمانی Resolve لازم می‌شود؟

دلایل رایج Resolve شدن Resource
وضعیت علت
CPU Readback CPU Layout فشرده را نمی‌شناسد
API Interop مصرف‌کننده Modifier را پشتیبانی نمی‌کند
Display Scanout Display Engine Layout را نمی‌پذیرد
Video Encode Encoder به Surface سازگار دیگری نیاز دارد
Copy خاص Copy Engine قادر به حفظ Compression نیست
Partial Update تغییر Block با حالت فشرده فعلی ناسازگار است

تغییر وضعیت Compression

Driver و Command Processor باید این تغییر وضعیت‌ها را
با Barrier و Metadata Update مناسب مدیریت کنند.

Compression و Zero-Copy

یک Surface فشرده تنها زمانی می‌تواند بدون Copy میان
Engineها یا APIها به اشتراک گذاشته شود که تمام طرف‌ها
Format، Modifier، Compression State و Metadata آن را
پشتیبانی کنند.


PERFORMANCE IMPACT

اثر Frame Buffer Compression بر عملکرد

Memory Bandwidth
بسیار زیاد

Power Efficiency
زیاد

Cache Capacity
زیاد

Interop Complexity
بسیار زیاد


API MAPPING

Compression Surface در APIها

Vulkan

Image Tiling، Layout Transition و Modifier
Direct3D 12

Resource State، Render Target و Resolve
DRM / DMA-BUF

Format Modifier و اشتراک Layout
Metal

Private Texture و مدیریت داخلی Compression
CUDA Interop

External Memory و Array-Compatible Resource
Display Pipeline

Scanout Modifier و Plane Compatibility


UNDER THE HOOD

سخت‌افزار چگونه Surface فشرده را مدیریت می‌کند؟

Shader معمولاً تفاوتی میان Pixel فشرده و غیر‌فشرده
مشاهده نمی‌کند. Cache Controller و Compression Unit
جزئیات بازسازی یا ذخیره Block را در پشت صحنه انجام
می‌دهند.


01

Behind the Abstraction

برنامه یک Image یا Render Target می‌بیند، اما
Driver ممکن است علاوه بر Pixel Data، Allocation
دیگری برای Metadata و State Tracking ایجاد کند.


02

Read Path

Texture Request
      │
      ▼
Metadata Lookup
      │
      ├── Uncompressed ─► Read Pixels
      │
      └── Compressed ───► Decode Block
                              │
                              ▼
                           Cache


03

Write Path

هنگام پایان Write، سخت‌افزار بررسی می‌کند که آیا
Block با یکی از حالت‌های Compression قابل نمایش
است یا باید به‌صورت کامل نوشته شود.


04

Why This Design?

انتقال داده از VRAM یکی از پرهزینه‌ترین عملیات
GPU است. افزودن منطق Compression می‌تواند از نظر
انرژی و پهنای باند بسیار ارزان‌تر از افزایش دائمی
Memory Bus باشد.


05

Hidden Resolve

Profiler ممکن است عملیات Resolve یا Copy پنهانی
را نشان دهد که هنگام تغییر Usage، Export یا
دسترسی Engine ناسازگار ایجاد شده است.


06

Practical Impact

  • Resource Stateها را دقیق مدیریت کنید.
  • Modifier را همراه Format منتقل کنید.
  • Copyهای پنهان را با Profiler بررسی کنید.
  • از Mapping مستقیم Surface به CPU پرهیز کنید.
  • Interop را روی سخت‌افزار واقعی آزمایش کنید.

اشتباهات رایج

خطاهای رایج در Resourceهای فشرده
اشتباه پیامد راه صحیح
فرض Lossy بودن برداشت اشتباه از کیفیت تصویر تفکیک Compression داخلی از Codec
نادیده‌گرفتن Metadata تفسیر نادرست Resource انتقال کامل Layout Information
فرض Zero-Copy واقعی Copy یا Resolve پنهان بررسی Timeline و Profiler
CPU Mapping مستقیم داده غیرقابل تفسیر استفاده از Staging Resource
تغییر State نامناسب Decompression اضافی مدیریت دقیق Resource Transition


M7


CHAPTER SUMMARY

خلاصه فصل

  • Frame Buffer Compression برای کاهش ترافیک VRAM
    استفاده می‌شود.
  • این روش با Codecهای ویدئویی متفاوت و معمولاً
    Lossless است.
  • فشرده‌سازی اغلب در سطح Block یا Tile انجام می‌شود.
  • Metadata وضعیت و روش بازسازی Block را نگهداری می‌کند.
  • Fast Clear می‌تواند از نوشتن کامل Surface جلوگیری کند.
  • Engine ناسازگار ممکن است Resource را Resolve کند.
  • Zero-Copy واقعی به پشتیبانی کامل Compression و Modifier
    نیاز دارد.

واژه‌نامه فصل

Frame Buffer Compression
فشرده‌سازی داخلی و کم‌تأخیر Surfaceهای GPU.

Compression Metadata
اطلاعات لازم برای تعیین وضعیت و بازسازی Block فشرده.

Fast Clear
پاک‌سازی Surface با تغییر Metadata به‌جای نوشتن تمام Pixelها.

Resolve
تبدیل Resource به Layout یا حالت قابل استفاده برای مصرف‌کننده.

Delta Compression
ذخیره اختلاف Sampleها نسبت به یک مقدار پایه.

Compression State
وضعیت منطقی یک Block مانند فشرده، Clear یا Expanded.

M8

ENGINEERING REVIEW


مرور مهندسی Image Memory Layoutها

جمع‌بندی و مقایسه Linear، Pitch-Linear، Planar،
Tiled، Block Linear، Swizzled و Compression Layout
با تمرکز بر آدرس‌دهی، Cache Locality، دسترسی CPU،
Zero-Copy، پهنای باند حافظه و انتخاب Layout مناسب
برای کاربردهای واقعی.


سطح فصل


پیشرفته


زمان مطالعه


حدود ۳۰ دقیقه


نوع فصل


Reference و Decision Guide


نسخه


v1.0


پیش‌نیازهای این مرور

  • شناخت Linear و Pitch-Linear Layout
  • درک Plane، Pixel Format و Row Pitch
  • آشنایی با Tile، Block و Swizzle
  • شناخت Compression Metadata و Resolve


پس از این فصل می‌توانید

  • Layout مناسب هر Workload را انتخاب کنید
  • Copy و Resolve پنهان را بهتر تشخیص دهید
  • شرایط واقعی Zero-Copy را ارزیابی کنید
  • مشکلات ناشی از Format و Layout ناسازگار را تحلیل کنید

نقشه کلی تصمیم‌گیری
Image Resource
Format
Layout
Usage

CPU Access
GPU Performance
Interoperability

چرا انتخاب Layout مهم است؟

Pixel Format مشخص می‌کند چه داده‌ای ذخیره می‌شود؛ اما
Memory Layout مشخص می‌کند همان داده چگونه در حافظه
سازمان‌دهی و آدرس‌دهی شود.

ممکن است دو Resource هر دو فرمت NV12 یا RGBA داشته باشند،
اما یکی Linear، دیگری Tiled و سومی دارای Compression
Metadata باشد. این Resourceها از نظر معنای رنگ مشابه‌اند،
ولی از نظر تفسیر حافظه، قابلیت اشتراک و عملکرد یکسان نیستند.

جدول جامع مقایسه Layoutها

مقایسه مهندسی ساختارهای اصلی حافظه تصویر
Layout ساختار اصلی Locality دوبعدی دسترسی CPU کاربرد اصلی
Linear Byteهای پیوسته سطر‌به‌سطر کم بسیار آسان فایل، CPU و Buffer ساده
Pitch-Linear سطرهای دارای Padding کم تا متوسط آسان Staging، Copy و Mapping
Planar Planeهای مستقل وابسته به Layout هر Plane متوسط Video Codec و پردازش Channel
Tiled Tileهای دوبعدی زیاد محدود Texture و Render Target
Block Linear Blockهای سلسله‌مراتبی زیاد ضعیف Video Surface و GPU Engine
Swizzled نگاشت تغییر‌یافته مختصات بسیار زیاد ضعیف Texture Sampling و Cache
Compressed Pixel Data به‌همراه Metadata وابسته به Layout پایه معمولاً غیرمستقیم کاهش Bandwidth و Power

نمای مقایسه‌ای چیدمان‌ها

چه زمانی Linear یا Pitch-Linear انتخاب می‌شود؟

Linear Layout زمانی مناسب است که سادگی آدرس‌دهی، دسترسی
مستقیم CPU یا انتقال سطر‌به‌سطر مهم‌تر از Locality
دوبعدی GPU باشد.

موارد مناسب و نامناسب Linear Layout
سناریو مناسب بودن دلیل
CPU Readback بسیار مناسب پیمایش ساده سطرها
Staging Buffer بسیار مناسب انتقال منظم و قابل پیش‌بینی
File Encoding مناسب سازگار با Bufferهای نرم‌افزاری
Texture Sampling سنگین معمولاً نامناسب Locality عمودی ضعیف‌تر
Render Target پرترافیک معمولاً نامناسب ترافیک حافظه بیشتر

چه زمانی Tiled یا Swizzled مناسب‌تر است؟

زمانی که Workload مرتباً به ناحیه‌های دوبعدی، همسایه‌های
Pixel یا Sampleهای مجاور دسترسی دارد، Layoutهای Tiled و
Swizzled معمولاً عملکرد بهتری دارند.

Workloadهای مناسب Locality دوبعدی
Workload Layout مناسب علت
Bilinear Sampling Tiled یا Swizzled خواندن چند Sample مجاور
Blur و Sharpen Tiled استفاده از Neighborhood
Render Target Tiled و Compressed نوشتن Block-Based
Depth Buffer Tiled و Compressed Early-Z و Locality
Texture Mipmap Swizzled Locality در چند سطح Resolution

انتخاب Layout برای Video Surface

در Pipeline ویدئویی، انتخاب Layout معمولاً فقط بر اساس
سرعت Shader نیست. Decoder، Video Processor، Encoder،
Display Engine و API Interop نیز باید همان Surface را
پشتیبانی کنند.

ماتریس Format و Layout

Pixel Format و Memory Layout باید جداگانه بررسی شوند.
جدول زیر چند ترکیب رایج را نشان می‌دهد.

نمونه ترکیب‌های Format و Layout
Format Layout احتمالی کاربرد
RGBA8 Linear Readback و Upload
RGBA8 Tiled / Compressed Render Target و Texture
NV12 Pitch-Linear CPU Access یا نرم‌افزار ویدئویی
NV12 Block Linear Decode و Encode سخت‌افزاری
P010 Linear یا Block-Based HDR Video Pipeline
Depth Format Tiled و Compressed Depth Test و Early-Z

چک‌لیست واقعی Zero-Copy

وجود یک Allocation مشترک تنها یکی از شروط Zero-Copy
است. همه موارد زیر باید بررسی شوند.

شرایط لازم برای اشتراک واقعی Surface
شرط پرسش کنترلی
Pixel Format آیا همه Engineها Format را می‌پذیرند؟
Plane Layout آیا Planeها، Offsetها و Pitchها شناخته شده‌اند؟
Memory Layout آیا مصرف‌کننده Tiling یا Swizzle را پشتیبانی می‌کند؟
Modifier آیا Modifier دقیق منتقل شده است؟
Compression آیا Metadata و Compression State قابل مصرف‌اند؟
Synchronization آیا Producer و Consumer به‌درستی هماهنگ‌اند؟
Ownership آیا انتقال مالکیت Resource صحیح انجام شده است؟
Profiler Validation آیا Copy یا Resolve پنهان مشاهده نمی‌شود؟

راهنمای سریع انتخاب Layout


PERFORMANCE TRADE-OFFS

مقایسه اثر Layout بر سیستم

CPU Accessibility
Linear

2D Cache Locality
Swizzled

Video Engine Compatibility
Block-Based

Bandwidth Reduction
Compressed

الگوهای رایج خطا

تشخیص مشکلات متداول Layout
نشانه علت احتمالی بررسی لازم
تصویر مورب Pitch اشتباه Row Pitch واقعی
رنگ‌های جابه‌جا Plane یا Channel Order اشتباه Format و Chroma Order
تصویر کاملاً درهم تفسیر Tiled به‌عنوان Linear Modifier و Layout
Copy پنهان Interop ناسازگار Profiler و Resource Transition
Latency ناگهانی Resolve یا Decompression Timeline و Compression State
Crash یا Out-of-Bounds Allocation Size نادرست Plane Size، Alignment و Metadata


API MAPPING

Layout در APIهای مختلف

Vulkan

Linear Tiling، Optimal Tiling، Subresource Layout
و External Memory
Direct3D 12

RowPitch، Texture Resource، Resource State و Resolve
CUDA

Linear Memory، Pitched Memory، Array و Surface Object
FFmpeg

data، linesize و Hardware Frame Context
DRM / DMA-BUF

FourCC، Modifier، Plane Offset و Buffer Sharing
Metal

Texture Storage Mode، bytesPerRow و Private Resource


UNDER THE HOOD

چگونه Driver Layout نهایی را انتخاب می‌کند؟

برنامه معمولاً Usage و محدودیت‌های Resource را تعیین
می‌کند، اما Driver بر اساس معماری GPU، Engineهای
مصرف‌کننده، Alignment، Compression و قابلیت Interop
Layout فیزیکی را انتخاب می‌کند.


01

Usage Analysis

Driver بررسی می‌کند Resource برای Render، Sampling،
Copy، Video، Display یا CPU Mapping استفاده خواهد شد.


02

Capability Intersection

Layout باید در نقطه اشتراک قابلیت Engineهای مختلف
قرار گیرد؛ در غیر این صورت تبدیل یا Resource دوم
لازم خواهد بود.


03

Hidden Allocation

Driver ممکن است برای Metadata، Resolve Target،
Staging یا نسخه سازگار Display حافظه اضافی رزرو کند.


04

Layout Transition

Transition همیشه فقط تغییر وضعیت منطقی نیست؛ گاهی
باعث Flush، Decompression، Resolve یا Copy واقعی
داده می‌شود.


05

Architecture Dependency

Layout به نسل GPU و معماری وابسته است. الگوریتم
Detiling یا Swizzle یک دستگاه نباید برای دستگاه
دیگر فرض شود.


06

Practical Rule

  • اندازه Allocation را از API دریافت کنید.
  • Pitch و Offset را حدس نزنید.
  • Format را با Layout اشتباه نگیرید.
  • Modifier را هنگام Export منتقل کنید.
  • Zero-Copy را با Profiler تأیید کنید.


M8


KEY TAKEAWAYS

جمع‌بندی مهندسی

  • Linear Layout برای CPU ساده است، اما همیشه برای GPU
    بهترین Locality را ندارد.
  • Pitch بخشی از ساختار حافظه است و نباید از Width
    محاسبه یا حدس زده شود.
  • Planar بودن به تعداد Planeها مربوط است، نه به خطی
    یا Tiled بودن حافظه.
  • Tiled و Swizzled Layoutها دسترسی دوبعدی GPU را
    بهینه می‌کنند.
  • Block Linear معمولاً برای Engineهای سخت‌افزاری و
    Video Surfaceها مناسب است.
  • Compression Layout با Metadata همراه است و ممکن
    است هنگام Interop نیازمند Resolve باشد.
  • Zero-Copy واقعی به سازگاری Format، Layout،
    Modifier، Compression و Synchronization وابسته است.
  • Layout مناسب باید برای کل Pipeline انتخاب شود، نه
    فقط سریع‌ترین Engine منفرد.

واژه‌نامه مرور مهندسی

Memory Layout
روش سازمان‌دهی و آدرس‌دهی داده‌های Resource در حافظه.

Modifier
اطلاعات تکمیلی درباره Tiling، Compression یا Layout اختصاصی.

Pitch-Linear
چیدمان سطر‌به‌سطر با فاصله ثابت میان ابتدای سطرها.

Optimal Layout
Layout انتخاب‌شده برای عملکرد مناسب GPU، نه دسترسی مستقیم CPU.

Resolve
تبدیل Resource به حالت، Layout یا نمایش سازگارتر.

Layout Transition
تغییر وضعیت استفاده یا نمایش حافظه Resource میان عملیات.

Hidden Copy
انتقال داده‌ای که Driver بدون درخواست صریح برنامه انجام می‌دهد.

Capability Intersection
مجموعه Format و Layoutهایی که همه مصرف‌کنندگان Pipeline می‌پذیرند.

M9

GPU MEMORY ARCHITECTURE


Texture Cache و Texture Addressing

بررسی نحوه تبدیل مختصات Texture به آدرس حافظه،
نقش Texture Unit و Texture Cache، روش‌های Sampling،
Address Modeها، Mipmap، Cache Locality و عواملی که
باعث Cache Hit، Cache Miss یا افزایش ترافیک VRAM
می‌شوند.


سطح فصل


پیشرفته

زمان مطالعه


حدود ۳۰ دقیقه

موضوع


Texture Memory System

نسخه


v1.0


پیش‌نیازهای فصل

  • شناخت Tiled و Swizzled Layout
  • آشنایی با Cache Line و Spatial Locality
  • درک Texture، Pixel و Sample
  • شناخت مختصات دوبعدی و سه‌بعدی


در این فصل یاد می‌گیرید

  • Texture Unit چگونه آدرس تولید می‌کند
  • Texture Cache چه تفاوتی با Cache عمومی دارد
  • Bilinear و Trilinear چه داده‌هایی می‌خوانند
  • Address Mode چگونه مختصات خارج از محدوده را مدیریت می‌کند
  • چه الگوهایی باعث Cache Thrashing می‌شوند

نقشه مفهومی فصل
Texture Sampling
Coordinates
Addressing
Filtering

Texture Cache
Mipmap
Memory Layout

مسیر خواندن Texture

هنگام اجرای Shader، برنامه معمولاً آدرس Byteای Texture
را مستقیماً محاسبه نمی‌کند. Shader مختصات Texture را به
واحد Sampling می‌دهد و سخت‌افزار مراحل آدرس‌دهی، انتخاب
Mipmap، Filtering و Cache Lookup را انجام می‌دهد.

Texture Unit چیست؟

Texture Unit بخشی از GPU است که عملیات تخصصی خواندن و
Sampling از Textureها را انجام می‌دهد.

این واحد می‌تواند مختصات را تبدیل کند، Address Mode را
اعمال کند، Mip Level مناسب را انتخاب کند و چند Sample
مجاور را برای Filtering بخواند.

Texture Cache چیست؟

Texture Cache حافظه‌ای کوچک و سریع در نزدیکی واحدهای
Sampling است که Sampleهای اخیراً خوانده‌شده را نگهداری
می‌کند.

این Cache برای الگوهای دسترسی دوبعدی و سه‌بعدی Texture
بهینه شده و هدف آن کاهش تعداد مراجعه‌ها به L2 Cache و
VRAM است.

جایگاه Texture Cache در سلسله‌مراتب حافظه

ساختار دقیق Cache به معماری GPU بستگی دارد. در بعضی
معماری‌ها Texture Cache و L1 Cache مسیرهای جداگانه دارند
و در بعضی دیگر بخشی از ساختار Unified Cache هستند.

مختصات Normalized

بسیاری از APIهای گرافیکی Texture را با مختصات Normalized
نمونه‌برداری می‌کنند؛ یعنی معمولاً بازه صفر تا یک به عرض
و ارتفاع کامل Texture نگاشت می‌شود.

Texture Unit این مختصات را با توجه به ابعاد Mip Level
انتخاب‌شده به مختصات Sample یا Texel تبدیل می‌کند.

مختصات Integer و Texel Fetch

در بعضی عملیات، Shader به‌جای Sampling فیلترشده، یک
Texel مشخص را با مختصات صحیح می‌خواند.

این نوع دسترسی معمولاً برای جدول‌ها، Bufferهای دوبعدی،
داده‌های محاسباتی و خواندن دقیق بدون Filtering مناسب است.

مقایسه Sample و Texel Fetch
ویژگی Texture Sample Texel Fetch
مختصات اغلب Normalized معمولاً Integer
Filtering ممکن است اعمال شود معمولاً خیر
Mip Selection خودکار یا صریح اغلب صریح
کاربرد Rendering و Sampling دسترسی دقیق داده

Texture Address Mode

Address Mode مشخص می‌کند مختصاتی که خارج از محدوده
Texture قرار می‌گیرد چگونه تفسیر شود.

Address Modeهای رایج
Mode رفتار کاربرد
Clamp استفاده از نزدیک‌ترین لبه تصویر و Render Result
Repeat / Wrap تکرار Texture Material و Pattern
Mirrored Repeat تکرار آینه‌ای کاهش Seam در Pattern
Border Color بازگرداندن رنگ ثابت Shadow و Sampling کنترل‌شده
Clamp to Zero Sample خارج از محدوده برابر صفر پردازش داده و Mask

Clamp Addressing

مختصات کوچک‌تر از حداقل به لبه اول و مختصات بزرگ‌تر از
حداکثر به لبه آخر نگاشت می‌شوند.

Repeat و Wrap

در حالت Repeat، بخش کسری مختصات برای تکرار Texture
استفاده می‌شود.

این روش برای Materialهای تکرارشونده مانند سنگ، پارچه،
خاک و الگوهای سطحی کاربرد زیادی دارد.

Nearest Filtering

در Nearest Filtering تنها نزدیک‌ترین Texel به مختصات
Sampling خوانده می‌شود.

این روش سریع و دقیق است، اما هنگام بزرگ‌نمایی یا
کوچک‌نمایی ممکن است تصویر Blocky یا Aliased دیده شود.

Bilinear Filtering

Bilinear Filtering چهار Texel مجاور را می‌خواند و نتیجه
را بر اساس فاصله Sample از هر Texel ترکیب می‌کند.

به همین دلیل Locality دوبعدی و Tiled Layout برای
Texture Sampling اهمیت زیادی دارند.

Trilinear Filtering

Trilinear Filtering از Bilinear Sampling روی دو Mip
Level مجاور استفاده می‌کند و سپس نتایج آن‌ها را با
یکدیگر ترکیب می‌کند.

بنابراین یک Sample منطقی می‌تواند به چندین Fetch حافظه
در دو سطح مختلف Texture نیاز داشته باشد.

Anisotropic Filtering

وقتی Texture با زاویه شدید روی سطح نمایش داده می‌شود،
Footprint یک Pixel در فضای Texture دیگر تقریباً مربع
نیست و می‌تواند ناحیه‌ای کشیده را پوشش دهد.

Anisotropic Filtering چند Sample را در امتداد این ناحیه
کشیده می‌خواند تا جزئیات بهتر حفظ شوند.

این روش کیفیت بالاتری دارد، اما تعداد Fetchها و فشار
روی Texture Cache را افزایش می‌دهد.

Sample Footprint

Sample Footprint ناحیه‌ای از Texture است که برای تولید
یک Sample نهایی باید خوانده شود.

اندازه تقریبی Footprint در روش‌های Filtering
Filtering حداقل Sampleهای پایه ویژگی
Nearest یک Texel کمترین دسترسی حافظه
Bilinear چهار Texel Locality دوبعدی
Trilinear دو مجموعه Bilinear دو Mip Level
Anisotropic چندین Sample Footprint کشیده و متغیر

Mipmap و Texture Cache

Mipmap مجموعه‌ای از نسخه‌های کوچک‌تر Texture است که هر
سطح معمولاً نصف عرض و نصف ارتفاع سطح قبلی را دارد.

استفاده از Mip Level متناسب با اندازه نمایش، Footprint
حافظه و Cache Miss را کاهش می‌دهد.

Level of Detail یا LOD

Texture Unit بر اساس تغییرات مختصات Texture میان Pixelهای
مجاور، اندازه تقریبی Footprint را محاسبه و Mip Level مناسب
را انتخاب می‌کند.

Texture Cache Hit

Cache Hit زمانی رخ می‌دهد که Sampleهای موردنیاز از قبل
در Texture Cache موجود باشند.

عواملی که Cache Hit را افزایش می‌دهند
عامل اثر
مختصات نزدیک Threadها استفاده مشترک از Cache Line
Tiled یا Swizzled Layout Locality دوبعدی بهتر
Mip Level مناسب کاهش Footprint غیرضروری
Texture کوچک‌تر احتمال Resident ماندن بیشتر
Reuse زمانی استفاده مجدد از داده‌های تازه‌خوانده‌شده

Texture Cache Miss

Cache Miss زمانی رخ می‌دهد که داده موردنیاز در Cache
موجود نباشد و باید از سطح پایین‌تر حافظه خوانده شود.

دلایل رایج Texture Cache Miss
علت نتیجه
دسترسی تصادفی Cache Lineهای پراکنده
Texture بسیار بزرگ Working Set بزرگ‌تر از Cache
Mip Level نامناسب خواندن Resolution بیش‌ازحد
چند Texture هم‌زمان رقابت برای ظرفیت Cache
Anisotropy بالا Fetchهای بیشتر و پراکنده‌تر
Layout نامناسب Locality پایین‌تر

Texture Cache Thrashing

Cache Thrashing زمانی رخ می‌دهد که Working Set یا الگوی
دسترسی باعث شود داده‌ها پیش از استفاده مجدد مرتباً از
Cache خارج شوند.

این وضعیت باعث افزایش شدید ترافیک L2 و VRAM می‌شود،
حتی اگر GPU از نظر توان محاسباتی اشباع نشده باشد.

Coherence میان Threadها

اگر Threadهای یک Warp یا Wavefront مختصات نزدیک را
Sample کنند، درخواست‌های آن‌ها می‌توانند به Cache Lineها
و Transactionهای مشترک تبدیل شوند.

Divergent Texture Sampling

اگر Threadهای یک گروه از Textureهای متفاوت یا نواحی
بسیار دور Sample کنند، امکان اشتراک Cache Line کاهش
می‌یابد.

این حالت می‌تواند تعداد درخواست‌های مستقل حافظه را
افزایش دهد و Latency را دشوارتر پنهان کند.

تبدیل Format در Texture Unit

Texture Unit می‌تواند برخی Formatهای ذخیره‌شده را هنگام
خواندن به نمایش قابل استفاده Shader تبدیل کند.

نمونه عملیات هنگام Texture Fetch
عملیات نمونه
Normalization UNORM به مقدار شناور صفر تا یک
Signed Conversion SNORM به بازه منفی یک تا مثبت یک
Channel Expansion تبدیل RGB به Vector کامل
Swizzle جابه‌جایی یا تکرار Channelها
sRGB Decode تبدیل به فضای خطی برای محاسبه

Texture View

Texture View نحوه تفسیر یک Resource را برای Sampling
مشخص می‌کند.

View می‌تواند Format قابل مشاهده، Mip Range، Array Layer
و Channel Mapping را تعیین کند، بدون اینکه الزاماً داده
جدیدی کپی شود.

Texture Array و Layer Selection

Texture Array چند Texture هم‌اندازه و هم‌فرمت را به شکل
Layerهای یک Resource نگهداری می‌کند.

تغییر Layer میان Threadهای مجاور می‌تواند روی Locality
و Cache Behavior اثر بگذارد، به‌خصوص اگر Layerها در
حافظه فاصله زیادی داشته باشند.

Texture سه‌بعدی

در Texture سه‌بعدی، Sampleها دارای مختصات X، Y و Z هستند
و Filtering ممکن است چندین Texel را در حجم سه‌بعدی
بخواند.

Trilinear Filtering در Texture سه‌بعدی می‌تواند به ترکیب
هشت Texel مجاور در یک سطح حجمی اشاره کند؛ این مفهوم با
Trilinear Mipmap Filtering یکسان نیست.

Sampling از Video Surface

Surfaceهای ویدئویی مانند NV12 و P010 دارای چند Plane
هستند. Sampling آن‌ها ممکن است از Viewهای چند Plane،
Conversion سخت‌افزاری یا Shaderهای جداگانه استفاده کند.

پشتیبانی دقیق این مسیر به API، Format و قابلیت سخت‌افزار
وابسته است.

الگوهای دسترسی و اثر آن‌ها بر Cache

مقایسه الگوهای رایج Sampling
الگو رفتار Cache ریسک
Sequential 2D بسیار مناسب کم
Small Neighborhood مناسب با Tiling مرز Tile
Large Kernel Reuse بالا در صورت طراحی درست Working Set بزرگ
Random Lookup ضعیف Cache Miss زیاد
Multiple Large Textures رقابت برای Cache Thrashing
High Anisotropy Footprint گسترده Fetch زیاد

راهکارهای بهینه‌سازی Texture Cache

روش‌های بهبود رفتار Texture Memory
راهکار نتیجه
استفاده از Mipmap کاهش Sample Footprint و Aliasing
مختصات منسجم اشتراک Cache Line میان Threadها
Texture Atlas کاهش تغییر Resource در بعضی Workloadها
کاهش Format Size Texelهای بیشتر در هر Cache Line
Texture Compression کاهش ترافیک و ظرفیت مؤثر بیشتر
LOD مناسب جلوگیری از خواندن Resolution بیش‌ازحد
کاهش Divergence درخواست‌های حافظه منظم‌تر
Profiling تشخیص Cache Miss و Bottleneck واقعی


PERFORMANCE IMPACT

اثر Texture Cache بر عملکرد

Memory Bandwidth
بسیار زیاد

Shader Latency
بسیار زیاد

Power Efficiency
زیاد

Image Quality
وابسته به Filtering


API MAPPING

Texture Sampling در APIهای مختلف

Vulkan

VkImageView، VkSampler، Address Mode و LOD
Direct3D 12

Shader Resource View و Sampler Descriptor
OpenGL

Texture Object، Sampler Object و Texture Parameters
Metal

MTLTexture و MTLSamplerState
CUDA

Texture Object، CUDA Array و Address Mode
OpenCL

Image Object، Sampler و Read Image Functions


UNDER THE HOOD

یک Texture Sample در داخل GPU چگونه اجرا می‌شود؟

دستور Sampling در ظاهر یک عملیات ساده Shader است،
اما ممکن است شامل محاسبه مشتق مختصات، انتخاب Mip،
تولید چند آدرس، Cache Lookup، Fetch چند Block و
Interpolation سخت‌افزاری باشد.


01

Coordinate Derivatives

GPU می‌تواند تغییر مختصات Texture میان Invocationهای
نزدیک را بررسی کند تا Footprint و LOD تقریبی را
به‌دست آورد.


02

Address Generation

مختصات با Address Mode، Mip Dimensions، Tile
Layout و Swizzle ترکیب می‌شوند تا آدرس فیزیکی
Blockهای حافظه تعیین شود.


03

Request Coalescing

درخواست‌های Threadهای یک گروه می‌توانند بر اساس
Block یا Cache Line مشترک ادغام شوند. میزان این
ادغام به نزدیکی مختصات آن‌ها بستگی دارد.


04

Format Decode

داده خوانده‌شده ممکن است Decompress، Normalize،
Channel-Swizzle یا از sRGB به فضای خطی تبدیل شود
تا نتیجه قابل استفاده Shader تولید شود.


05

Latency Hiding

هنگام انتظار Texture Fetch، Scheduler می‌تواند
Wave یا Warp دیگری را اجرا کند؛ به شرط آنکه
Workload Resident کافی وجود داشته باشد.


06

Practical Impact

  • Cache Hit را فقط از روی FPS حدس نزنید.
  • Mip Level و Anisotropy را با Profiler بررسی کنید.
  • دسترسی تصادفی ممکن است Memory-Bound شود.
  • Format کوچک‌تر ظرفیت مؤثر Cache را افزایش می‌دهد.
  • Texture Layout و Sampling Pattern را با هم تحلیل کنید.

اشتباهات رایج

برداشت‌های نادرست درباره Texture Cache
اشتباه واقعیت
هر Texture Sample فقط یک Read است Filtering ممکن است چندین Texel و Mip Level را بخواند.
Texture Cache همیشه سریع است دسترسی تصادفی و Thrashing می‌تواند آن را کم‌اثر کند.
Mipmap فقط برای کیفیت است Mipmap می‌تواند ترافیک حافظه را نیز کاهش دهد.
Format روی Cache اثری ندارد اندازه Texel تعداد داده قابل نگهداری در Cache را تغییر می‌دهد.
Sampleهای Threadها مستقل‌اند درخواست‌های نزدیک می‌توانند Cache Line مشترک داشته باشند.


M9


CHAPTER SUMMARY

خلاصه فصل

  • Texture Unit آدرس‌دهی، Filtering و Fetch را مدیریت می‌کند.
  • Texture Cache برای الگوهای دسترسی دوبعدی و سه‌بعدی بهینه شده است.
  • Bilinear Filtering حداقل چهار Texel مجاور را ترکیب می‌کند.
  • Trilinear Filtering می‌تواند دو Mip Level را بخواند.
  • Anisotropic Filtering Footprint گسترده‌تر و Fetch بیشتری دارد.
  • Mipmap می‌تواند کیفیت و رفتار Cache را هم‌زمان بهبود دهد.
  • Threadهای دارای مختصات نزدیک، از Cache Lineهای مشترک سود می‌برند.
  • دسترسی تصادفی و Working Set بزرگ باعث Cache Thrashing می‌شوند.

واژه‌نامه فصل

Texture Unit
واحد سخت‌افزاری آدرس‌دهی، Fetch و Filtering Texture.

Texture Cache
Cache بهینه‌شده برای دسترسی Sampleهای تصویری و دوبعدی.

Texel
عنصر پایه Texture، مشابه Pixel در فضای Texture.

Sample Footprint
ناحیه‌ای از Texture که برای تولید نتیجه Sampling خوانده می‌شود.

Address Mode
قانون مدیریت مختصات خارج از محدوده Texture.

Mipmap
مجموعه نسخه‌های کاهش‌یافته یک Texture.

LOD
سطح جزئیات یا Mip Level انتخاب‌شده برای Sampling.

Cache Thrashing
جایگزینی مکرر داده‌های Cache پیش از استفاده مجدد.

M10

GPU TEXTURE SYSTEM


Mipmap، Level of Detail (LOD)
و Texture Minification

بررسی کامل علت ایجاد Mipmap،
نحوه سازمان‌دهی سطوح مختلف تصویر،
انتخاب خودکار Level توسط GPU،
ارتباط LOD با مشتق‌های Texture Coordinate،
نقش Texture Cache و تأثیر آن بر کیفیت تصویر و کارایی سیستم.


سطح فصل


پیشرفته


زمان مطالعه


حدود ۴۵ دقیقه


موضوع


Texture Level Selection


نسخه


v1.0

پیش‌نیازهای این فصل

  • Texture Cache
  • Texture Sampling
  • Bilinear Filtering
  • Address Modes

در پایان این فصل

  • دلیل ایجاد Mipmap را درک خواهید کرد.
  • خواهید دانست GPU چگونه Level مناسب را انتخاب می‌کند.
  • مفهوم LOD را به صورت مهندسی خواهید شناخت.
  • ارتباط Mipmap با Cache و Bandwidth را تحلیل خواهید کرد.

نقشه مفهومی فصل

MIPMAP

Minification
LOD
Texture Cache

Filtering
Derivatives
Bandwidth

چرا Mipmap به وجود آمد؟

تقریباً تمام موتورهای گرافیکی مدرن،
از بازی‌های رایانه‌ای گرفته تا نرم‌افزارهای CAD،
برای نمایش Textureها از Mipmap استفاده می‌کنند.

اما سؤال اصلی این است:

چرا اصلاً چنین ساختاری لازم شد؟

پاسخ این سؤال مستقیماً به رابطه میان
اندازه Texture در حافظه
و اندازه واقعی آن روی صفحه نمایش مربوط می‌شود.

یک مثال واقعی

فرض کنید روی دیوار یک ساختمان،
یک Texture با وضوح

4096 × 4096

قرار گرفته است.

اکنون دوربین چند صد متر از ساختمان فاصله می‌گیرد.

در این وضعیت ممکن است کل آن دیوار
تنها حدود

40 × 40 Pixel

روی مانیتور دیده شود.



Texture In Memory

4096 × 4096 Texels

        │
        │
        ▼

Rendered On Screen

40 × 40 Pixels

در این لحظه تقریباً تمام اطلاعات موجود
در Texture دیگر قابل نمایش نیست.

سؤال مهم

آیا GPU همچنان باید
تمام Texture چهار هزار در چهار هزار
را بخواند
تا فقط چهل پیکسل روی صفحه تولید کند؟

هزینه این کار چقدر است؟

هر Pixel صفحه ممکن است
نماینده صدها یا حتی هزاران Texel باشد.

نسبت Texel به Pixel

Resolution Texture

Screen Size

نتیجه

4096²

40²

حجم زیادی از اطلاعات
هرگز دیده نمی‌شود.

2048²

80²

هنوز اطلاعات اضافی
بسیار زیاد است.

512²

500²

تقریباً متناسب.

UNDER THE HOOD

اگر Mipmap وجود نداشت…

01

Texture Fetch

هر Pixel باید از Texture
با وضوح کامل نمونه‌برداری می‌کرد.

02

Cache

Cache دائماً با داده‌های
غیرضروری پر می‌شد.

03

Memory Traffic

پهنای باند حافظه
به شدت افزایش پیدا می‌کرد.

04

Image Quality

Aliasing،
Shimmering
و Moiré Pattern
ظاهر می‌شدند.

Mipmap دقیقاً چیست؟

Mipmap مجموعه‌ای از نسخه‌های کوچک‌شده یک Texture است که
هر نسخه، یک سطح مستقل از زنجیره Mipmap را تشکیل می‌دهد.

سطح اصلی Texture با بیشترین وضوح، معمولاً
Level 0
نام دارد. هر Level بعدی معمولاً نصف عرض و نصف ارتفاع
Level قبلی را دارد.

ساختار زنجیره Mipmap

فرض کنید Texture اصلی ابعاد
1024 × 1024
دارد. سطوح بعدی به‌صورت زیر ساخته می‌شوند:

آخرین Level معمولاً به یک Texel با ابعاد
1 × 1
می‌رسد و میانگین کلی رنگ Texture را تقریب می‌زند.

Level 0

Level 0 همان Texture اصلی با بیشترین وضوح است و تمام
جزئیات منبع را نگهداری می‌کند.

هنگام Magnification یا زمانی که Texture نزدیک به اندازه
واقعی خود روی صفحه نمایش داده می‌شود، GPU معمولاً از
Level 0 یا Levelهای نزدیک به آن استفاده می‌کند.

Levelهای کوچک‌تر

Levelهای کوچک‌تر نسخه‌هایی از Texture هستند که جزئیات
فرکانس بالای آن‌ها از قبل حذف یا میانگین‌گیری شده است.

بنابراین زمانی که Texture در فاصله دور نمایش داده می‌شود،
GPU به‌جای نمونه‌برداری مستقیم از Level 0، از Level
متناسب با اندازه نمایش استفاده می‌کند.

چرا هر Level نصف می‌شود؟

نصف‌کردن عرض و ارتفاع باعث می‌شود مساحت هر Level تقریباً
یک‌چهارم Level قبلی شود.

این نسبت هم ساده است، هم با محاسبات دودویی GPU سازگار
است و هم امکان انتخاب پیوسته Resolution را با تعداد
Levelهای محدود فراهم می‌کند.

Textureهای غیرمربعی

Mipmap محدود به Textureهای مربعی نیست. در Textureهای
مستطیلی نیز هر بُعد تا رسیدن به مقدار یک کاهش می‌یابد.

زمانی که یکی از ابعاد به یک می‌رسد، بُعد دیگر همچنان تا
رسیدن به یک کاهش پیدا می‌کند.

ابعاد فرد

اگر عرض یا ارتفاع Texture عددی فرد باشد، اندازه Level
بعدی بر اساس قواعد API یا پیاده‌سازی به مقدار صحیح مناسب
کاهش می‌یابد.

تعداد Levelهای Mipmap

تعداد کامل Levelها بر اساس بزرگ‌ترین بُعد Texture محاسبه
می‌شود.

مقدار یک اضافه می‌شود، زیرا Level 0 نیز بخشی از زنجیره
محسوب می‌شود.

مثال محاسبه تعداد Level

تعداد Levelهای کامل برای چند اندازه Texture
ابعاد Texture بزرگ‌ترین بُعد تعداد Level
256 × 256 256 9
1024 × 1024 1024 11
1920 × 1080 1920 11
4096 × 2048 4096 13

زنجیره کامل و زنجیره ناقص

Resource ممکن است تمام Levelهای ممکن را داشته باشد یا
تنها بخشی از آن‌ها را ذخیره کند.

مقایسه Full Mip Chain و Partial Mip Chain
نوع ساختار کاربرد
Full Chain از Level 0 تا 1×1 Sampling در تمام فاصله‌ها
Partial Chain فقط بخشی از Levelها کاهش مصرف حافظه یا Streaming

در زنجیره ناقص باید Sampler و LOD Range طوری تنظیم شوند
که GPU به Levelهای موجود دسترسی پیدا کند.

هزینه حافظه Mipmap

تصور اولیه ممکن است این باشد که ذخیره چند نسخه Texture
مصرف حافظه را چند برابر می‌کند، اما هر Level تنها یک‌چهارم
Level قبلی مساحت دارد.

بنابراین یک زنجیره کامل دوبعدی تقریباً
۳۳ درصد
بیشتر از Level 0 حافظه مصرف می‌کند.

مثال مصرف حافظه

فرض کنید Texture فرمت RGBA8 و ابعاد
4096 × 4096
دارد. هر Texel چهار Byte مصرف می‌کند.

Mip Levelها چگونه در حافظه قرار می‌گیرند؟

از دید منطقی هر Level یک تصویر مستقل با ابعاد کوچک‌تر
است، اما از دید فیزیکی ممکن است تمام Levelها داخل یک
Allocation مشترک ذخیره شوند.

Offset، Pitch، Alignment و Tiling هر Level ممکن است با
Level دیگر متفاوت باشد.

Mip Tail چیست؟

Levelهای بسیار کوچک ممکن است از نظر Allocation مستقل
ناکارآمد باشند؛ زیرا اندازه آن‌ها از حداقل Tile یا Page
حافظه بسیار کوچک‌تر است.

برخی سیستم‌ها چند Level کوچک انتهایی را در یک ناحیه
مشترک با عنوان
Mip Tail
گروه‌بندی می‌کنند.

Mipmap در Texture Array و Cubemap

هر Layer در Texture Array و هر Face در Cubemap معمولاً
زنجیره Mipmap مخصوص خود را دارد.

View می‌تواند تنها بخشی از Layerها یا بازه‌ای مشخص از
Mip Levelها را در اختیار Shader قرار دهد.

Mipmap در Texture سه‌بعدی

در Texture سه‌بعدی معمولاً عرض، ارتفاع و عمق هم‌زمان
کاهش پیدا می‌کنند.

به همین دلیل هزینه کامل Mipmap در Texture سه‌بعدی با
Texture دوبعدی متفاوت است و باید جداگانه محاسبه شود.

Mipmap تولیدشده یا آماده؟

Levelهای Mipmap می‌توانند به‌صورت Offline توسط ابزار
Asset Pipeline ساخته شوند یا در Runtime توسط GPU تولید
شوند.

مقایسه تولید Offline و Runtime
روش مزیت محدودیت
Offline کیفیت کنترل‌شده و بدون هزینه Runtime نیاز به ذخیره Asset آماده
Runtime مناسب Textureهای پویا هزینه Compute یا Blit


UNDER THE HOOD

Resource واقعاً چگونه چند Mip Level را نگهداری می‌کند؟

برنامه یک Texture واحد می‌بیند، اما Driver و Memory
Manager باید برای هر Level ابعاد، Tile Layout، Offset،
Pitch و Alignment مناسب تولید کنند.


01

Subresource

هر ترکیب Mip Level، Array Layer و Plane می‌تواند
یک Subresource مستقل محسوب شود.


02

Alignment

Levelهای کوچک نیز ممکن است به مرزهای Tile یا Page
خاص Align شوند و فضای بیشتری از اندازه منطقی خود
مصرف کنند.


03

Address Generation

Texture Unit پس از انتخاب LOD، آدرس پایه همان
Level و Offset داخلی Sample را محاسبه می‌کند.


04

Cache Behavior

Levelهای کوچک‌تر Working Set کمتری دارند و احتمال
Resident ماندن آن‌ها در Cache بیشتر است.


05

Mip Tail

Levelهای کوچک انتهایی ممکن است داخل یک Tile یا
Page مشترک بسته‌بندی شوند.


06

Practical Impact

  • تعداد Levelها را هنگام ساخت Resource مشخص کنید.
  • زنجیره ناقص را با LOD Range هماهنگ کنید.
  • اندازه Allocation را از API دریافت کنید.
  • Mip Tail را مانند سطرهای Linear تفسیر نکنید.
  • Streaming را بر اساس Subresource مدیریت کنید.

Mipmap چگونه ساخته می‌شود؟

ساخت Mipmap فقط کوچک‌کردن ابعاد تصویر نیست. هر Level باید
نماینده مناسبی از اطلاعات Level قبلی در Resolution پایین‌تر
باشد.

برای تولید هر Texel در Level جدید، مجموعه‌ای از Texelهای
Level قبلی نمونه‌برداری و با یکدیگر ترکیب می‌شوند. این فرایند
Downsampling
نام دارد.

تفاوت Resize ساده و Prefiltering

اگر تصویر بدون فیلتر مناسب کوچک شود، جزئیات فرکانس بالا
مستقیماً به Resolution پایین‌تر منتقل می‌شوند و می‌توانند
Aliasing ایجاد کنند.

مقایسه کوچک‌سازی ساده و تولید صحیح Mipmap
روش رفتار نتیجه
Nearest Resize انتخاب یک Texel Aliasing و ازبین‌رفتن اطلاعات
Average Downsampling ترکیب چند Texel نمایش بهتر میانگین ناحیه
Filtered Prefiltering کاهش فرکانس‌های نامناسب کیفیت پایدارتر هنگام Minification

مدل ساده Downsampling دو در دو

در ساده‌ترین حالت، هر چهار Texel مجاور از Level قبلی برای
تولید یک Texel در Level بعدی میانگین‌گیری می‌شوند.

این روش سریع و ساده است، اما همیشه بهترین کیفیت را تولید
نمی‌کند؛ به‌خصوص برای Textureهایی با لبه‌های تیز، Alpha،
Normal Map یا داده‌های غیررنگی.

Box Filter

Box Filter تمام Sampleهای داخل ناحیه فیلتر را با وزن برابر
ترکیب می‌کند.

ویژگی‌های Box Filter
ویژگی نتیجه
پیاده‌سازی ساده مناسب تولید سریع Mipmap
وزن برابر میانگین یکنواخت Sampleها
هزینه پایین مناسب Runtime Generation
پاسخ فرکانسی محدود امکان باقی‌ماندن Aliasing
Blur احتمالی کاهش جزئیات نازک

Gaussian Filter

Gaussian Filter به Sampleهای نزدیک مرکز وزن بیشتری و به
Sampleهای دورتر وزن کمتری می‌دهد.

Gaussian می‌تواند فرکانس‌های بالا را نرم‌تر از Box Filter
کاهش دهد، اما ممکن است Texture را کمی Blur کند.

Lanczos Filter

Lanczos یک فیلتر بازنمونه‌برداری با کیفیت بالاتر است که تلاش
می‌کند جزئیات و وضوح لبه‌ها را بهتر حفظ کند.

این فیلتر معمولاً برای تولید Offline Asset مناسب‌تر است؛
زیرا هزینه محاسباتی و تعداد Sampleهای بیشتری نسبت به Box
Filter دارد.

مقایسه فیلترهای رایج تولید Mipmap
Filter کیفیت هزینه کاربرد
Box متوسط کم Runtime و مسیرهای سریع
Gaussian نرم و پایدار متوسط کاهش نویز و Aliasing
Lanczos زیاد زیاد Asset Pipeline آفلاین

Filter Footprint

Filter Footprint محدوده‌ای از Level مبدأ است که برای تولید
یک Texel در Level مقصد خوانده می‌شود.

Footprint بزرگ‌تر می‌تواند Aliasing را بهتر کاهش دهد، اما
هزینه تولید Mipmap و احتمال Blur را افزایش می‌دهد.

مشکل Gamma در تولید Mipmap

بسیاری از Textureهای رنگی به‌صورت sRGB ذخیره می‌شوند.
مقادیر ذخیره‌شده در sRGB با شدت واقعی نور رابطه خطی ندارند.

اگر میانگین‌گیری مستقیماً روی مقادیر sRGB انجام شود، نتیجه
می‌تواند از نظر روشنایی نادرست و معمولاً تیره‌تر از مقدار
فیزیکی مناسب باشد.

مسیر صحیح Gamma-Correct Downsampling

این قاعده برای Textureهای رنگی اهمیت دارد، اما برای داده‌هایی
مانند Normal Map، Roughness، Mask یا Depth نباید به‌طور
خودکار sRGB Decode اعمال شود.

Texture رنگی و Texture داده‌ای

تفاوت تفسیر Texture هنگام تولید Mipmap
نوع Texture فضای مناسب فیلتر نکته
Base Color Linear Light sRGB Decode پیش از فیلتر
Emissive Color Linear Light حفظ شدت صحیح نور
Normal Map Vector Space نیازمند Normalization مجدد
Roughness فضای داده وابسته به مدل BRDF
Metalness فضای داده معمولاً بدون sRGB
Mask فضای داده یا Coverage میانگین ساده همیشه مناسب نیست

مشکل Alpha در Mipmap

Textureهای دارای Alpha می‌توانند هنگام کوچک‌شدن دچار Halo،
نشت رنگ لبه یا کاهش Coverage شوند.

رفتار صحیح به معنای Alpha بستگی دارد؛ Alpha ممکن است برای
Transparency پیوسته، Cutout، Coverage یا Mask استفاده شود.

Straight Alpha

در Straight Alpha، کانال RGB مستقل از مقدار Alpha ذخیره
می‌شود. حتی Pixelهای کاملاً شفاف نیز ممکن است رنگ RGB داشته
باشند.

میانگین مستقیم این دو Pixel می‌تواند رنگ لبه را تیره کند،
حتی اگر Pixel شفاف نباید در نتیجه بصری سهم رنگی مستقلی داشته
باشد.

Premultiplied Alpha

در Premultiplied Alpha، مقادیر RGB پیش از ذخیره در Alpha
ضرب می‌شوند.

این نمایش در بسیاری از عملیات Filtering و Compositing رفتار
مناسب‌تری دارد؛ زیرا Pixel کاملاً شفاف سهم رنگی صفر خواهد
داشت.

Halo Artifact

Halo زمانی ایجاد می‌شود که رنگ Pixelهای شفاف یا پس‌زمینه
هنگام Downsampling وارد لبه جسم شود.

استفاده از Premultiplied Alpha، Edge Color Dilation یا
Padding مناسب می‌تواند این مشکل را کاهش دهد.

Alpha Coverage در Textureهای Cutout

در Textureهایی مانند برگ درخت، حصار یا مو، Alpha اغلب با
Threshold برای نگه‌داشتن یا حذف Pixel استفاده می‌شود.

میانگین‌گیری ساده Alpha می‌تواند باعث شود بخش زیادی از
Texture در Mipهای کوچک‌تر از Threshold پایین‌تر برود و ناپدید
شود.

حفظ Alpha Coverage

برای Textureهای Alpha-Test می‌توان مقادیر Alpha هر Mip را
طوری Scale یا تنظیم کرد که نسبت تقریبی Pixelهای عبورکننده از
Threshold حفظ شود.

راهکارهای متداول Alpha Cutout
راهکار هدف
Coverage Preservation حفظ مساحت قابل مشاهده
Alpha Scaling جبران افت مقدار Alpha
Alpha-to-Coverage نمایش نرم‌تر مرز Cutout
Signed Distance Field حفظ بهتر لبه در Scaleهای مختلف

جزئیات نازک و خطوط باریک

سیم، نرده، خطوط شبکه، نوشته‌های ریز و جزئیات باریک ممکن است
در Mipهای کوچک‌تر کاملاً از بین بروند.

اگر Threshold یا Contrast بالا باشد، خط نازک ممکن است دیگر
قابل مشاهده نباشد.

حفظ جزئیات مهم

برخی Asset Pipelineها پس از Downsampling از Sharpening محدود
یا فیلترهای Detail-Preserving استفاده می‌کنند.

Sharpening بیش‌ازحد می‌تواند Ringing، Overshoot یا Aliasing
جدید ایجاد کند؛ بنابراین باید بر اساس نوع Texture تنظیم شود.

Trade-off حفظ جزئیات
تنظیم مزیت خطر
Blur بیشتر Aliasing کمتر ازبین‌رفتن وضوح
Sharpen بیشتر جزئیات واضح‌تر Shimmering و Ringing
Filter متعادل کیفیت پایدار نیازمند تنظیم Asset

تولید Mipmap برای Normal Map

Normal Map رنگ معمولی نیست. کانال‌های آن معمولاً مؤلفه‌های
یک Vector جهت را نمایش می‌دهند.

میانگین‌گیری Vectorها می‌تواند طول Normal را کاهش دهد؛
بنابراین نتیجه باید بر اساس کاربرد، Normalize یا با روش
مناسب‌تری پردازش شود.

Mipmap برای Roughness

Roughness پارامتری از مدل Material است و میانگین ساده آن
همیشه معادل میانگین رفتار بازتابی سطح نیست.

جزئیات ریز Normal Map نیز در فاصله دور می‌توانند به
Roughness ظاهری تبدیل شوند. Asset Pipelineهای پیشرفته ممکن
است این اثر را هنگام تولید Mip در نظر بگیرند.

Mipmap برای Height Map

بسته به الگوریتم مصرف‌کننده، Height Map ممکن است به میانگین،
کمینه، بیشینه یا اطلاعات آماری دیگری نیاز داشته باشد.

روش‌های احتمالی کاهش Height Data
روش کاربرد احتمالی
Average نمایش ارتفاع متوسط
Minimum حفظ پایین‌ترین سطح
Maximum حفظ برجسته‌ترین ویژگی
Min-Max Pair حفظ دامنه ارتفاع در هر Block

Seam در Cubemap

اگر Faceهای Cubemap به‌صورت کاملاً مستقل فیلتر شوند، Pixelهای
نزدیک مرز Faceها ممکن است اطلاعات Face مجاور را در نظر نگیرند.

نتیجه می‌تواند ایجاد خط یا ناپیوستگی در مرز Cubemap باشد،
به‌خصوص در Mip Levelهای کوچک‌تر.

Prefiltering در Environment Map

Mipهای Environment Map ممکن است فقط نسخه کوچک‌شده تصویر
نباشند. در Rendering مبتنی بر فیزیک، هر Level می‌تواند
نمایش ازپیش‌فیلترشده‌ای از نور محیط برای Roughness متفاوت
باشد.

در چنین Resourceهایی، Mip Level علاوه بر Resolution می‌تواند
معنای فیزیکی خاصی نیز داشته باشد.

Pipeline پیشنهادی تولید Offline

تولید Mipmap در Runtime

Render Targetهای پویا، Procedural Textureها، Video Frameها
یا Textureهای تولیدشده توسط Compute ممکن است به تولید Mipmap
در زمان اجرا نیاز داشته باشند.

این عملیات می‌تواند با Blit Engine، Render Pass، Compute
Shader یا دستور اختصاصی API انجام شود.

روش‌های تولید Runtime

مقایسه روش‌های تولید Mipmap روی GPU
روش مزیت محدودیت
Hardware Blit ساده و سریع کنترل محدود روی Filter
Render Pass استفاده از Sampler و Shader نیاز به Attachment و Transition
Compute Shader کنترل کامل و Semantic-Aware پیچیدگی و Synchronization بیشتر
API Generate Command پیاده‌سازی آسان رفتار وابسته به API و Driver

Synchronization میان Levelها

هر Level معمولاً ورودی Level بعدی است. بنابراین Write یک
Level باید پیش از Read همان Level برای تولید سطح بعدی قابل
مشاهده باشد.

تولید زنجیره‌ای یا مستقیم

در روش زنجیره‌ای، هر Level از Level قبلی تولید می‌شود.
در روش مستقیم، هر Level ممکن است مستقیماً از منبع اصلی
محاسبه شود.

مقایسه دو راهبرد تولید Mipmap
راهبرد مزیت محدودیت
Recursive ساده و کم‌هزینه تجمع خطای Filter
From Base Level کنترل بهتر Footprint هزینه Sample بیشتر

چگونه کیفیت Mipmap را ارزیابی کنیم؟

چک‌لیست کنترل کیفیت Mipmap
بررسی نشانه مشکل
حرکت دوربین Shimmering یا Flickering
مرز Alpha Halo یا ناپدیدشدن Coverage
روشنایی تیره‌شدن Mipهای کوچک
Normal Map تغییر شدت نور یا Normalهای نادرست
جزئیات نازک ناپدیدشدن زودهنگام
Cubemap Seam میان Faceها


UNDER THE HOOD

چرا یک فیلتر عمومی برای همه Textureها کافی نیست؟

GPU فقط Byteها را می‌بیند، اما Asset Pipeline باید معنای
هر Channel را بداند. نحوه صحیح ترکیب داده به این بستگی
دارد که آن Texture رنگ، Vector، Coverage یا پارامتر
Material را نمایش دهد.


01

Frequency Reduction

Level مقصد توان نمایش تمام فرکانس‌های Level مبدأ را
ندارد؛ Filter باید آن‌ها را پیش از Sample Reduction
کاهش دهد.


02

Semantic Interpretation

RGB ممکن است رنگ، Normal، ID یا داده Packed باشد.
عملیات صحیح تنها از روی Format قابل تشخیص نیست.


03

Gamma Domain

Filter رنگ باید در فضای خطی انجام شود، نه روی
مقادیر Encode‌شده برای نمایش.


04

Alpha Semantics

Transparency پیوسته، Cutout و Coverage به روش‌های
متفاوتی برای Downsampling نیاز دارند.


05

Vector Data

میانگین‌گیری Normalها می‌تواند طول Vector را تغییر
دهد و نیازمند Renormalization یا مدل پیشرفته‌تر باشد.


06

Practical Rules

  • نوع Texture را در Metadata Asset ثبت کنید.
  • Base Color را در Linear Light فیلتر کنید.
  • Normal Map را پس از فیلتر Normalize کنید.
  • Alpha Cutout را با Coverage Preservation بسازید.
  • فیلتر Runtime را با نیاز کیفیت پروژه هماهنگ کنید.

Aliasing در Texture Minification

هنگام Minification، چندین Texel از Texture ممکن است روی یک
Pixel صفحه نگاشت شوند. اگر GPU فقط تعداد محدودی Sample از
این ناحیه بردارد، بخشی از اطلاعات تصویر به‌صورت نادرست در
خروجی ظاهر می‌شود.

این خطا
Aliasing
نام دارد و می‌تواند به شکل خطوط کاذب، تغییر Pattern،
Flickering یا حرکت ظاهری جزئیات دیده شود.

رابطه Texel و Pixel

یک Texel عنصر Texture است، اما یک Pixel عنصر خروجی صفحه
نمایش محسوب می‌شود. نسبت این دو هنگام Rendering ثابت نیست.

Mipmap بیشترین اهمیت را در حالت سوم دارد؛ زیرا GPU باید
نماینده مناسبی از یک ناحیه بزرگ Texture برای یک Pixel نهایی
پیدا کند.

Spatial Frequency چیست؟

Spatial Frequency میزان سرعت تغییر رنگ یا مقدار داده در
طول تصویر را توصیف می‌کند.

Textureهایی با نواحی بزرگ و یکنواخت دارای فرکانس فضایی
پایین هستند، درحالی‌که خطوط باریک، Checkerboard، نوشته‌های
ریز و نویز دارای فرکانس فضایی بالا هستند.

مثال‌های فرکانس فضایی

مقایسه محتوای Texture از نظر Spatial Frequency
محتوا فرکانس تقریبی ریسک Minification
Gradient نرم پایین کم
سطح رنگی یکنواخت بسیار پایین بسیار کم
نوشته ریز بالا زیاد
Checkerboard بسیار بالا بسیار زیاد
نویز تصادفی گسترده بسیار زیاد

Sampling Rate

Sampling Rate مشخص می‌کند در یک فاصله فضایی معین چند Sample
گرفته می‌شود.

وقتی Texture کوچک می‌شود، تعداد Pixelهای صفحه که آن را
نمایش می‌دهند کاهش پیدا می‌کند و در نتیجه نرخ Sampling
نسبت به جزئیات Texture کمتر می‌شود.

Undersampling

اگر Sampling Rate کمتر از مقدار لازم برای نمایش جزئیات
Texture باشد، سیستم وارد حالت
Undersampling
می‌شود.

در این شرایط، چند Pattern متفاوت می‌توانند Sampleهای
مشابهی تولید کنند و GPU دیگر قادر نیست شکل اصلی Texture را
از داده‌های محدود بازسازی کند.

Nyquist Limit

بر اساس اصل Nyquist، برای بازسازی یک فرکانس، نرخ Sampling
باید حداقل دو برابر آن فرکانس باشد.

در Texture Sampling، اگر جزئیات Texture سریع‌تر از توان
تفکیک Pixelهای صفحه تغییر کنند، آن جزئیات باید پیش از
Sampling کاهش یا حذف شوند.

Band-Limiting

Band-Limiting یعنی حذف فرکانس‌هایی که سیستم مقصد توان نمایش
آن‌ها را ندارد.

هنگام ساخت Mipmap، Prefiltering تلاش می‌کند Texture را برای
Sampling در Resolution جدید Band-Limited کند.

اگر Downsampling پیش از Low-Pass Filtering انجام شود،
فرکانس‌های بالا به فرکانس‌های پایین کاذب تبدیل می‌شوند.

Frequency Folding

هنگام Undersampling، فرکانس‌های بالا ممکن است به‌صورت
Patternهای کم‌فرکانس اشتباه دیده شوند.

این پدیده یکی از دلایل ایجاد Moiré و الگوهای موجی روی
Textureهای ریز است.

مثال Checkerboard

Checkerboard یکی از بهترین مثال‌ها برای مشاهده Aliasing است؛
زیرا تغییرات رنگی سریع و منظم دارد.

اگر Sampleها همواره روی خانه‌های روشن یا تیره قرار بگیرند،
خروجی ممکن است کاملاً سفید، کاملاً سیاه یا دارای Pattern
نادرست شود.

Sample Phase

نتیجه Sampling فقط به فاصله Sampleها وابسته نیست؛ محل شروع
Sampleها نسبت به Pattern نیز اهمیت دارد.

هنگام حرکت دوربین، Sample Phase تغییر می‌کند و همین موضوع
می‌تواند باعث Shimmering شود.

Shimmering

Shimmering نوعی ناپایداری زمانی است که در آن جزئیات Texture
هنگام حرکت دوربین روشن و خاموش یا جابه‌جا به نظر می‌رسند.

علت اصلی آن تغییر Sample Position نسبت به جزئیات
فرکانس بالاست.

ناپایداری زمانی

یک تصویر ثابت ممکن است در یک Frame قابل‌قبول به نظر برسد،
اما هنگام حرکت دوربین مشکلات Sampling آشکار شوند.

به همین دلیل ارزیابی Mipmap تنها با Screenshot کافی نیست و
باید Texture در حرکت و زوایای مختلف بررسی شود.

Moiré Pattern

Moiré زمانی ظاهر می‌شود که دو الگوی منظم با فرکانس یا زاویه
نزدیک روی یکدیگر اثر بگذارند.

در Rendering، الگوی Texture و شبکه Pixelهای صفحه می‌توانند
چنین تداخلی ایجاد کنند.

Moiré بیشتر کجا دیده می‌شود؟

سناریوهای رایج ایجاد Moiré
محتوا علت
پارچه ریزبافت Pattern متراکم و منظم
توری و حصار خطوط باریک تکرارشونده
سقف سفالی یا آجر جزئیات تکراری در فاصله دور
Grid و Checkerboard فرکانس بالا در دو محور
خطوط مورب تداخل زاویه Pattern و Pixel Grid

LOD Popping

اگر GPU تنها یک Mip Level را انتخاب کند و ناگهان به Level
بعدی سوئیچ شود، ممکن است تغییر قابل مشاهده‌ای در وضوح یا
روشنایی Texture ایجاد شود.

Trilinear Filtering با ترکیب دو Level مجاور تلاش می‌کند این
گذار را نرم‌تر کند.

Mipmap به‌عنوان نمایش ازپیش‌فیلترشده

هر Mip Level را می‌توان پاسخ تقریبی Texture برای یک محدوده
خاص از اندازه Sampling دانست.

GPU به‌جای فیلترکردن تعداد زیادی Texel از Level 0 در هر
Frame، از نتیجه Prefiltering ذخیره‌شده در Level مناسب
استفاده می‌کند.

چرا Bilinear روی Level 0 کافی نیست؟

Bilinear Filtering تنها چهار Texel نزدیک را ترکیب می‌کند.
اگر Footprint واقعی Pixel صدها Texel را پوشش دهد، چهار Sample
نمی‌توانند نماینده صحیح آن ناحیه باشند.

انتخاب Mip مناسب باعث می‌شود همان Footprint بزرگ به چند
Texel از Level کوچک‌تر نگاشت شود.

Mipmap چه مشکلاتی را کاملاً حل نمی‌کند؟

Mipmap یک تقریب مؤثر برای Footprintهای تقریباً مربعی است،
اما برای Footprintهای بسیار کشیده یا زاویه‌دار ممکن است کافی
نباشد.

محدودیت‌های اصلی Mipmap
وضعیت محدودیت راهکار تکمیلی
سطح با زاویه شدید Footprint کشیده Anisotropic Filtering
Mip تولیدشده نامناسب Aliasing باقی‌مانده Prefiltering بهتر
سوئیچ Level ناگهانی LOD Popping Trilinear Filtering
جزئیات Alpha Cutout کاهش Coverage Coverage Preservation
Temporal Aliasing Shimmering باقی‌مانده TAA یا روش‌های زمانی

Trade-off میان Blur و Aliasing

اگر فیلتر Mipmap بیش‌ازحد نرم باشد، Texture Blur می‌شود.
اگر فیلتر بیش‌ازحد تیز باشد، Aliasing و Shimmering باقی
می‌مانند.

تنظیم مناسب به نوع Asset، فاصله مشاهده، حرکت دوربین و سبک
بصری پروژه بستگی دارد.

آزمایش عملی Aliasing

روش‌های ارزیابی کیفیت Minification
آزمایش هدف
حرکت آرام دوربین تشخیص Shimmering
سطح مورب بلند بررسی نیاز به Anisotropy
Checkerboard ریز آشکارسازی Aliasing شدید
تغییر LOD Bias بررسی Blur و Sharpness
نمایش رنگی Mip Level مشاهده انتخاب Level
ضبط ویدئوی حرکت بررسی Temporal Stability


UNDER THE HOOD

چرا GPU نمی‌تواند جزئیات حذف‌شده را بعداً بازیابی کند؟

پس از Undersampling، چندین سیگنال یا Pattern متفاوت
می‌توانند مجموعه Sampleهای یکسانی تولید کنند. در این
مرحله اطلاعات کافی برای تشخیص Texture اصلی باقی نمانده
است.


01

Information Loss

Sampleهای محدود تمام تغییرات میان دو نقطه را ثبت
نمی‌کنند.


02

Ambiguous Reconstruction

چند الگوی فرکانسی مختلف می‌توانند در نرخ Sampling
پایین نتیجه مشابهی داشته باشند.


03

Low-Pass Filtering

فرکانس‌های غیرقابل نمایش باید پیش از کاهش Sampleها
حذف شوند.


04

Mip Selection

Texture Unit تلاش می‌کند Levelی را انتخاب کند که
Resolution آن با Footprint Pixel نزدیک باشد.


05

Temporal Behavior

تغییر جزئی مختصات می‌تواند Sampleها را روی Texelهای
متفاوت قرار دهد و خروجی را میان Frameها تغییر دهد.


06

Practical Rules

  • Mipmap را با Filter مناسب Asset بسازید.
  • کیفیت را در حرکت ارزیابی کنید.
  • LOD Bias منفی را با احتیاط استفاده کنید.
  • برای سطوح مورب Anisotropy را بررسی کنید.
  • Temporal Aliasing را جدا از Spatial Aliasing تحلیل کنید.

GPU چگونه Mip Level مناسب را انتخاب می‌کند؟

تا اینجا یاد گرفتیم که یک Texture ممکن است ده‌ها Mip Level
داشته باشد، اما هنوز یک سؤال بسیار مهم بی‌پاسخ مانده است.

GPU از کجا می‌فهمد کدام Level باید استفاده شود؟

آیا فاصله دوربین را اندازه می‌گیرد؟

آیا اندازه مدل را بررسی می‌کند؟

آیا تعداد Pixelهای جسم را می‌شمارد؟

چرا فاصله دوربین معیار مناسبی نیست؟

دو جسم می‌توانند دقیقاً در یک فاصله از دوربین قرار داشته
باشند اما اندازه کاملاً متفاوتی روی صفحه ایجاد کنند.



Camera

      │

      ▼

 ┌────────────┐

 Large Wall

 Occupies

 900 Pixels


 ┌───┐

 Small Sign

 Occupies

 35 Pixels

بنابراین فاصله تنها یکی از عوامل است.

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

اندازه واقعی تصویر روی Screen است.

چیزی که واقعاً اهمیت دارد

GPU سعی می‌کند تخمین بزند

یک Pixel صفحه

چه ناحیه‌ای از Texture را پوشش می‌دهد.

این ناحیه را

Texture Footprint

می‌نامیم.

مثال

فرض کنید این Pixel روی صفحه دیده می‌شود.



Texture

┌─────────────────────────────┐

██████████████████████████████

██████████████████████████████

██████████████████████████████

██████████████████████████████

██████████████████████████████

└─────────────────────────────┘


One Screen Pixel

        ▲

covers this entire region

اگر این ناحیه

80×80 Texel

باشد،

نمونه‌برداری از فقط چهار Texel کافی نیست.

مسئله‌ای که Texture Unit باید حل کند

Texture Unit باید قبل از Sampling
پاسخ سه سؤال را پیدا کند.

تصمیم‌های Texture Unit

سؤال

اهمیت

Footprint چقدر بزرگ است؟

انتخاب Mip

شکل Footprint چیست؟

Anisotropic Filtering

مرکز Footprint کجاست؟

Sample Location

GPU این اطلاعات را از کجا به دست می‌آورد؟

پاسخ در Shader است.

هنگام اجرای Pixel Shader،
هر Pixel دارای مختصات Texture مخصوص خود است.



uv

↓

Pixel Shader

↓

Texture()

GPU تغییرات همین مختصات را
بین Pixelهای مجاور اندازه می‌گیرد.

مشتق‌های Texture Coordinate

برای تخمین اندازه Footprint،

GPU از مشتق‌های مختصات Texture استفاده می‌کند.

این مشتق‌ها معمولاً با دو تابع شناخته می‌شوند.



ddx(uv)

ddy(uv)

شهود موضوع

اگر مختصات Texture
بین دو Pixel مجاور

تقریباً ثابت بماند،

یعنی هر Pixel فقط قسمت کوچکی
از Texture را می‌بیند.

اما اگر مختصات Texture
خیلی سریع تغییر کند،

هر Pixel قسمت بزرگی از Texture
را پوشش می‌دهد.



Small Derivative

Pixel

↓

Tiny Texture Region



Large Derivative

Pixel

↓

Huge Texture Region

UNDER THE HOOD

وارد قلب Texture Unit شدیم…

تا اینجا فقط فهمیدیم که GPU
از مشتق‌های Texture Coordinate
برای تخمین اندازه Footprint استفاده می‌کند.

اما هنوز نمی‌دانیم

ddx و ddy واقعاً چگونه محاسبه می‌شوند؟

پاسخ این سؤال ما را وارد یکی از مهم‌ترین بخش‌های معماری GPU
یعنی

Pixel Quad

خواهد کرد؛ جایی که خواهیم دید چرا Pixel Shader همیشه به‌صورت
گروه‌های ۲×۲ اجرا می‌شود و چگونه همین ساختار، امکان محاسبه
مشتق‌ها و انتخاب خودکار Mip Level را فراهم می‌کند.

Pixel Quad؛ راز محاسبه مشتق‌ها

اکنون می‌دانیم GPU برای انتخاب Mipmap از مشتق‌های مختصات
Texture استفاده می‌کند.

اما یک سؤال مهم باقی مانده است.

GPU چگونه مشتق را برای یک Pixel محاسبه می‌کند، در حالی که
هر Pixel فقط مختصات خودش را می‌شناسد؟

پاسخ این سؤال، ما را وارد یکی از مهم‌ترین ویژگی‌های معماری
GPUهای مدرن می‌کند:

Pixel Quad

مشکل یک Pixel تنها

فرض کنید فقط یک Pixel در اختیار داریم.



Pixel

UV = (0.42 , 0.77)

از روی این اطلاعات،
هیچ راهی برای فهمیدن سرعت تغییر مختصات وجود ندارد.

مشتق همیشه به مقایسه حداقل دو نقطه احتیاج دارد.

برای محاسبه مشتق به همسایه نیاز داریم

اگر مختصات Pixel کناری را نیز بدانیم،
می‌توانیم میزان تغییر را اندازه بگیریم.



Pixel A

UV = (0.42 , 0.77)



Pixel B

UV = (0.44 , 0.77)



Difference

ΔU = 0.02

همین اختلاف کوچک،
همان چیزی است که بعدها به ddx تبدیل می‌شود.

چرا چهار Pixel؟

برای محاسبه تغییرات در هر دو جهت صفحه،
تنها داشتن دو Pixel کافی نیست.

GPU باید هم تغییرات افقی
و هم تغییرات عمودی را اندازه بگیرد.



A ---- B

|      |

|      |

C ---- D

این آرایش ۲×۲
همان چیزی است که Pixel Quad نامیده می‌شود.

تعریف Pixel Quad

ساختار Quad



Screen Pixels

+---------+---------+

|    A    |    B    |

+---------+---------+

|    C    |    D    |

+---------+---------+

این چهار Pixel
همزمان داخل یک گروه اجرایی قرار می‌گیرند.

Quad چه کمکی می‌کند؟

کاربردهای Pixel Quad

قابلیت

دلیل

ddx

اختلاف Pixelهای افقی

ddy

اختلاف Pixelهای عمودی

LOD

تخمین اندازه Footprint

Texture Filtering

انتخاب Mipmap

محاسبه ddx



A --------> B

UVA

UVB


ddx

≈ UVB − UVA

بنابراین ddx
تقریب اختلاف مختصات
در جهت افقی صفحه است.

محاسبه ddy



A

↓

C


ddy

≈ UVC − UVA

ddy نیز
نرخ تغییر مختصات
در راستای عمودی صفحه را نشان می‌دهد.

یک مثال عددی



A

(0.10 , 0.20)



B

(0.14 , 0.20)



C

(0.10 , 0.24)



ddx

=

0.04



ddy

=

0.04

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

نکته بسیار مهم

UNDER THE HOOD

Quad فقط برای Texture نیست

وجود Pixel Quad
یکی از پایه‌های معماری Shaderهای مدرن است.

همین ساختار،
اجرای توابع

ddx()

و

ddy()

و همچنین بسیاری از بهینه‌سازی‌های داخلی GPU را ممکن می‌کند.

در بخش بعدی خواهیم دید
چگونه GPU از همین ddx و ddy
اندازه واقعی Footprint را محاسبه کرده،
فرمول مشهور

LOD = log₂(…)

را به دست می‌آورد
و دقیقاً Mip Level مناسب را انتخاب می‌کند.

از مشتق‌ها تا انتخاب Mip Level

اکنون دو مقدار مهم در اختیار GPU قرار دارد:

  • ddx(UV)
  • ddy(UV)

اما این دو مقدار هنوز مستقیماً شماره Mip Level را مشخص
نمی‌کنند.

ابتدا باید اندازه واقعی Footprint روی Texture تخمین زده شود.

Footprint را دوباره ببینیم

فرض کنید یک Pixel صفحه،
به جای یک Texel،
ناحیه‌ای از Texture را پوشش می‌دهد.



Texture

┌───────────────────────────────┐

████████████████████████████████

████████████████████████████████

████████████████████████████████

████████████████████████████████

████████████████████████████████

└───────────────────────────────┘

          ▲

      One Pixel

covers this region

هدف GPU این است که اندازه تقریبی این ناحیه را محاسبه کند.

مشتق‌ها چه چیزی را نشان می‌دهند؟

مشتق‌های Texture Coordinate
نرخ تغییر مختصات روی صفحه هستند.



ddx(U)

How much U changes

between neighboring pixels.



ddy(U)

How much U changes

vertically.

هرچه این تغییرات بزرگ‌تر باشند،
یعنی Pixel صفحه
قسمت بزرگ‌تری از Texture را پوشش می‌دهد.

چرا طول بردار مهم است؟

ddx و ddy
خودشان بردار هستند.

GPU ابتدا اندازه این بردارها را محاسبه می‌کند.



ddx =

(dxU , dxV)



Length

=

√(dxU² + dxV²)

این مقدار،
سرعت حرکت روی Texture
را نشان می‌دهد.

انتخاب بزرگ‌ترین جهت

معمولاً اندازه Footprint
در جهت افقی و عمودی
یکسان نیست.



Horizontal

Length = 3.2



Vertical

Length = 5.8

GPU معمولاً
بزرگ‌ترین مقدار را
مبنای انتخاب Mip قرار می‌دهد.

اندازه تقریبی Footprint

بعد از محاسبه مشتق‌ها،
Texture Unit
تخمین می‌زند که
هر Pixel تقریباً چند Texel
را پوشش می‌دهد.



Small Derivatives

↓

Footprint

≈ 1 Texel



Large Derivatives

↓

Footprint

≈ 64 Texels

چرا log₂؟

به خاطر دارید که
هر Level از Mipmap
نصف Level قبلی بود.



Level 0

1024



Level 1

512



Level 2

256



Level 3

128

بنابراین رابطه بین اندازه‌ها
به صورت توان‌های عدد ۲ است.

به همین دلیل
تابع لگاریتم پایه دو
طبیعی‌ترین انتخاب است.

شهود فرمول LOD

اگر Footprint

یک Texel باشد،

باید Level صفر انتخاب شود.

اگر اندازه Footprint

دو برابر شود،

باید یک Level پایین‌تر برویم.

اگر چهار برابر شود،

دو Level پایین‌تر.



Footprint

1 Texel

↓

LOD 0



2 Texels

↓

LOD 1



4 Texels

↓

LOD 2



8 Texels

↓

LOD 3

فرمول پایه LOD



LOD

=

log₂(Footprint Size)

این همان ایده اصلی است
که تقریباً تمام GPUهای مدرن
بر اساس آن
Level مناسب را انتخاب می‌کنند.

مثال عددی



Footprint

=

16 Texels



LOD

=

log₂(16)



LOD

=

4

بنابراین
GPU مستقیماً

Mip Level 4

را انتخاب می‌کند.

اگر LOD عدد صحیح نباشد چه می‌شود؟

در عمل،
اندازه Footprint
تقریباً هیچ‌وقت
دقیقاً توان عدد دو نیست.



LOD

=

3.42

این مقدار
بین دو Level قرار دارد.

در بخش بعد خواهیم دید
چگونه Trilinear Filtering
همین مقدار اعشاری را
به نرمی بین دو Mip ترکیب می‌کند.

نگاه سخت‌افزاری

Texture Unit
هرگز فاصله دوربین،
اندازه مدل
یا نوع Mesh را بررسی نمی‌کند.

تنها چیزی که برای انتخاب LOD لازم دارد،
مشتق‌های مختصات Texture است.

مسیر انتخاب LOD

مرحله

خروجی

Pixel Quad

همسایه‌ها

ddx / ddy

مشتق‌ها

Footprint

اندازه ناحیه

log₂

LOD

Texture Unit

انتخاب Mip

UNDER THE HOOD

نکته‌ای که معمولاً کتاب‌ها از آن عبور می‌کنند

فرمولی که در این بخش دیدیم، نسخه ساده‌شده مفهوم LOD است.

در سخت‌افزار واقعی، GPU تنها یک عدد را محاسبه نمی‌کند؛ بلکه
بردارهای مشتق، طول آن‌ها، محور غالب (Major Axis)، نسبت کشیدگی
Footprint و محدودیت‌های Sampler را نیز در نظر می‌گیرد.

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

چرا Bilinear Filtering کافی نیست؟

در بخش قبل دیدیم که GPU با استفاده از مشتق‌های
ddx
و
ddy
مقدار LOD را محاسبه می‌کند.

اما تقریباً همیشه این مقدار یک عدد اعشاری است.



LOD

=

3.37

مشکل اینجاست که Mipmap فقط Levelهای صحیح دارد.



Mip 0

Mip 1

Mip 2

Mip 3

Mip 4

Mip 5

اگر نزدیک‌ترین Level را انتخاب کنیم چه می‌شود؟

فرض کنید

LOD = 3.49

GPU ممکن است فقط

Level 3

را انتخاب کند.

اما فقط با یک حرکت بسیار کوچک دوربین،

مقدار LOD به

3.51

برسد.

اکنون GPU ناگهان

Level 4

را انتخاب می‌کند.



LOD

3.49

↓

Mip 3



Camera moves slightly



LOD

3.51

↓

Mip 4

نتیجه چیست؟

ناگهان وضوح Texture تغییر می‌کند.

این همان پدیده‌ای است که قبلاً با نام

LOD Popping

شناختیم.

ایده اصلی Trilinear Filtering

به جای انتخاب تنها یک Level،

GPU دو Level مجاور را انتخاب می‌کند.



LOD = 3.37



Mip 3



Mip 4

سپس خروجی این دو Level
با هم ترکیب می‌شود.

دو Bilinear مستقل

ابتدا روی هر Mip
یک Bilinear Filtering
انجام می‌شود.



Mip 3

↓

Bilinear Sample



Mip 4

↓

Bilinear Sample

اکنون دو رنگ مستقل
در اختیار GPU قرار دارد.

مرحله دوم

حالا GPU
این دو رنگ را
با نسبت مناسب
مخلوط می‌کند.



Color

from Mip 3



Blend



Color

from Mip 4

ضریب ترکیب از کجا می‌آید؟

بخش اعشاری LOD
دقیقاً همین ضریب را مشخص می‌کند.



LOD

=

3.37



Integer Part

3



Fraction

0.37

بنابراین

37٪

از Level چهار

و

63٪

از Level سه

استفاده می‌شود.

فرمول ترکیب



Final Color

=

(1−t)

×

MipLow



+

t

×

MipHigh

که در آن

t

همان قسمت اعشاری LOD است.

نتیجه بصری



LOD

3.00

↓

100%

Mip3



LOD

3.25

↓

75%

Mip3

25%

Mip4



LOD

3.50

↓

50%

50%



LOD

3.75

↓

25%

75%



LOD

4.00

↓

100%

Mip4

چرا Trilinear؟

Bilinear
روی دو محور Texture

(U و V)

عمل می‌کند.

Trilinear
علاوه بر این دو محور،

روی محور سوم یعنی

Mipmap Level

نیز Interpolation انجام می‌دهد.



Axis 1

U



Axis 2

V



Axis 3

Mip Level

هزینه Trilinear

هر Bilinear
چهار Texel
را می‌خواند.

Trilinear
دو Bilinear انجام می‌دهد.



Bilinear

4 Texels



Trilinear

8 Texels

آیا Trilinear دو برابر کندتر است؟

از نظر تئوری،
تعداد Sampleها دو برابر می‌شود.

اما GPUهای مدرن
این عملیات را
داخل Texture Unit
به‌شدت بهینه کرده‌اند.

مقایسه Bilinear و Trilinear

ویژگی

Bilinear

Trilinear

Mip

یک Level

دو Level

Texel Reads

4

8

LOD Popping

زیاد

تقریباً حذف می‌شود

کیفیت

متوسط

بالا

UNDER THE HOOD

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

Texture Unit
ابتدا مقدار LOD را محاسبه می‌کند.

سپس دو Level مجاور را انتخاب می‌کند،
برای هرکدام یک Bilinear Sample می‌گیرد
و در پایان با استفاده از بخش اعشاری LOD
نتیجه را Interpolate می‌کند.



ddx / ddy

↓

LOD

↓

Mip 3

↓

Bilinear



Mip 4

↓

Bilinear

↓

Linear Blend

↓

Final Color

در فصل بعد خواهیم دید که حتی Trilinear نیز برای سطوحی که با زاویه
شدید دیده می‌شوند کافی نیست، زیرا Footprint دیگر مربع نیست، بلکه
به یک بیضی کشیده تبدیل می‌شود. همین مسئله دلیل تولد
Anisotropic Filtering
است.

آیا Trilinear Filtering پایان ماجراست؟

تا اینجا به نظر می‌رسد تمام مشکلات Texture Sampling حل شده‌اند.

  • ✔ Mipmap تولید شد.
  • ✔ GPU مقدار LOD را محاسبه کرد.
  • ✔ دو Mip با Trilinear ترکیب شدند.

اما هنوز یک مشکل بسیار مهم باقی مانده است.

اگر سطح با زاویه زیاد دیده شود چه اتفاقی می‌افتد؟

یک مثال واقعی

فرض کنید روبه‌روی یک دیوار ایستاده‌اید.



Camera

↓

████████████████████████

████████████████████████

████████████████████████

در این حالت تقریباً تمام Pixelها
اندازه مشابهی از Texture را مشاهده می‌کنند.

حالا دوربین را بچرخانید

اکنون دیوار را با زاویه بسیار کم نگاه می‌کنیم.



Camera

   \

    \

     \

██████████████████████████

در این حالت شکل Footprint کاملاً تغییر می‌کند.

فرض Bilinear و Trilinear

تقریباً تمام مطالبی که تاکنون بررسی کردیم
یک فرض پنهان داشتند.

فرض می‌کردیم Footprint تقریباً مربع است.



Ideal Footprint

┌───────┐

│       │

│       │

└───────┘

اما در واقعیت…

هنگام مشاهده سطح با زاویه،
Footprint دیگر مربع نیست.



Real Footprint

┌─────────────────────────────┐

│                             │

└─────────────────────────────┘

در بسیاری از موارد،
این ناحیه ده‌ها برابر کشیده‌تر از عرض خود است.

چرا این موضوع مهم است؟

Trilinear فقط یک Mip Level انتخاب می‌کند.

یعنی فرض می‌کند
Resolution موردنیاز
در تمام جهت‌ها یکسان است.



Texture Detail

←──────────────→



Same Resolution

in every direction

اما Footprint کشیده
چنین رفتاری ندارد.

محور بزرگ و محور کوچک

هر Footprint را می‌توان با دو محور توصیف کرد.



        Minor Axis

            ↑

            │

────────────┼────────────

            │

            ▼



<────────────── Major Axis ──────────────>

یکی از این محورها
بسیار بزرگ‌تر از دیگری است.

مشکل یک LOD واحد

اگر GPU فقط یک Level انتخاب کند،
باید بین دو حالت یکی را انتخاب کند.

نتیجه انتخاب یک LOD

انتخاب

نتیجه

Mip بزرگ‌تر

Aliasing

Mip کوچک‌تر

Blur شدید

مثال باند فرودگاه

مشهورترین مثال،
Texture آسفالت باند فرودگاه است.

نزدیک دوربین،
خطوط بسیار واضح هستند.

اما هرچه دورتر می‌شوند،
Texture تقریباً به یک نوار بسیار باریک تبدیل می‌شود.



Near Camera

██████████████████████



Far Away

====================

دقیقاً همینجا Trilinear شکست می‌خورد.

آثار بصری

نشانه‌های کمبود Anisotropic Filtering

Artifact

توضیح

Blur

از دست رفتن جزئیات دوردست

Shimmering

لرزش هنگام حرکت دوربین

Aliasing

خطوط و Patternهای کاذب

Moiré

ایجاد موج‌های مصنوعی

ایده اصلی Anisotropic Filtering

به جای اینکه Footprint را
یک مربع فرض کنیم،

GPU شکل واقعی آن را
در نظر می‌گیرد.



Square Approximation

□



Real Approximation

══════════════════

سپس Sampleها
در امتداد محور بزرگ Footprint
توزیع می‌شوند.

توزیع Sampleها



Without AF

×

×

×

×



With AF

×──×──×──×──×──×──×

به جای چهار Sample نزدیک،
GPU چندین Sample را
در امتداد محور کشیده قرار می‌دهد.

نسبت Anisotropy

اگر طول محور بزرگ
چهار برابر محور کوچک باشد،

نسبت Anisotropy برابر است با:



Major Axis

16



Minor Axis

4



Ratio

=

4 : 1

مقادیر رایج

سطوح رایج Anisotropic Filtering

تنظیم

بیشترین نسبت

2:1

4:1

8:1

16×

16:1

UNDER THE HOOD

Trilinear و Anisotropic رقیب هم نیستند

یکی از رایج‌ترین برداشت‌های اشتباه این است که
Anisotropic Filtering جایگزین Trilinear Filtering می‌شود.

در واقع چنین نیست.



Texture Coordinate

↓

ddx / ddy

↓

LOD

↓

Two Neighbor Mips

↓

Trilinear Filtering

↓

Anisotropic Sample Distribution

↓

Final Color

در GPUهای مدرن، Anisotropic Filtering معمولاً **بر پایه Trilinear Filtering** ساخته می‌شود؛ یعنی ابتدا Mip مناسب انتخاب می‌شود و سپس تعداد و محل Sampleها در امتداد محور بزرگ Footprint تنظیم می‌گردد.

Footprint واقعی یک مربع نیست

تا اینجا برای ساده شدن بحث،
Footprint را تقریباً یک مربع فرض کردیم.

اما GPU چنین فرضی نمی‌کند.

در واقعیت، هر Pixel روی صفحه
معمولاً ناحیه‌ای چهارضلعی یا تقریباً بیضوی
از Texture را پوشش می‌دهد.



Simple Approximation

┌────────┐

│        │

└────────┘



Real Footprint

      ________

   .-'        '-.

  /              \

  \              /

   '-.________.-'

این شکل از کجا به دست می‌آید؟

تمام اطلاعات موردنیاز
داخل دو بردار مشتق قرار دارد.



ddx

(dxU , dxV)



ddy

(dyU , dyV)

این دو بردار،
دو ضلع اصلی ناحیه‌ای را تشکیل می‌دهند
که یک Pixel روی Texture اشغال می‌کند.

اولین تقریب: متوازی‌الاضلاع

اگر دو بردار مشتق را کنار هم رسم کنیم،
ناحیه‌ای به شکل متوازی‌الاضلاع ساخته می‌شود.



         ddy

        ↑

       /

      /

A ─────────► ddx

 \

  \

   B

این شکل،
تقریب بسیار خوبی از Footprint واقعی است.

چرا از بیضی صحبت می‌کنیم؟

بسیاری از GPUها
برای ساده‌تر شدن محاسبات Filtering،
این متوازی‌الاضلاع را
به یک بیضی معادل تبدیل می‌کنند.



Parallelogram

╱────────╲

╲────────╱



↓

Approximation



     _______

   /         \

  |           |

   \_________/

به همین دلیل در مقالات علمی،
اصطلاح

Elliptical Footprint

بسیار رایج است.

محور بزرگ و محور کوچک چگونه پیدا می‌شوند؟

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



|ddx|

=

3.1



|ddy|

=

9.4

در این مثال،
محور عمودی تقریباً سه برابر
محور افقی است.

محاسبه نسبت Anisotropy



Anisotropy

=

Major Axis

────────────

Minor Axis

اگر این نسبت

6.2

باشد،
یعنی Footprint حدود شش برابر
در یک جهت کشیده‌تر است.

چرا Sample بیشتری لازم است؟

فرض کنید طول Footprint
ده برابر عرض آن باشد.



□□□□□□□□□□□□□□□

□

اگر فقط چهار Sample بگیریم،
بخش بزرگی از Texture
اصلاً خوانده نخواهد شد.

راه‌حل GPU

Sampleها
در امتداد محور بزرگ
پخش می‌شوند.



Without AF

×

×

×

×





With AF

×

──×

────×

──────×

────────×

──────────×

────────────×

ترتیب عملیات



Determine

Footprint



↓

Major Axis



↓

Choose

Sample Count



↓

Sample Along Axis



↓

Average

Results

GPU چگونه تعداد Sample را انتخاب می‌کند؟

هرچه نسبت کشیدگی بیشتر باشد،
Sample بیشتری لازم است.

نمونه‌ای از انتخاب Sample

نسبت

Sample تقریبی

Bilinear

2 Sample

4 Sample

8 Sample

16×

16 Sample

چرا همیشه Sample نامحدود نمی‌گیریم؟

چون هر Sample
یعنی Texture Fetch جدید.

تعداد زیاد Sample
هم پهنای باند حافظه را افزایش می‌دهد
و هم بار Texture Unit را بیشتر می‌کند.



More Samples

↓

Higher Quality



More Samples

↓

More Memory Reads

چرا اکثر GPUها تا 16× محدود هستند؟

بررسی‌های تجربی نشان داده است
که پس از حدود

16×

افزایش کیفیت بسیار کم می‌شود،
اما هزینه سخت‌افزاری همچنان افزایش پیدا می‌کند.

کیفیت نسبی

AF

کیفیت

هزینه

متوسط

کم

خوب

متوسط

بسیار خوب

زیاد

16×

نزدیک به حداکثر

زیاد

UNDER THE HOOD

واقعاً داخل Texture Unit چه اتفاقی می‌افتد؟

در سخت‌افزارهای مدرن،
Anisotropic Filtering
به معنی اجرای یک الگوریتم ثابت و واحد نیست.

هر سازنده GPU
(NVIDIA، AMD، Intel و Apple)
تقریب مخصوص خود را برای محاسبه Footprint،
انتخاب محور غالب،
تعداد Sampleها و محل قرارگیری آن‌ها پیاده‌سازی می‌کند.



Pixel Quad

↓

ddx / ddy

↓

Footprint

↓

Major Axis

↓

Anisotropy Ratio

↓

Choose Samples

↓

Multiple Trilinear Fetches

↓

Weighted Average

↓

Final Pixel

به همین دلیل ممکن است خروجی دو GPU مختلف با وجود استفاده از تنظیم
16× AF
کاملاً یکسان نباشد؛ زیرا استاندارد API تنها نتیجه مورد انتظار را مشخص
می‌کند، نه نحوه دقیق پیاده‌سازی داخلی.

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

تاکنون هر قسمت از فرآیند Sampling را جداگانه بررسی کردیم.

اکنون زمان آن رسیده است که کل مسیر اجرای یک دستور
texture()
را از ابتدا تا انتها مشاهده کنیم.

برخلاف تصور رایج،
Texture Sampling تنها یک خواندن ساده از حافظه نیست؛
بلکه زنجیره‌ای از تصمیم‌گیری‌ها، محاسبات ریاضی و فیلترگذاری
در مدت چند نانوثانیه انجام می‌شود.

نمای کلی Pipeline



Texture()

      │

      ▼

Receive UV

      │

      ▼

Pixel Quad

      │

      ▼

ddx / ddy

      │

      ▼

Footprint

      │

      ▼

LOD

      │

      ▼

Mip Selection

      │

      ▼

Filtering

      │

      ▼

Return Color

مرحله ۱
دریافت مختصات Texture

Pixel Shader مختصات UV را
به Texture Unit ارسال می‌کند.



float4 color =

Texture.Sample

(

Sampler,

uv

);

این تنها اطلاعاتی نیست که Texture Unit دریافت می‌کند.

مرحله ۲
تشکیل Pixel Quad

GPU چهار Fragment مجاور
را کنار هم قرار می‌دهد.



A  B

C  D

این گروه کوچک
مبنای تمام محاسبات مشتق است.

مرحله ۳
محاسبه مشتق‌ها



ddx(uv)



ddy(uv)

اکنون GPU می‌داند
مختصات Texture
روی صفحه
با چه سرعتی تغییر می‌کنند.

مرحله ۴
ساخت Footprint

مشتق‌ها
اندازه تقریبی ناحیه‌ای را
که هر Pixel از Texture پوشش می‌دهد
مشخص می‌کنند.



ddx

+

ddy

↓

Footprint

مرحله ۵
محاسبه LOD



LOD

=

log₂

(

Footprint

)

نتیجه معمولاً
یک مقدار اعشاری است.

مرحله ۶
انتخاب Mipmap



LOD

3.42



Mip3



Mip4

دو Level مجاور
برای Filtering آماده می‌شوند.

مرحله ۷
Bilinear Filtering

روی هر Mip،
چهار Texel
خوانده می‌شود.



Texel

●──●

│  │

●──●

مرحله ۸
Trilinear Filtering

خروجی دو Bilinear
با نسبت اعشاری LOD
ترکیب می‌شود.



Mip3

↓

Color A



Mip4

↓

Color B



↓

Blend

مرحله ۹
Anisotropic Filtering (در صورت نیاز)

اگر Footprint کشیده باشد،
Texture Unit
چندین Sample
در امتداد محور اصلی
دریافت می‌کند.



×

──×

────×

──────×

────────×

مرحله ۱۰
بازگرداندن رنگ نهایی

پس از پایان تمام فیلترها،
فقط یک رنگ نهایی
به Pixel Shader برمی‌گردد.



Texture Unit

↓

RGBA

↓

Pixel Shader

خلاصه کل فرآیند

مراحل داخلی Texture Sampling

مرحله ورودی خروجی
Texture Coordinate UV مختصات اولیه
Pixel Quad ۴ Fragment همسایه‌ها
Derivatives Quad ddx / ddy
Footprint مشتق‌ها اندازه ناحیه
LOD Footprint Mip Level
Filtering Mipها رنگ نهایی

همه این مراحل چقدر طول می‌کشند؟

از دید برنامه‌نویس،
تنها یک فراخوانی
texture()
نوشته می‌شود.

اما در سطح سخت‌افزار،
تمام مراحل قبلی
به صورت Pipeline و موازی
داخل Texture Unit اجرا می‌شوند.

UNDER THE HOOD

آنچه واقعاً هنگام اجرای texture() رخ می‌دهد



Pixel Shader

      │

      ▼

Texture Coordinate

      │

      ▼

Texture Unit

      │

      ├── Pixel Quad

      ├── ddx / ddy

      ├── Footprint

      ├── LOD

      ├── Mip Selection

      ├── Bilinear

      ├── Trilinear

      ├── Anisotropic

      ▼

Filtered Color

      │

      ▼

Pixel Shader Continues

برای برنامه‌نویس، همه این مراحل تنها در قالب یک تابع ساده دیده می‌شوند؛ اما درون GPU، ده‌ها مدار تخصصی به‌صورت هم‌زمان و Pipeline شده کار می‌کنند تا رنگ نهایی را در کمترین زمان ممکن تولید کنند.

Sampler State چیست؟

تا اینجا تقریباً تمام مراحل داخلی Texture Sampling را بررسی کردیم.

اما هنوز یک سؤال مهم باقی مانده است.

GPU از کجا می‌فهمد Texture را چگونه بخواند؟

فرض کنید مختصات UV خارج از محدوده
0.0 → 1.0
باشد.

یا فرض کنید بخواهیم از Bilinear استفاده کنیم،
یا Trilinear،
یا Anisotropic.

تمام این رفتارها توسط شیئی به نام
Sampler State
کنترل می‌شوند.

Texture و Sampler یکی نیستند

یکی از رایج‌ترین اشتباهات برنامه‌نویسان تازه‌کار،
یکسان دانستن Texture و Sampler است.

تفاوت Texture و Sampler

Texture

Sampler

داده تصویری

قوانین خواندن داده

Texelها

Filtering

Mipmapها

Address Mode

در حافظه ذخیره می‌شود

مجموعه تنظیمات Sampling

یک تشبیه ساده

Texture را مانند یک کتاب در نظر بگیرید.

Sampler تعیین می‌کند که این کتاب
چگونه خوانده شود.



Texture

↓

Image Data



Sampler

↓

Reading Rules

Sampler چه تنظیماتی دارد؟

مهم‌ترین تنظیمات Sampler

گزینه

وظیفه

Min Filter

Minification

Mag Filter

Magnification

Mip Filter

انتخاب بین Mipmapها

Address Mode

رفتار UV خارج از محدوده

Max Anisotropy

کیفیت AF

LOD Bias

تغییر دستی LOD

Border Color

رنگ خارج از Texture

اولین تصمیم Sampler

اگر مختصات UV از محدوده
استاندارد خارج شود چه باید کرد؟



UV

=

1.35



or



UV

=

−0.42

پاسخ این سؤال را
Address Mode مشخص می‌کند.

انواع Address Mode

حالت‌های رایج Addressing

Mode

رفتار

Wrap

تکرار Texture

Clamp

قفل شدن روی لبه

Mirror

تکرار آینه‌ای

Border

استفاده از Border Color

Wrap Mode

رایج‌ترین حالت Sampling است.



UV

1.20

↓

0.20



UV

2.65

↓

0.65

مختصات همیشه به بازه
صفر تا یک بازگردانده می‌شود.

Clamp Mode

مختصات خارج از Texture
روی نزدیک‌ترین لبه قفل می‌شود.



UV

−0.30

↓

0.00



UV

1.72

↓

1.00

Mirror Mode

در هر بار تکرار،
Texture برعکس می‌شود.



Texture

ABCDE



Repeat

ABCDE

EDCBA

ABCDE

EDCBA

Border Mode

خارج از Texture،
هیچ Texelی خوانده نمی‌شود.

در عوض،
رنگ Border بازگردانده می‌شود.



Texture

□□□□□□



Outside

↓

Border Color

مقایسه حالت‌ها

انتخاب مناسب Address Mode

Mode

کاربرد

Wrap

Terrain، Tile، Brick

Clamp

UI، Shadow Map

Mirror

Patternهای متقارن

Border

برخی Shadow Techniques

UNDER THE HOOD

Sampler State قبل از Texture Fetch اجرا می‌شود

Texture Unit پیش از آنکه حتی یک Texel را از حافظه بخواند، ابتدا Sampler State را بررسی می‌کند. اگر مختصات UV خارج از محدوده باشند، Address Mode آن‌ها را اصلاح می‌کند؛ سپس Filtering، انتخاب Mipmap و سایر مراحل آغاز می‌شوند.



UV

↓

Address Mode

↓

Valid UV

↓

LOD

↓

Filtering

↓

Final Color

به همین دلیل، **Texture و Sampler دو منبع مستقل هستند**؛ یک Texture می‌تواند با Samplerهای مختلف (Wrap، Clamp، Anisotropic و…) استفاده شود، بدون اینکه داده‌های Texture تغییری کنند.

Filter Mode چیست؟

پس از اینکه Address Mode مختصات UV را اصلاح کرد،
Texture Unit باید تصمیم بگیرد
رنگ نهایی چگونه محاسبه شود.

آیا فقط یک Texel خوانده شود؟

یا چهار Texel؟

یا هشت Texel؟

یا حتی چندین Sample در امتداد یک محور؟

این تصمیم توسط
Filter Mode
گرفته می‌شود.

Filter دقیقاً چه چیزی را مشخص می‌کند؟



Texture Coordinate

↓

Sampler

↓

Which Texels?

↓

How Many?

↓

How To Blend?

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

سه نوع Filter مستقل

برخلاف تصور بسیاری از افراد،
Sampler فقط یک Filter ندارد.

Filterهای مستقل Sampler

Filter

زمان استفاده

Min Filter

هنگام کوچک شدن Texture

Mag Filter

هنگام بزرگ شدن Texture

Mip Filter

بین Mipmapها

Point Filtering

ساده‌ترین روش Sampling است.

فقط نزدیک‌ترین Texel خوانده می‌شود.



●

Only One Texel

Bilinear Filtering

چهار Texel مجاور
خوانده می‌شوند.



●────●

│    │

│ X  │

│    │

●────●

رنگ نهایی
میانگین وزن‌دار
این چهار Texel است.

Trilinear Filtering

ابتدا دو Bilinear مستقل
روی دو Mipmap مجاور اجرا می‌شوند.

سپس خروجی آن‌ها
با هم ترکیب می‌شود.



Mip A

↓

Bilinear



Mip B

↓

Bilinear



↓

Blend

Anisotropic Filtering

پیشرفته‌ترین Filter سخت‌افزاری
برای Texture Sampling است.

Sampleها
در امتداد محور اصلی Footprint
توزیع می‌شوند.



×

──×

────×

──────×

────────×

ترکیب Filterها

Filterهای Min، Mag و Mip
مستقل از هم هستند.

نمونه ترکیب Filterها

Min

Mag

Mip

نتیجه

Point

Point

Point

Nearest Sampling

Linear

Linear

Point

Bilinear + Nearest Mip

Linear

Linear

Linear

Trilinear

Anisotropic

Linear

Linear

Full AF

چرا Min و Mag جدا هستند؟

چون رفتار Texture
هنگام بزرگ شدن
کاملاً با کوچک شدن متفاوت است.



Magnification

1 Texel

↓

Many Pixels



Minification

Many Texels

↓

1 Pixel

به همین دلیل
ممکن است Min Filter
بسیار پیچیده‌تر از Mag Filter باشد.

این تنظیمات در API چگونه دیده می‌شوند؟

نمونه Filterهای رایج در APIها

نام

توضیح

Point

بدون Interpolation

Linear

Bilinear

Linear + Linear Mip

Trilinear

Anisotropic

سخت‌افزاری

مقایسه کیفیت

کیفیت و هزینه Filterها

Filter

کیفیت

هزینه

Point

کم

بسیار کم

Bilinear

خوب

کم

Trilinear

بسیار خوب

متوسط

16× AF

عالی

زیاد

UNDER THE HOOD

Sampler State در واقع یک «برنامه کوچک» برای Texture Unit است

Texture Unit هنگام اجرای دستور texture() فقط به Texture نگاه نمی‌کند. ابتدا Sampler State را می‌خواند تا بداند:

  • اگر UV خارج از محدوده بود چه رفتاری داشته باشد.
  • برای Minification از چه فیلتری استفاده کند.
  • برای Magnification از چه فیلتری استفاده کند.
  • آیا بین Mipmapها Interpolation انجام شود یا خیر.
  • آیا Anisotropic Filtering فعال باشد.
  • حداکثر نسبت Anisotropy چند باشد.


Texture

      +

Sampler State

        │

        ▼

Texture Unit

        │

        ▼

Filtered Result

به همین دلیل در موتورهای بازی و APIهایی مانند Direct3D و Vulkan، **Texture Resource** و **Sampler State** دو شیء مستقل هستند و می‌توان یک Texture را با Samplerهای مختلف، بدون کپی کردن داده‌ها، استفاده کرد.

LOD Bias چیست؟

تاکنون فرض کردیم که GPU همیشه مناسب‌ترین Mip Level را انتخاب می‌کند.

اما گاهی برنامه‌نویس یا موتور بازی می‌خواهد
این انتخاب را کمی تغییر دهد.

اگر بخواهیم همیشه Texture کمی شارپ‌تر یا کمی نرم‌تر دیده شود چه باید کرد؟

پاسخ این سؤال،
LOD Bias
است.

تعریف LOD Bias

فرمول



Final LOD

=

Computed LOD

+

LOD Bias

Bias منفی

اگر Bias منفی باشد،
GPU به سمت Mipmapهای بزرگ‌تر می‌رود.



LOD

4.0



Bias

−1



Final

3.0

نتیجه:

  • ✔ تصویر شارپ‌تر
  • ✔ جزئیات بیشتر
  • ✖ احتمال Aliasing بیشتر

Bias مثبت



LOD

4.0



Bias

+1



Final

5.0

نتیجه:

  • ✔ تصویر نرم‌تر
  • ✔ Aliasing کمتر
  • ✖ جزئیات کمتر

کاربردهای LOD Bias

کاربردهای رایج

سناریو Bias

Sharpen Texture

منفی

کاهش Shimmering

مثبت

تنظیم هنری پروژه

هر دو

MinLOD و MaxLOD

گاهی لازم است GPU
اجازه نداشته باشد
از تمام Mipmapها استفاده کند.

برای همین دو محدودیت تعریف می‌شود.



LOD

↓

Clamp

↓

MinLOD

↓

MaxLOD

مثال MinLOD



Computed LOD

1.4



MinLOD

3



Final LOD

3

حتی اگر GPU
بخواهد Mip 1 را انتخاب کند،
پایین‌تر از Mip 3 نخواهد رفت.

مثال MaxLOD



Computed

7.2



MaxLOD

5



Final

5

چرا این محدودیت‌ها مفید هستند؟

کاربرد MinLOD و MaxLOD

قابلیت

کاربرد

MinLOD

جلوگیری از Texture بسیار شارپ

MaxLOD

جلوگیری از Texture بسیار تار

هر دو

کنترل هنری و بهینه‌سازی

Comparison Sampler

نوع خاصی از Sampler وجود دارد که
به جای بازگرداندن رنگ،
نتیجه یک مقایسه را برمی‌گرداند.

این Sampler
تقریباً همیشه برای

Shadow Mapping

استفاده می‌شود.



Depth Texture

↓

Compare

↓

Visible ?

↓

0 or 1

مثال



Current Depth

0.42



Shadow Map

0.40



0.42 >

0.40



Pixel

In Shadow

UNDER THE HOOD

Sampler فقط فیلتر انتخاب نمی‌کند

در GPUهای مدرن، Sampler State مجموعه‌ای از قوانین است که قبل از هر Texture Fetch اجرا می‌شود. این قوانین مشخص می‌کنند مختصات چگونه اصلاح شوند، چه Mipmapی انتخاب شود، LOD چگونه تغییر کند، چه فیلتری اعمال شود و حتی در بعضی حالت‌ها آیا مقدار خوانده‌شده باید با یک مقدار مرجع مقایسه شود یا خیر.



UV

↓

Address Mode

↓

LOD Bias

↓

Clamp LOD

↓

Filtering

↓

Comparison (Optional)

↓

Final Result

به همین دلیل Sampler را می‌توان «کنترل‌کننده رفتار Texture Unit» دانست، نه صرفاً مجموعه‌ای از گزینه‌های Filtering.

چرا Texture Sampling این‌قدر سریع است؟

اگر به تمام مطالب این فصل نگاه کنیم،
ممکن است تصور کنیم Texture Sampling
عملیاتی بسیار سنگین است.

  • محاسبه مشتق‌ها
  • محاسبه LOD
  • انتخاب Mipmap
  • Bilinear یا Trilinear Filtering
  • Anisotropic Filtering
  • خواندن چندین Texel از حافظه

سؤال طبیعی این است:

اگر هر Pixel چندین Texel از حافظه بخواند،
چرا GPU به شدت کند نمی‌شود؟

پاسخ در معماری حافظه GPU نهفته است.

دسترسی به حافظه بسیار گران است

واحدهای پردازشی GPU
می‌توانند میلیاردها عملیات محاسباتی
را در هر ثانیه انجام دهند.

اما دسترسی مستقیم به حافظه اصلی
(VRAM)
چندین برابر کندتر است.



Shader Core

↓

Needs Texel



VRAM

(High Latency)

اگر هر Texture Fetch
مستقیماً به VRAM مراجعه کند،
بیشتر زمان GPU صرف انتظار خواهد شد.

ایده Cache

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



Texture Unit

      │

      ▼

Texture Cache

      │

      ▼

VRAM

این حافظه کوچک اما بسیار سریع،
همان Texture Cache است.

تعریف Texture Cache

Cache Hit و Cache Miss

هر درخواست Texture
ابتدا Cache را بررسی می‌کند.



Texture Fetch

      │

      ▼

Texture Cache

   │        │

Hit       Miss

 │          │

 ▼          ▼

Fast      Read VRAM

Cache Hit

اگر Texel موردنیاز
داخل Cache باشد،
نتیجه تقریباً بلافاصله
بازگردانده می‌شود.

  • ✔ بدون مراجعه به VRAM
  • ✔ تأخیر بسیار کم
  • ✔ مصرف انرژی کمتر

Cache Miss

اگر Texel داخل Cache نباشد،
Texture Unit مجبور است
آن را از VRAM بخواند.



Cache

✖



↓

VRAM Read



↓

Cache Update

پس از خواندن،
Texel داخل Cache ذخیره می‌شود
تا درخواست‌های بعدی سریع‌تر باشند.

چرا Cache مؤثر است؟

زیرا Pixelهای مجاور
معمولاً Texelهای مجاور را
Sample می‌کنند.



Pixels

A B C D



↓

Need



Texels

20

21

22

23

بنابراین احتمال استفاده مجدد
از همان داده‌ها بسیار زیاد است.

Spatial Locality

این ویژگی را
Spatial Locality
می‌نامند.

Temporal Locality

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



Texel

25

↓

Used

↓

Used Again

↓

Used Again

این ویژگی را
Temporal Locality
می‌نامند.

مزایای Texture Cache

تأثیر Texture Cache

ویژگی

نتیجه

Cache Hit

کاهش زمان Sampling

کاهش VRAM Reads

کاهش پهنای باند

مصرف انرژی

کمتر

Throughput

بیشتر

UNDER THE HOOD

Texture Unit تقریباً هیچ‌وقت فقط یک Texel نمی‌خواند

یکی از مهم‌ترین ویژگی‌های معماری GPU این است که هنگام وقوع یک Cache Miss، معمولاً تنها Texel درخواست‌شده از حافظه خوانده نمی‌شود.

در عوض، سخت‌افزار یک **بلوک کامل از Texelهای مجاور** را وارد Cache می‌کند؛ زیرا احتمال بسیار زیادی وجود دارد که Pixelهای بعدی به همان ناحیه نیاز داشته باشند.



Request

Texel 25

        │

        ▼

VRAM

        │

        ▼

Read Block

24 25 26 27
40 41 42 43

        │

        ▼

Texture Cache

همین اصل ساده، پایه‌ی تمام بهینه‌سازی‌های Texture Sampling در GPUهای مدرن است و در بخش بعد خواهیم دید که چگونه این بلوک‌ها در حافظه به شکلی خاص (Swizzled / Morton Order) ذخیره می‌شوند تا احتمال Cache Hit به حداکثر برسد.

یک باور اشتباه

بسیاری تصور می‌کنند وقتی Shader یک Texel درخواست می‌کند،
GPU دقیقاً همان یک Texel را از حافظه می‌خواند.

در واقع تقریباً هیچ GPU مدرنی چنین کاری انجام نمی‌دهد.

دلیل این موضوع بسیار ساده است.

خواندن یک Texel یا خواندن چند Texel مجاور،
تقریباً هزینه مشابهی برای دسترسی به VRAM دارد.

Cache Line چیست؟

بنابراین GPU به جای انتقال یک Texel،
یک بلوک کامل از Texelهای مجاور را منتقل می‌کند.

Block Fetch

فرض کنید Shader فقط Texel شماره ۱۸ را نیاز دارد.



Requested

↓

18

اما GPU ممکن است این بلوک را وارد Cache کند.



16 17 18 19

20 21 22 23

چون احتمال زیادی وجود دارد
که Pixelهای بعدی
همین Texelهای اطراف را نیز بخواهند.

چرا Pixelهای مجاور مهم هستند؟

Pixel Shader معمولاً روی Pixelهای کنار هم اجرا می‌شود.



A B C D

E F G H

این Pixelها
تقریباً همیشه
Texelهای مجاور را Sample می‌کنند.

اگر Texture به صورت خطی ذخیره شود…

فرض کنید Texture
به شکل سطر به سطر
در حافظه ذخیره شده باشد.



0  1  2  3

4  5  6  7

8  9 10 11

12 13 14 15

از نظر منطقی درست است،
اما از نظر Cache چندان مناسب نیست.

مشکل Layout خطی

Bilinear Filtering
معمولاً چهار Texel مجاور را می‌خواند.



5

6

9

10

در حافظه خطی،
این چهار Texel
همیشه کنار هم قرار ندارند.

Swizzled Texture Layout

برای افزایش احتمال Cache Hit،
GPU Texture را
به صورت بلوک‌های دوبعدی
در حافظه ذخیره می‌کند.



┌──────┬──────┐

│0 1   │2 3   │

│4 5   │6 7   │

├──────┼──────┤

│8 9   │10 11 │

│12 13 │14 15 │

└──────┴──────┘

مزیت Swizzle

حالا Bilinear Filtering
معمولاً تمام Texelهای موردنیاز را
از همان Cache Line
دریافت می‌کند.

بنابراین تعداد Cache Missها
به شدت کاهش پیدا می‌کند.

Morton Order (Z-Order)

بسیاری از GPUها
از الگویی به نام

Morton Order

برای ذخیره Texture استفاده می‌کنند.

در این روش،
Texelهای نزدیک در فضای دوبعدی،
تا حد امکان نزدیک هم
در حافظه نیز قرار می‌گیرند.



Memory Order

0

1

4

5

2

3

6

7

...

چرا Z-Order؟

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

بنابراین Pixelهای مجاور
معمولاً Cache Lineهای مشترک
خواهند داشت.

نتیجه نهایی

اثر Layout مناسب

ویژگی

نتیجه

Cache Hit

بیشتر

VRAM Access

کمتر

Bandwidth

کمتر مصرف می‌شود

Texture Sampling

سریع‌تر

UNDER THE HOOD

Textureها تقریباً هیچ‌وقت به صورت خطی در VRAM ذخیره نمی‌شوند

در بسیاری از GPUهای مدرن، قبل از اینکه Texture در حافظه قرار گیرد، Layout آن به شکلی تغییر داده می‌شود که دسترسی دوبعدی برای Cache بهینه شود. این فرآیند با نام‌هایی مانند Swizzling، Tiling یا Morton Layout شناخته می‌شود.



Image

      │

      ▼

Tile / Swizzle

      │

      ▼

VRAM

      │

      ▼

Texture Cache

      │

      ▼

Texture Unit

این سازمان‌دهی حافظه یکی از دلایل اصلی سرعت بالای Texture Sampling است. اگر Textureها مانند آرایه‌های دوبعدی معمولی ذخیره می‌شدند، نرخ Cache Miss به‌مراتب بیشتر بود و بخش قابل توجهی از توان GPU صرف انتظار برای دریافت داده از VRAM می‌شد.

چرا Cache دوبعدی طراحی شده است؟

برنامه‌های معمولی CPU
اغلب داده‌ها را به صورت خطی پردازش می‌کنند.



0

↓

1

↓

2

↓

3

↓

4

↓

5

اما Textureها ماهیتی دوبعدی دارند.

الگوی دسترسی Pixel Shader

Pixelهای مجاور،
تقریباً همیشه Texelهای مجاور را درخواست می‌کنند.



Pixels

A  B  C

D  E  F

↓

↓

↓

Texels

30 31 32

46 47 48

این رفتار،
پایه طراحی Texture Cache است.

Cache Coherency

اگر Pixelهای مجاور،
به داده‌های مجاور دسترسی داشته باشند،
می‌گوییم دسترسی دارای

Cache Coherency

است.

نمونه خوب



30 31 32

30 31 32

31 32 33

30 31 32

تقریباً تمام Sampleها
داخل همان چند Cache Line قرار دارند.

نمونه بد



5

930

48

712

140

3

در این حالت تقریباً هر Sample
باعث Cache Miss می‌شود.

چه چیزهایی Cache را خراب می‌کنند؟

دلایل کاهش Cache Hit

عامل

اثر

Noise شدید

پرش زیاد بین Texelها

Random UV

کاهش Locality

Procedural Sampling

Hit Rate پایین

Textureهای بسیار بزرگ

جابجایی مداوم Cache

چه چیزهایی Cache را تقویت می‌کنند؟

بهترین شرایط برای Texture Cache

ویژگی

نتیجه

UV پیوسته

Hit زیاد

Mesh منظم

Sampling منظم

Mipmap

Locality بهتر

Swizzled Layout

Cache بسیار مؤثر

UNDER THE HOOD

راز سرعت Texture Sampling فقط Texture Unit نیست

اگرچه Texture Unit مدارهای بسیار پیچیده‌ای برای Filtering دارد، اما بدون یک Cache کارآمد، بیشتر زمان خود را منتظر دریافت داده از VRAM می‌گذراند.

در عمل، سرعت بالای Texture Sampling حاصل همکاری سه بخش است:



Swizzled Memory

        │

        ▼

Texture Cache

        │

        ▼

Texture Unit

        │

        ▼

Filtering Hardware

هر کدام از این بخش‌ها برای دیگری طراحی شده‌اند؛ به همین دلیل حذف یا ضعف هر کدام، کارایی کل سیستم را به‌طور محسوسی کاهش می‌دهد.

بهترین روش‌های Texture Sampling

اکنون تقریباً تمام مسیر Texture Sampling را می‌شناسیم.

اما دانستن معماری کافی نیست.

یک Graphics Programmer حرفه‌ای باید بداند چگونه از این معماری
بیشترین کارایی را بگیرد.

هدف فقط اجرای صحیح برنامه نیست؛

هدف استفاده بهینه از سخت‌افزار GPU است.

اصل اول

Cache Friendly باشید

همیشه سعی کنید Pixelهای مجاور،
Texture Coordinateهای مجاور داشته باشند.



GOOD

0.10

0.11

0.12

0.13



BAD

0.10

0.82

0.04

0.71

هرچه Locality بیشتر باشد،
احتمال Cache Hit نیز بیشتر خواهد بود.

اصل دوم

از Mipmap استفاده کنید

خاموش کردن Mipmap تقریباً همیشه تصمیم اشتباهی است.

اثر Mipmap

فعال

نتیجه

Aliasing کمتر

Bandwidth کمتر

Cache بهتر

اصل سوم

Anisotropic Filtering را هوشمندانه انتخاب کنید

فعال بودن 16× AF برای تمام Textureها
همیشه بهترین انتخاب نیست.

سطوحی که تقریباً عمود بر دوربین هستند،
از AF سود بسیار کمی می‌برند.

در مقابل،

زمین،

جاده،

باند فرودگاه،

کف اتاق،

بیشترین سود را از AF می‌برند.

اصل چهارم

Textureهای بسیار بزرگ همیشه بهتر نیستند

Texture با Resolution بسیار بالا

ممکن است:

  • VRAM بیشتری مصرف کند.
  • Bandwidth بیشتری بخواهد.
  • Cache Miss بیشتری ایجاد کند.

در بسیاری از پروژه‌ها،
دو Texture با Resolution متوسط
کیفیت بهتری نسبت به یک Texture بسیار بزرگ ایجاد می‌کنند.

اصل پنجم

LOD Bias را با احتیاط تغییر دهید

Bias منفی زیاد
ممکن است تصویر را شارپ‌تر کند،

اما معمولاً باعث Shimmering و Aliasing خواهد شد.

به همین دلیل موتورهای بازی
تنها مقدار بسیار کوچکی از Bias را اعمال می‌کنند.

اصل ششم

Sampling تصادفی را کاهش دهید

Shaderهایی که دائماً
به نقاط تصادفی Texture مراجعه می‌کنند،
تقریباً همیشه Cache را نابود می‌کنند.



Random

×

↓

Cache Miss



Sequential

×

×

×

×

↓

Cache Hit

اشتباهات رایج

Common Mistakes

اشتباه

نتیجه

بدون Mipmap

Aliasing شدید

Texture 8K بی‌دلیل

مصرف زیاد VRAM

Bias منفی زیاد

Shimmering

AF برای همه Textureها

کاهش Performance

Sampling تصادفی

Cache Miss

UNDER THE HOOD

بهینه‌سازی Texture فقط کاهش تعداد Sampleها نیست

بسیاری از برنامه‌نویسان تصور می‌کنند Performance فقط با کم کردن تعداد Texture Fetchها افزایش پیدا می‌کند.

در عمل، کیفیت دسترسی به حافظه اهمیت بیشتری دارد. دو Shader ممکن است هر دو ۸ Texture Fetch انجام دهند، اما اگر یکی از آن‌ها نرخ Cache Hit بالاتری داشته باشد، عملکرد آن به‌مراتب بهتر خواهد بود.



Shader A

8 Fetch

95% Cache Hit



Shader B

8 Fetch

35% Cache Hit

بنابراین یکی از مهم‌ترین مهارت‌های Graphics Programmer، طراحی Shaderهایی است که علاوه بر درستی، با ساختار Cache و Texture Unit نیز همسو باشند.

CHAPTER SUMMARY

Grand Summary — Texture Sampling Pipeline

در طول این فصل، مسیر کامل تبدیل یک تصویر دوبعدی به رنگ نهایی هر Pixel را بررسی کردیم. اکنون می‌توانیم تمام این مراحل را به‌صورت یک Pipeline واحد مشاهده کنیم.



Image File

      │

      ▼

Texture Resource

      │

      ▼

Texture Memory

      │

      ▼

Mip Generation

      │

      ▼

Swizzled Layout

      │

      ▼

Texture Cache

      │

      ▼

Texture Coordinate (UV)

      │

      ▼

Pixel Quad

      │

      ▼

ddx / ddy

      │

      ▼

Footprint

      │

      ▼

LOD Calculation

      │

      ▼

Sampler State

      │

      ▼

Address Mode

      │

      ▼

Mip Selection

      │

      ▼

Bilinear

      │

      ▼

Trilinear

      │

      ▼

Anisotropic

      │

      ▼

Filtered Color

      │

      ▼

Pixel Shader

      │

      ▼

Framebuffer

Key Takeaways

  1. Texture فقط یک تصویر نیست؛ یک منبع داده ساختاریافته در حافظه GPU است.

  2. Texture Sampling یک عملیات سخت‌افزاری پیچیده است، نه یک خواندن ساده از حافظه.

  3. LOD از مشتق‌های ddx و ddy محاسبه می‌شود، نه صرفاً از فاصله دوربین.

  4. Bilinear، Trilinear و Anisotropic هر کدام مشکل متفاوتی را حل می‌کنند.

  5. Sampler State قوانین Sampling را کنترل می‌کند، نه خود Texture را.

  6. Texture Cache مهم‌ترین عامل سرعت بالای Sampling است.

  7. Swizzled Layout باعث افزایش چشمگیر Cache Hit می‌شود.

  8. Performance فقط به تعداد Texture Fetchها وابسته نیست؛ کیفیت دسترسی به حافظه نیز نقش تعیین‌کننده دارد.

Common Misconceptions

❌ Texture و Sampler یک چیز نیستند.

❌ Trilinear جایگزین Anisotropic نیست.

❌ LOD فقط از فاصله دوربین محاسبه نمی‌شود.

❌ GPU یک Texel را مستقیماً از VRAM نمی‌خواند.

❌ Textureهای بزرگ‌تر همیشه کیفیت بهتری ایجاد نمی‌کنند.

❌ Cache فقط مخصوص CPU نیست؛ GPU نیز Cacheهای تخصصی متعددی دارد.

Frequently Asked Questions

آیا همیشه باید Mipmap فعال باشد؟

تقریباً همیشه بله. تنها در موارد خاص مانند Pixel Art یا برخی عناصر UI ممکن است غیرفعال شود.

چرا Textureهای دوردست تار دیده می‌شوند؟

زیرا GPU عمداً Mipmap کوچک‌تر را انتخاب می‌کند تا Aliasing کاهش یابد.

آیا Anisotropic همیشه باید روی 16× باشد؟

خیر. برای بسیاری از Textureها، مقادیر 4× یا 8× کیفیت بسیار خوبی با هزینه کمتر فراهم می‌کنند.

چرا Texture Cache تا این حد مهم است؟

زیرا مراجعه مستقیم به VRAM بسیار پرهزینه‌تر از استفاده از داده‌های موجود در Cache است.

Design Notes

یکی از تصمیم‌های کلیدی در طراحی GPUهای مدرن، جداسازی کامل Texture Unit از Shader Core است. این جداسازی باعث می‌شود عملیات پیچیده‌ای مانند انتخاب Mipmap، Filtering و Anisotropic Sampling توسط سخت‌افزار اختصاصی انجام شوند و هسته‌های محاسباتی روی اجرای Shaderها متمرکز بمانند.

همچنین استفاده از Swizzled Layout و Texture Cache نشان می‌دهد که معماری GPU از ابتدا بر اساس الگوهای دسترسی دوبعدی طراحی شده است؛ برخلاف CPU که عمدتاً برای دسترسی‌های خطی بهینه شده است.

Historical Notes

  • 1983

    Lance Williams مفهوم Mipmap را معرفی کرد.

  • اواخر دهه 1990

    Bilinear و Trilinear Filtering به قابلیت‌های استاندارد GPUهای مصرفی تبدیل شدند.

  • اوایل دهه 2000

    Anisotropic Filtering به‌صورت سخت‌افزاری در GPUها گسترش یافت.

  • نسل‌های جدید GPU

    Texture Cacheهای پیشرفته، Layoutهای Swizzled و فشرده‌سازی Texture نقش مهمی در افزایش کارایی پیدا کردند.

Further Reading

کتاب‌ها

  • Real-Time Rendering
  • GPU Gems
  • GPU Zen
  • Physically Based Rendering (بخش‌های مرتبط با Texture Sampling)

مستندات رسمی

  • Direct3D 12 Documentation
  • Vulkan Specification
  • OpenGL Specification

Knowledge Map



Vertex Processing

        │

        ▼

Rasterization

        │

        ▼

Interpolation

        │

        ▼

Texture Sampling

        │

        ▼

Lighting

        │

        ▼

Post Processing

What’s Next

اکنون که مسیر کامل Texture Sampling را می‌شناسیم، آماده ورود به یکی از مهم‌ترین بخش‌های معماری GPU هستیم:

GPU Memory Architecture

در فصل بعد خواهیم دید داده‌ها چگونه بین Register، Shared Memory، L1 Cache، L2 Cache، VRAM و واحدهای پردازشی جابه‌جا می‌شوند و چرا معماری حافظه، نقش تعیین‌کننده‌ای در کارایی GPU دارد.

CHAPTER 10

GPU Memory Architecture

Understanding How Data Moves Inside Modern GPUs

Architecture Overview

قبل از اینکه وارد جزئیات شویم،
ابتدا کل سیستم حافظه GPU را از نمای بالا مشاهده می‌کنیم.



                    GPU CHIP

┌─────────────────────────────────────────────┐

           Shader Cores

                │

        ┌───────┴────────┐

        │                │

   Register File    Shared Memory

        │                │

        └───────┬────────┘

                │

            L1 Cache

                │

                ▼

            L2 Cache

                │

                ▼

       Memory Controllers

                │

                ▼

        GDDR / HBM Memory

                │

                ▼

               VRAM

└─────────────────────────────────────────────┘

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

چرا GPU فقط یک نوع حافظه ندارد؟

در نگاه اول ممکن است تصور کنیم وجود یک حافظه بزرگ برای کل GPU کافی است.

اما چنین طراحی‌ای باعث می‌شود تقریباً تمام هسته‌های پردازشی بیشتر زمان خود را منتظر دریافت داده از حافظه بمانند.

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

هرچه حافظه کوچک‌تر باشد،
معمولاً سریع‌تر است.

به همین دلیل GPU از یک سلسله‌مراتب حافظه استفاده می‌کند؛
هر لایه ظرفیت، سرعت و کاربرد متفاوتی دارد.

سلسله‌مراتب حافظه

می‌توان حافظه‌های GPU را مانند یک هرم تصور کرد.



          Registers

              ▲

      Shared Memory

              ▲

          L1 Cache

              ▲

          L2 Cache

              ▲

         VRAM (GDDR/HBM)

هرچه به رأس هرم نزدیک‌تر می‌شویم:

  • ✔ سرعت بیشتر می‌شود.
  • ✔ ظرفیت کمتر می‌شود.
  • ✔ هزینه هر بایت افزایش پیدا می‌کند.

و هرچه به پایین هرم می‌رویم:

  • ✔ ظرفیت بیشتر می‌شود.
  • ✔ تأخیر دسترسی افزایش پیدا می‌کند.
  • ✔ پهنای باند قابل استفاده تغییر می‌کند.

هدف اصلی این معماری چیست؟

تمام این ساختار تنها یک هدف دارد:

داده، قبل از آنکه Shader به آن نیاز پیدا کند،
تا حد امکان به هسته پردازشی نزدیک باشد.

اگر داده در Register باشد،
دسترسی تقریباً آنی است.

اگر در Shared Memory باشد،
تنها چند سیکل زمان لازم است.

اگر در L2 Cache باشد،
هزینه بیشتر می‌شود.

و اگر مجبور شویم مستقیماً از VRAM بخوانیم،
تأخیر به‌مراتب بیشتر خواهد بود.

UNDER THE HOOD

GPU برای «محاسبه سریع» ساخته نشده؛ برای «پنهان کردن تأخیر حافظه» هم طراحی شده است.

یکی از بزرگ‌ترین تفاوت‌های GPU و CPU در همین نقطه است. بخش بزرگی از معماری GPU صرف نزدیک نگه داشتن داده به واحدهای محاسباتی و کاهش اثر تأخیر حافظه می‌شود. بسیاری از ویژگی‌هایی که در فصل‌های بعد خواهیم دید—مانند Warp Scheduling، Occupancy و Coalesced Memory Access—مستقیماً برای رسیدن به همین هدف طراحی شده‌اند.

Register چیست؟

سریع‌ترین حافظه‌ای که یک Shader Core به آن دسترسی دارد،
Register است.

هر دستور Shader،
قبل از هر چیز،
سعی می‌کند داده‌های خود را داخل Register نگهداری کند.

اگر داده داخل Register باشد،
تقریباً هیچ انتظار محسوسی برای دسترسی وجود ندارد.

یک تشبیه ساده

فرض کنید یک مهندس روی میز خود مشغول طراحی است.



Bookshelf

↓

Desk

↓

Notebook

↓

Pencil

در این مثال:

  • 📚 کتابخانه = VRAM
  • 🗂 میز کار = Cache
  • 📒 دفتر = Shared Memory
  • ✏️ مداد در دست = Register

Register نزدیک‌ترین محل نگهداری داده به واحد محاسباتی است.

Register کجا قرار دارد؟

برخلاف VRAM،
Register خارج از تراشه نیست.

بلکه داخل هر Shader Core
یا Compute Unit
قرار گرفته است.



GPU

│

├── Shader Core

│      │

│      ├── ALU

│      ├── Register File

│      └── Scheduler

│

└── ...

Register چه چیزی نگه می‌دارد؟

تقریباً تمام داده‌های موقتی Shader
ابتدا داخل Register ذخیره می‌شوند.

نمونه داده‌های داخل Register

نوع داده

نمونه

متغیرهای محلی

float color

نتیجه عملیات

dot()

مختصات

UV

مقادیر موقت

temp0

نتیجه Texture Fetch

RGBA

یک مثال واقعی



float3 color = textureColor.rgb;

float lighting = saturate(dot(N, L));

float3 result = color * lighting;

هنگام اجرای این کد،
تقریباً تمام این متغیرها
داخل Register قرار می‌گیرند.



R0

textureColor



R1

lighting



R2

result

چرا Register این‌قدر سریع است؟

زیرا Register نیازی به جستجو،
Cache Lookup
یا مراجعه به VRAM ندارد.

واحد محاسباتی تقریباً مستقیماً به آن متصل است.



ALU

│

▼

Register

آیا Register نامحدود است؟

خیر.

سریع بودن Register
بهای سنگینی دارد.

  • ✔ بسیار سریع
  • ✔ نزدیک ALU
  • ✖ ظرفیت بسیار محدود
  • ✖ گران‌ترین نوع حافظه روی تراشه

Register Pressure

اگر Shader
Registerهای زیادی مصرف کند،
GPU با مشکل جدیدی روبه‌رو می‌شود.

Register کافی برای اجرای Warpهای بیشتر باقی نمی‌ماند.

به این وضعیت
Register Pressure
گفته می‌شود.

UNDER THE HOOD

Registerها حافظه اشتراکی نیستند

یکی از مهم‌ترین ویژگی‌های Register این است که هر Thread مجموعه Registerهای مخصوص به خود را دارد. Threadهای دیگر نه می‌توانند آن‌ها را ببینند و نه به آن‌ها دسترسی داشته باشند. این ویژگی باعث می‌شود Register سریع‌ترین و خصوصی‌ترین حافظه در GPU باشد.



Thread 0

R0 R1 R2



Thread 1

R0 R1 R2



Thread 2

R0 R1 R2

به همین دلیل، Register بهترین محل برای نگهداری داده‌های موقتی هر Thread است؛ اما اگر تعداد Registerهای موردنیاز یک Shader بیش از حد افزایش یابد، روی تعداد Warpهای قابل اجرای هم‌زمان اثر مستقیم خواهد گذاشت. در فصل **Occupancy** این ارتباط را به‌صورت عمیق بررسی خواهیم کرد.

Register Allocation چیست؟

وقتی Shader را می‌نویسید،
هیچ Registerی را مستقیماً انتخاب نمی‌کنید.

در واقع شما فقط متغیر تعریف می‌کنید.



float3 normal;

float3 light;

float intensity;

float4 color;

اما GPU این نام‌ها را نمی‌شناسد.

کامپایلر Shader
تمام این متغیرها را
به Registerهای واقعی تبدیل می‌کند.

چه کسی Registerها را انتخاب می‌کند؟

این کار توسط Shader Compiler انجام می‌شود.



HLSL / GLSL

        │

        ▼

Shader Compiler

        │

        ▼

Register Allocation

        │

        ▼

GPU Instructions

بنابراین Register Allocation
قبل از اجرای Shader اتفاق می‌افتد.

مثال ساده



float a;

float b;

float c;

float d;

کامپایلر ممکن است آن را به شکل زیر تبدیل کند.



R0

↓

a



R1

↓

b



R2

↓

c



R3

↓

d

اما همیشه این‌گونه نیست

اگر دو متغیر
هم‌زمان مورد استفاده نباشند،
کامپایلر می‌تواند
هر دو را داخل یک Register قرار دهد.



time

──────────────▶

Variable A

██████



Variable B

      ██████



↓

Both

↓

Register R0

به این کار

Register Reuse

گفته می‌شود.

Lifetime متغیرها

هر متغیر،
فقط در بخشی از اجرای Shader زنده است.



Instruction

1

2

3

4

5

6

7

8



Color

██████



Normal

  ███████



Result

       █████

کامپایلر از روی این بازه‌های زمانی
تصمیم می‌گیرد
چه Registerهایی را می‌توان دوباره استفاده کرد.

هدف Register Allocation

اهداف اصلی کامپایلر

هدف

دلیل

کمترین Register

Occupancy بیشتر

Reuse

کاهش مصرف Register

عدم تداخل

درستی اجرا

بدون Spill

حداکثر Performance

چرا این موضوع اهمیت دارد؟

فرض کنید یک Shader

تنها

۲۴ Register

نیاز دارد.

اکنون نسخه جدید Shader
به دلیل چند محاسبه اضافی

به

۶۴ Register

نیاز پیدا می‌کند.

اگرچه تعداد دستورها شاید فقط کمی بیشتر شده باشد،
اما مصرف Register تقریباً سه برابر شده است.

گاهی کند شدن Shader
نه به خاطر دستورهای بیشتر،
بلکه به خاطر Registerهای بیشتر است.

UNDER THE HOOD

کامپایلر تلاش می‌کند Registerها را مانند جای پارک مدیریت کند

می‌توان Registerها را مانند تعداد محدودی جای پارک تصور کرد. هر متغیر فقط در بازه‌ای از زمان به یک جای پارک نیاز دارد. به محض پایان عمر آن متغیر، همان جای پارک می‌تواند در اختیار متغیر دیگری قرار گیرد.



Variable A

──────┐

      ▼

     R0

      ▲

──────┘

Variable B

هرچه Compiler بتواند Registerها را بیشتر بازاستفاده (Reuse) کند، Shader با Registerهای کمتری اجرا می‌شود و امکان اجرای Warpهای بیشتری روی همان Shader Core فراهم می‌شود.

وقتی Registerها تمام می‌شوند…

تا اینجا فرض کردیم
کامپایلر همیشه Register کافی در اختیار دارد.

اما واقعیت این است که
تعداد Registerهای هر Shader Core محدود است.

اگر Shader به Register بیشتری نیاز داشته باشد،
GPU دیگر نمی‌تواند همه داده‌ها را داخل Register نگه دارد.

در این لحظه فرآیندی به نام

Register Spilling

رخ می‌دهد.

Spill یعنی چه؟

واژه Spill
به معنی «سرریز شدن» است.

وقتی Registerها پر شوند،
کامپایلر بعضی از متغیرها را
از Register خارج می‌کند.



Registers

██████████

FULL



↓

Overflow



Local Memory

داده‌ها کجا می‌روند؟

یک تصور اشتباه این است که
این داده‌ها وارد Shared Memory می‌شوند.

خیر.

در اکثر GPUها،
متغیرهای Spill شده
داخل حافظه‌ای قرار می‌گیرند که در مدل برنامه‌نویسی
Local Memory
نامیده می‌شود.

با وجود نام آن،
این حافظه معمولاً در
VRAM قرار دارد و از طریق سلسله‌مراتب Cache قابل دسترسی است.



Register

      │

      ▼

Local Memory

      │

      ▼

L1 / L2 Cache

      │

      ▼

VRAM

چرا Spill خطرناک است؟

دسترسی به Register
تقریباً آنی است.

اما دسترسی به Local Memory
ممکن است ده‌ها یا حتی صدها سیکل بیشتر طول بکشد،
به‌ویژه اگر داده در Cache نباشد و نیاز به مراجعه به VRAM باشد.

مقایسه تقریبی هزینه دسترسی

محل داده

تأخیر نسبی

Register

بسیار کم

Shared Memory

کم

L1 Cache

متوسط

L2 Cache

زیادتر

VRAM

بسیار زیاد

مقادیر دقیق به معماری GPU بستگی دارند؛ این جدول تنها ترتیب نسبی سرعت را نشان می‌دهد.

یک مثال ساده



float a0;
float a1;
float a2;
...
float a63;

اگر تعداد متغیرهای زنده به‌طور هم‌زمان
از Registerهای قابل تخصیص بیشتر شود،
کامپایلر ناچار است برخی از آن‌ها را Spill کند.

Spill همیشه به معنی کد بد نیست

گاهی Spill نتیجه یک Shader بسیار پیچیده است.

گاهی نیز به دلیل انتخاب‌های نامناسب در کدنویسی رخ می‌دهد.

  • ✔ نگه داشتن متغیرهای غیرضروری برای مدت طولانی
  • ✔ محاسبات بسیار بزرگ در یک تابع
  • ✔ استفاده هم‌زمان از تعداد زیادی مقدار موقت
  • ✔ باز شدن بیش از حد حلقه‌ها (Loop Unrolling)

چگونه از Spill جلوگیری کنیم؟

راهکارهای کاهش Register Spilling

روش

تأثیر

کاهش Lifetime متغیرها

Reuse بهتر Registerها

تقسیم Shaderهای بسیار بزرگ

کاهش Register Pressure

حذف متغیرهای موقت غیرضروری

مصرف کمتر Register

بازبینی خروجی Compiler

شناسایی Spillهای ناخواسته

UNDER THE HOOD

Local Memory همیشه «محلی» نیست

نام Local Memory ممکن است گمراه‌کننده باشد. منظور از «محلی» این است که این حافظه از دید برنامه‌نویسی به هر Thread تعلق دارد، نه اینکه از نظر فیزیکی نزدیک هسته پردازشی باشد. در بسیاری از معماری‌های GPU، این داده‌ها در نهایت در VRAM ذخیره می‌شوند و تنها در صورت وجود، از Cacheها بهره می‌برند.



Thread Variable

        │

        ▼

Local Memory

 (Programming Model)

        │

        ▼

Cache Hierarchy

        │

        ▼

VRAM

به همین دلیل، هر بار که یک مقدار Spill شده دوباره موردنیاز باشد، هزینه دسترسی آن می‌تواند چندین برابر بیشتر از یک Register باشد. به همین علت، کامپایلرها تا حد امکان از Register Reuse استفاده می‌کنند تا از وقوع Spill جلوگیری شود.

Register Pressure چیست؟

تا اینجا یاد گرفتیم که هر Thread
برای نگهداری داده‌های موقت خود
از Register استفاده می‌کند.

اما تعداد Registerهای هر Shader Core
محدود است.

هرچه یک Thread
Register بیشتری مصرف کند،
Register کمتری برای Threadهای دیگر باقی می‌ماند.

مصرف زیاد Register،
به معنی کاهش تعداد Threadهای هم‌زمان است.

یک مثال شهودی

فرض کنید یک Shader Core
فقط ۶۴ Register داشته باشد.



Register File

□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

Total = 64

حالت اول

هر Thread فقط ۸ Register نیاز دارد.



64 Registers

÷

8 Registers / Thread

=

8 Threads

در این حالت،
هشت Thread می‌توانند هم‌زمان اجرا شوند.

حالت دوم

اکنون همان Shader
به دلیل چند متغیر اضافه،
به ۱۶ Register نیاز دارد.



64 Registers

÷

16 Registers / Thread

=

4 Threads

بدون اینکه تعداد هسته‌ها تغییر کند،
تعداد Threadهای هم‌زمان
نصف شده است.

همین موضوع را در مقیاس Warp ببینیم

در GPU واقعی،
Scheduler معمولاً Warpها را زمان‌بندی می‌کند،
نه Threadهای تکی.



Warp 0

████████



Warp 1

████████



Warp 2

████████



Warp 3

████████

اگر Register کافی وجود نداشته باشد،
Scheduler اصلاً نمی‌تواند Warpهای بیشتری را
فعال کند.

چرا این موضوع Performance را کاهش می‌دهد؟

GPU برای پنهان کردن تأخیر حافظه،
بین Warpهای مختلف جابه‌جا می‌شود.



Warp A

Memory Wait



↓

Scheduler



↓

Warp B

Compute



↓

Warp C

Compute

اگر Warpهای آماده کم باشند،
Scheduler گزینه‌ای برای جایگزینی ندارد.

تعریف Register Pressure

نشانه‌های Register Pressure

علائم رایج

علامت

دلیل

Occupancy پایین

کمبود Register

Register Spill

Register کافی وجود ندارد

Latency بالا

Warp کافی برای جایگزینی نیست

Performance پایین

Scheduler بیکار می‌ماند

آیا Register کمتر همیشه بهتر است؟

خیر.

اگر فقط برای کاهش مصرف Register،
محاسبات اضافی انجام دهیم،
ممکن است زمان اجرای Shader افزایش پیدا کند.

هدف، کمترین تعداد Register نیست؛

هدف، بهترین تعادل بین مصرف Register و حجم محاسبات است.

رابطه Register با Occupancy

یکی از سه عامل اصلی تعیین‌کننده Occupancy عبارت‌اند از:

  • ✔ تعداد Register هر Thread
  • ✔ Shared Memory هر Block
  • ✔ محدودیت سخت‌افزاری تعداد Warpها

در فصل Occupancy
این رابطه را به‌صورت عددی بررسی خواهیم کرد.

UNDER THE HOOD

گاهی Shader سریع‌تر، Register بیشتری مصرف می‌کند

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

به همین دلیل، افزایش Register همیشه یک تصمیم بد نیست. مسئله اصلی پیدا کردن نقطه تعادل است؛ جایی که مصرف Register آن‌قدر زیاد نباشد که Occupancy را محدود کند و در عین حال آن‌قدر کم هم نباشد که داده‌ها مدام بین Register و حافظه جابه‌جا شوند.



More Registers

        │

        ├── Less Memory Access

        └── Lower Occupancy



Less Registers

        │

        ├── More Occupancy

        └── More Memory Traffic

بهینه‌سازی واقعی Shader، پیدا کردن تعادل بین این دو حالت است؛ نه حرکت افراطی به سمت یکی از آن‌ها.

چرا GPU هزاران Thread را هم‌زمان اجرا می‌کند؟

تا اینجا دیدیم که دسترسی به Register بسیار سریع است،
اما مراجعه به حافظه‌های دورتر مانند L2 Cache یا VRAM
می‌تواند ده‌ها تا صدها سیکل زمانی طول بکشد.

سؤال مهم این است:

اگر یک Thread منتظر دریافت داده از حافظه باشد،
آیا کل GPU متوقف می‌شود؟

خوشبختانه پاسخ منفی است.

ایده اصلی GPU

به جای منتظر ماندن،
GPU به سراغ Warp دیگری می‌رود
که آماده اجراست.



Warp A

Memory Wait

      │

      ▼

Scheduler

      │

      ▼

Warp B

Running

      │

      ▼

Warp C

Running

به این ترتیب،
تأخیر حافظه پشت اجرای Warpهای دیگر پنهان می‌شود.

این همان Latency Hiding است

Occupancy چیست؟

برای اینکه Scheduler همیشه Warp آماده داشته باشد،
باید تعداد کافی Warp
روی Shader Core مستقر باشند.



Shader Core

────────────────────

Warp 0 ✔

Warp 1 ✔

Warp 2 ✔

Warp 3 ✔

Warp 4 Waiting

Warp 5 Ready

Warp 6 Ready

Warp 7 Ready

به نسبت Warpهای فعال،
Occupancy
گفته می‌شود.

Register چه نقشی دارد؟

هر Warp
برای هر Thread
Register مخصوص خود را نیاز دارد.



Register File

────────────────────

Warp 0

████████



Warp 1

████████



Warp 2

████████

اگر Registerها پر شوند،
Warp جدید دیگر جایی برای اجرا نخواهد داشت.

زنجیره علت و معلول



More Registers

        │

        ▼

Fewer Active Warps

        │

        ▼

Lower Occupancy

        │

        ▼

Less Latency Hiding

        │

        ▼

Possible Performance Loss

اما Occupancy همیشه همه چیز نیست

گاهی افزایش Occupancy
باعث افزایش Performance می‌شود.

اما همیشه این‌طور نیست.

اگر برای افزایش Occupancy،
Registerهای لازم را حذف کنیم
و در نتیجه Register Spilling رخ دهد،
ممکن است عملکرد حتی بدتر شود.

Occupancy بیشتر،
همیشه Performance بیشتر نیست.

این فصل فقط یک پیش‌نمایش است

در فصل اختصاصی

Warp Scheduling & Occupancy

تمام این مفاهیم را با مثال‌های عددی،
نمودارهای زمانی،
محدودیت‌های سخت‌افزاری
و ابزارهای تحلیل واقعی مانند Nsight و Radeon GPU Profiler بررسی خواهیم کرد.

UNDER THE HOOD

چرا Register، Shared Memory و Occupancy همیشه با هم بررسی می‌شوند؟

در معماری GPU این سه مفهوم از یکدیگر جدا نیستند. Register مصرف‌شده توسط هر Thread، Shared Memory مصرف‌شده توسط هر Block و حداکثر تعداد Warpهای قابل استقرار روی یک Shader Core همگی از منابع محدود یک واحد پردازشی استفاده می‌کنند. افزایش مصرف هر یک از این منابع می‌تواند تعداد Warpهای هم‌زمان را کاهش دهد.



Register Usage

        │

        ├──────────┐

        ▼          │

Active Warps       │

        ▲          │

        └──────────┤

                   ▼

Shared Memory Usage

به همین دلیل، مهندسان GPU هنگام بهینه‌سازی Shaderها معمولاً Register Usage، Shared Memory Usage و Occupancy را هم‌زمان تحلیل می‌کنند، نه به‌صورت جداگانه.

Shared Memory چیست؟

تا اینجا دیدیم که هر Thread
Registerهای مخصوص به خود را دارد.

اما اگر چند Thread
بخواهند روی یک مجموعه داده مشترک کار کنند چه؟

استفاده از Register دیگر ممکن نیست،
زیرا Registerها خصوصی هستند.

برای حل این مشکل،
GPU حافظه‌ای بسیار سریع به نام

Shared Memory

در اختیار Threadها قرار می‌دهد.

اول یک مثال واقعی

فرض کنید ۳۲ کارگر
در حال ساخت یک دیوار هستند.

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

اما اگر یک پالت آجر
کنار همه آن‌ها قرار بگیرد،
همه می‌توانند
از همان پالت استفاده کنند.



Warehouse

      │

      ▼

Shared Pallet

 ┌──────────────┐

 Worker Worker Worker

 Worker Worker Worker

Shared Memory
دقیقاً همان پالت آجر است.

Shared بین چه کسانی؟

یکی از رایج‌ترین سوءبرداشت‌ها این است
که Shared Memory
بین تمام Threadهای GPU مشترک است.

این تصور اشتباه است.



GPU

│

├── Block 0

│      └── Shared Memory

│

├── Block 1

│      └── Shared Memory

│

├── Block 2

│      └── Shared Memory

هر Block
Shared Memory مخصوص به خود را دارد.

Threadهای Blockهای دیگر
به آن دسترسی ندارند.

جایگاه Shared Memory

از نظر سرعت،
Shared Memory
بعد از Register قرار می‌گیرد.



Registers

      ▲

Shared Memory

      ▲

L1 Cache

      ▲

L2 Cache

      ▲

VRAM

به همین دلیل،
هر زمان چند Thread
به داده مشترک نیاز داشته باشند،
Shared Memory انتخاب بسیار مناسبی است.

چه داده‌هایی داخل Shared Memory قرار می‌گیرند؟

نمونه استفاده‌ها

داده

دلیل

Tileهای ماتریس

استفاده مجدد زیاد

همسایه‌های تصویر

پردازش فیلترها

Histogram

اشتراک بین Threadها

Reduction

جمع نتایج

ENGINEERING INSIGHT

چرا Shared Memory را «برنامه‌نویس» مدیریت می‌کند؟

برخلاف Cache که به‌صورت خودکار توسط سخت‌افزار مدیریت می‌شود، Shared Memory معمولاً تحت کنترل برنامه‌نویس یا کامپایلر است. این یعنی شما تصمیم می‌گیرید چه داده‌ای وارد آن شود، چه زمانی استفاده شود و چه زمانی کنار گذاشته شود.

این آزادی عمل، قدرت بسیار زیادی می‌دهد؛ اما مسئولیت بیشتری هم ایجاد می‌کند. اگر داده نامناسبی را وارد Shared Memory کنید یا از آن به‌درستی استفاده نکنید، نه‌تنها سودی نخواهید برد، بلکه ممکن است Occupancy نیز کاهش پیدا کند.

UNDER THE HOOD

Shared Memory یک «دفتر مشترک» نیست؛ بخشی از طراحی معماری GPU است

Shared Memory فقط برای راحتی برنامه‌نویس اضافه نشده است. بسیاری از الگوریتم‌های پردازش موازی، مانند ضرب ماتریس، کانولوشن تصاویر، FFT و Reduction، بدون وجود یک حافظه سریع و مشترک مجبور بودند بارها همان داده را از VRAM بخوانند. Shared Memory این الگو را تغییر می‌دهد: داده یک‌بار از حافظه اصلی خوانده می‌شود، داخل Shared Memory قرار می‌گیرد و سپس ده‌ها یا صدها Thread همان داده را دوباره استفاده می‌کنند.



VRAM

   │

   ▼

Shared Memory

   │

   ├────► Thread 0

   ├────► Thread 1

   ├────► Thread 2

   └────► Thread 3

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

چرا Shared Memory به Bank تقسیم شده است؟

اگر تمام Threadهای یک Warp
هم‌زمان بخواهند
از Shared Memory داده بخوانند،
یک سؤال مهم مطرح می‌شود.

اگر همه Threadها
دقیقاً در یک لحظه
به Shared Memory مراجعه کنند،
آیا فقط یک نفر می‌تواند بخواند؟

اگر پاسخ مثبت بود،
تمام مزیت Shared Memory
از بین می‌رفت.

برای حل این مشکل،
Shared Memory
به چندین بخش مستقل تقسیم شده است.

Bank چیست؟

یک تصویر ذهنی

به جای اینکه Shared Memory
را یک خیابان تک‌بانده تصور کنیم،

آن را مانند بزرگراهی با چندین خط عبور در نظر بگیرید.



Lane 0

Lane 1

Lane 2

Lane 3

Lane 4

Lane 5

Lane 6

Lane 7

هر Bank
مانند یک خط عبور مستقل عمل می‌کند.

مزیت Bankها

اگر Threadهای مختلف
به Bankهای مختلف مراجعه کنند،
تمام درخواست‌ها
هم‌زمان انجام می‌شوند.



Thread 0

↓

Bank 0



Thread 1

↓

Bank 1



Thread 2

↓

Bank 2



Thread 3

↓

Bank 3

در این حالت
تقریباً هیچ تأخیری ایجاد نمی‌شود.

نگاشت داده‌ها روی Bankها

هر آدرس Shared Memory
به یکی از Bankها نگاشت می‌شود.

به صورت مفهومی می‌توان آن را چنین تصور کرد:



Address

0 → Bank 0

1 → Bank 1

2 → Bank 2

3 → Bank 3

4 → Bank 4

...

الگوی دقیق نگاشت
به معماری GPU بستگی دارد،
اما اصل ایده در همه آن‌ها مشابه است.

وقتی همه چیز عالی پیش می‌رود



Warp

↓

Thread 0 → Bank 0

Thread 1 → Bank 1

Thread 2 → Bank 2

Thread 3 → Bank 3

...

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

ENGINEERING INSIGHT

چرا تعداد Bankها محدود است؟

ممکن است این سؤال پیش بیاید که چرا Shared Memory را به صدها Bank تقسیم نمی‌کنند تا هیچ‌گاه تداخلی رخ ندهد.

پاسخ، هزینه سخت‌افزار است.

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

در نتیجه، معماران GPU تعداد Bankها را طوری انتخاب می‌کنند که بین **کارایی، مساحت تراشه و مصرف انرژی** تعادل برقرار شود.

UNDER THE HOOD

Bankها دقیقاً مانند Cache نیستند

گاهی Shared Memory Bank با Cache اشتباه گرفته می‌شود. Cache به‌طور خودکار داده‌های پرکاربرد را نگهداری می‌کند، اما Bankها صرفاً مسیرهای موازی دسترسی به Shared Memory هستند. وجود Bankهای متعدد به این معنی نیست که داده‌ها کپی شده‌اند؛ بلکه فقط امکان پاسخ‌گویی هم‌زمان به چند درخواست مستقل فراهم شده است.



Shared Memory

        │

 ┌──────┼──────┐

 ▼      ▼      ▼

Bank0 Bank1 Bank2 ...

یک سؤال ساده

فرض کنید چهار Thread
هم‌زمان می‌خواهند
از Shared Memory داده بخوانند.

حالت اول را ببینید.



Warp

Thread0 ─────► Bank0

Thread1 ─────► Bank1

Thread2 ─────► Bank2

Thread3 ─────► Bank3

به نظر می‌رسد
همه چیز ایده‌آل است.

اما اگر این اتفاق بیفتد چه؟



Warp

Thread0 ─────► Bank0

Thread1 ─────► Bank0

Thread2 ─────► Bank0

Thread3 ─────► Bank0

اکنون چهار Thread
به طور هم‌زمان
یک Bank را درخواست کرده‌اند.

اگر شما جای سخت‌افزار بودید،
چه می‌کردید؟

پاسخ

بانک نمی‌تواند
همه درخواست‌ها را
در یک لحظه پاسخ دهد.

در نتیجه درخواست‌ها
پشت سر هم اجرا می‌شوند.



Cycle 1

Thread0



Cycle 2

Thread1



Cycle 3

Thread2



Cycle 4

Thread3

به این وضعیت

Bank Conflict

گفته می‌شود.

تعریف Bank Conflict

بدون Conflict



Cycle 1

Thread0

Thread1

Thread2

Thread3

✔

تمام درخواست‌ها
در یک سیکل انجام می‌شوند.

با Conflict



Cycle1

Thread0



Cycle2

Thread1



Cycle3

Thread2



Cycle4

Thread3

همان چهار درخواست

اکنون چهار سیکل زمان نیاز دارند.

درجه‌های مختلف Conflict

Bank Conflict
فقط یک حالت ندارد.

درجه‌های مختلف Bank Conflict

تعداد درخواست

نوع Conflict

اثر تقریبی

1

ندارد

حداکثر سرعت

2

2-Way

تقریباً دو برابر تأخیر

4

4-Way

حدود چهار برابر تأخیر

8

8-Way

بسیار کندتر

میزان دقیق افت کارایی به معماری GPU و الگوی دسترسی بستگی دارد؛ جدول بالا تنها برای نمایش روند کلی است.

اما یک استثنا وجود دارد

اگر تمام Threadهای Warp
دقیقاً یک آدرس مشترک را بخوانند،
بسیاری از GPUهای مدرن
می‌توانند همان مقدار را
به همه Threadها ارسال کنند.



Thread0

│

Thread1

│

Thread2

│

Thread3

▼

Address 120

▼

Broadcast

به این مکانیزم

Broadcast

گفته می‌شود.

ENGINEERING INSIGHT

چرا Broadcast استثنا است؟

در نگاه اول ممکن است تصور شود اگر چند Thread به یک Bank مراجعه کنند، همیشه Conflict رخ می‌دهد. اما اگر همه آن‌ها دقیقاً یک آدرس را درخواست کنند، سخت‌افزار لازم نیست چند بار همان مقدار را بخواند. یک بار خواندن کافی است و همان داده بین همه Threadها توزیع می‌شود.

به همین دلیل، دسترسی‌های «کاملاً یکسان» معمولاً بسیار سریع‌تر از دسترسی‌های «متفاوت ولی روی یک Bank» هستند.

UNDER THE HOOD

Bank Conflict همیشه فاجعه نیست

یکی از برداشت‌های اشتباه این است که هر Bank Conflict باعث افت شدید عملکرد می‌شود. در عمل، شدت تأثیر به عواملی مانند تعداد Threadهای درگیر، الگوی دسترسی، معماری GPU و توانایی سخت‌افزار در Broadcast یا بهینه‌سازی درخواست‌ها بستگی دارد.

مهندس GPU هدفش حذف کامل Bank Conflict نیست؛ بلکه کاهش Conflictهای پرهزینه و طراحی الگوهای دسترسی است که بیشترین بهره را از Shared Memory ببرند.

بهترین روش‌های استفاده از Shared Memory

Shared Memory یکی از سریع‌ترین حافظه‌های GPU است،
اما فقط در صورتی که به‌درستی از آن استفاده شود.

در غیر این صورت،
نه تنها سرعت افزایش پیدا نمی‌کند،
بلکه ممکن است عملکرد کل Shader نیز کاهش یابد.

اصل اول

فقط داده‌هایی را وارد Shared Memory کنید که دوباره استفاده می‌شوند

اگر داده فقط یک بار خوانده می‌شود،
کپی کردن آن به Shared Memory
هیچ سودی ندارد.



VRAM

↓

Shared Memory

↓

One Read

✖

اما اگر همان داده
توسط ده‌ها Thread
چندین بار استفاده شود،
Shared Memory بسیار ارزشمند خواهد بود.

اصل دوم

دسترسی منظم داشته باشید

سعی کنید Threadهای مجاور،
به آدرس‌های مجاور مراجعه کنند.



GOOD

T0 → 0

T1 → 1

T2 → 2

T3 → 3



BAD

T0 → 0

T1 → 97

T2 → 12

T3 → 211

الگوهای منظم،
هم Cache و هم Bankها را بهتر استفاده می‌کنند.

اصل سوم

Bank Conflict را کاهش دهید

حتی اگر Shared Memory بسیار سریع باشد،
Conflict می‌تواند آن را به یک گلوگاه تبدیل کند.

  • ✔ داده‌ها را با Layout مناسب ذخیره کنید.
  • ✔ از الگوهای دسترسی متوالی استفاده کنید.
  • ✔ در صورت نیاز از Padding استفاده کنید.

Padding چیست؟

گاهی فقط اضافه کردن
یک عنصر اضافی
بین سطرها یا ستون‌ها
باعث می‌شود چند Thread
روی یک Bank قرار نگیرند.



Without Padding

□□□□□□□□

□□□□□□□□



With Padding

□□□□□□□□□

□□□□□□□□□

این تکنیک ساده،
در بسیاری از الگوریتم‌های پردازش تصویر و ضرب ماتریس
برای کاهش Bank Conflict استفاده می‌شود.

اصل چهارم

حجم Shared Memory را کنترل کنید

هر Block
مقدار محدودی Shared Memory دارد.

اگر یک Block
بخش زیادی از آن را مصرف کند،
ممکن است Blockهای کمتری
به‌طور هم‌زمان روی همان Shader Core اجرا شوند.

مصرف زیاد Shared Memory،
می‌تواند Occupancy را کاهش دهد.

چه زمانی از Shared Memory استفاده نکنیم؟

مواردی که Shared Memory انتخاب مناسبی نیست

شرایط

دلیل

داده فقط یک بار استفاده می‌شود

هزینه کپی بیهوده است

حجم داده بسیار زیاد است

کاهش Occupancy

الگوی دسترسی کاملاً تصادفی است

کاهش بهره‌وری Shared Memory

Cache عملکرد مناسبی دارد

ممکن است Shared Memory سودی نداشته باشد

PERFORMANCE DETECTIVE

اگر Shared Memory سرعت را افزایش نداد، چه چیزی را بررسی کنیم؟

  • آیا داده‌ها واقعاً چند بار استفاده می‌شوند؟
  • آیا Bank Conflict رخ می‌دهد؟
  • آیا حجم Shared Memory باعث کاهش Occupancy شده است؟
  • آیا Cache به‌تنهایی کافی بوده و Shared Memory فقط یک مرحله اضافی ایجاد کرده است؟

در بسیاری از پروژه‌ها، پاسخ این پرسش‌ها علت اصلی اختلاف عملکرد بین دو پیاده‌سازی ظاهراً مشابه را آشکار می‌کند.

UNDER THE HOOD

Shared Memory یک ابزار است، نه یک راه‌حل جادویی

گاهی تصور می‌شود که انتقال هر داده‌ای به Shared Memory باعث افزایش سرعت خواهد شد. در عمل چنین نیست. انتقال داده از VRAM به Shared Memory خود نیز هزینه دارد. این هزینه تنها زمانی جبران می‌شود که همان داده چندین بار توسط Threadهای مختلف مورد استفاده قرار گیرد.



VRAM

   │

Load Once

   │

   ▼

Shared Memory

   │

Reuse Many Times

   │

   ▼

Threads

به همین دلیل، یکی از مهم‌ترین مهارت‌های برنامه‌نویسی GPU این نیست که «همیشه از Shared Memory استفاده کند»، بلکه این است که تشخیص دهد **کِی استفاده از آن واقعاً ارزش دارد**.

چرا به Synchronization نیاز داریم؟

تا اینجا فرض کردیم
همه Threadها مستقل از یکدیگر کار می‌کنند.

اما در بسیاری از الگوریتم‌های موازی،
Threadها روی داده‌های مشترک کار می‌کنند.

در این حالت،
سرعت اجرای Threadها
ممکن است یکسان نباشد.

اگر یک Thread زودتر به داده‌ای برسد که هنوز توسط Thread دیگر تولید نشده باشد،
نتیجه اجرای برنامه نادرست خواهد بود.

یک مثال واقعی

فرض کنید چهار Thread
در حال محاسبه یک ماتریس هستند.



Thread 0

Load Tile



Thread 1

Load Tile



Thread 2

Load Tile



Thread 3

Load Tile

همه Threadها
ابتدا داده‌ها را
داخل Shared Memory قرار می‌دهند.

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

مشکل Race Condition

فرض کنید Thread 0
بسیار سریع‌تر اجرا شود.



Thread0

Read Shared Memory

✔



Thread3

Still Writing...

Thread 0
ممکن است داده‌ای را بخواند
که هنوز کامل نوشته نشده است.

به این وضعیت

Race Condition

گفته می‌شود.

Synchronization

برای جلوگیری از Race Condition،
همه Threadها
باید در یک نقطه
منتظر یکدیگر بمانند.



Thread0

──────┐



Thread1

──────┤



Thread2

──────┤

        ▼

    Barrier

        ▼

Continue



Thread3

──────┘

به این نقطه،
Barrier
گفته می‌شود.

Barrier چه کاری انجام می‌دهد؟

Memory Barrier چیست؟

گاهی کافی نیست که فقط منتظر Threadهای دیگر بمانیم.

باید مطمئن شویم
تمام عملیات خواندن و نوشتن حافظه
نیز کامل شده‌اند.

به این منظور از

Memory Barrier

استفاده می‌شود.



Write

↓

Memory Barrier

↓

Read

Barrier و Memory Barrier یکی نیستند

مقایسه دو مفهوم

Barrier

Memory Barrier

هماهنگی اجرای Threadها

هماهنگی عملیات حافظه

کنترل زمان اجرا

کنترل ترتیب دسترسی به حافظه

منتظر سایر Threadها می‌ماند

منتظر تکمیل عملیات حافظه می‌ماند

هزینه Synchronization

Synchronization رایگان نیست.

وقتی Warpها به Barrier می‌رسند،
آن‌هایی که زودتر رسیده‌اند
باید منتظر Warpهای کندتر بمانند.



Warp A

█████ Waiting



Warp B

██ Computing



Warp C

████ Loading

بنابراین استفاده بیش از حد از Barrier
می‌تواند Performance را کاهش دهد.

ENGINEERING INSIGHT

بهترین Barrier، Barrierی است که به آن نیاز نداشته باشید

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

PERFORMANCE DETECTIVE

اگر GPU زمان زیادی را در انتظار می‌گذراند…

  • آیا Barrierهای غیرضروری دارید؟
  • آیا بعضی Warpها بسیار دیرتر از بقیه به Barrier می‌رسند؟
  • آیا وابستگی بین Threadها را می‌توان کاهش داد؟
  • آیا می‌توان داده‌ها را طوری تقسیم کرد که هر Thread مستقل‌تر کار کند؟

UNDER THE HOOD

Barrier فقط برای «صبر کردن» نیست

در بسیاری از معماری‌های GPU، عملیات همگام‌سازی علاوه بر هماهنگ کردن Threadها، به سخت‌افزار اعلام می‌کند که اکنون همه داده‌های مورد انتظار باید در وضعیت قابل مشاهده و سازگار قرار گرفته باشند. این موضوع برای الگوریتم‌هایی که چندین Thread روی یک ساختار داده مشترک کار می‌کنند، ضروری است.



Threads

      │

      ▼

Write Shared Memory

      │

      ▼

Barrier

      │

      ▼

Read Shared Memory

اگر این مرحله حذف شود، نتیجه برنامه ممکن است از یک اجرا به اجرای دیگر متفاوت باشد؛ حتی اگر کد تغییری نکرده باشد.

L1 Cache چیست؟

تا اینجا دو نوع حافظه را شناختیم:

  • Register

    (خصوصی و فوق‌العاده سریع)

  • Shared Memory

    (اشتراکی و سریع)

اما هنوز یک سؤال باقی مانده است.

اگر داده‌ای داخل Register یا Shared Memory نباشد،
آیا GPU باید مستقیماً به VRAM مراجعه کند؟

اگر پاسخ «بله» بود،
تقریباً بیشتر زمان GPU
صرف انتظار برای حافظه می‌شد.

برای جلوگیری از این اتفاق،
GPU از حافظه‌ای به نام

L1 Cache

استفاده می‌کند.

اول یک مثال ساده

فرض کنید روی میز کارتان مشغول طراحی هستید.

کتاب اصلی داخل کتابخانه است.

اما چند صفحه‌ای که مدام به آن‌ها مراجعه می‌کنید
روی میز قرار داده‌اید.



Bookshelf

↓

Desk

↓

Open Notebook

↓

Pencil

در این مثال:

  • Bookshelf → VRAM

  • Desk → L2 Cache

  • Open Notebook → L1 Cache

  • Pencil → Register

هرچه داده به شما نزدیک‌تر باشد،
سریع‌تر به آن دسترسی پیدا می‌کنید.

چرا L1 Cache وجود دارد؟

بسیاری از برنامه‌ها
بارها و بارها
به داده‌های مشابه مراجعه می‌کنند.



Pixel 120

↓

Texture

↓

Pixel 121

↓

Same Texture

↓

Pixel 122

↓

Same Texture

اگر هر بار
داده از VRAM خوانده شود،
بخش بزرگی از زمان اجرا
صرف دسترسی به حافظه خواهد شد.

L1 Cache این مشکل را حل می‌کند.

Cache چگونه کار می‌کند؟

وقتی GPU
داده‌ای را از حافظه اصلی می‌خواند،
آن را برای مدتی
داخل Cache نیز نگه می‌دارد.



VRAM

│

▼

L2 Cache

│

▼

L1 Cache

│

▼

Shader Core

اگر درخواست بعدی
همان داده را بخواهد،
دیگر نیازی به مراجعه مجدد به VRAM نیست.

L1 Cache را چه کسی مدیریت می‌کند؟

برخلاف Shared Memory،
برنامه‌نویس مستقیماً داده‌ای را
داخل L1 Cache قرار نمی‌دهد.

این کار به صورت خودکار
توسط سخت‌افزار انجام می‌شود.

مقایسه Shared Memory و L1 Cache

ویژگی

Shared Memory

L1 Cache

مدیریت

برنامه‌نویس / کامپایلر

سخت‌افزار

بارگذاری داده

دستی

خودکار

کنترل کامل

بله

خیر

ENGINEERING INSIGHT

چرا Cache را قابل برنامه‌ریزی نکرده‌اند؟

در نگاه اول شاید به نظر برسد اگر برنامه‌نویس بتواند Cache را مستقیماً مدیریت کند، عملکرد همیشه بهتر خواهد شد.

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

UNDER THE HOOD

Cache فقط سرعت را زیاد نمی‌کند؛ ترافیک حافظه را هم کم می‌کند

اگر صدها Thread به یک داده یکسان نیاز داشته باشند، بدون Cache ممکن است همان داده بارها از VRAM خوانده شود. Cache با نگه داشتن نسخه‌ای از داده در نزدیکی Shader Core، تعداد مراجعه به حافظه اصلی را کاهش می‌دهد. این کار علاوه بر کاهش تأخیر، فشار روی Memory Bus و کنترلرهای حافظه را نیز کمتر می‌کند.



Without Cache

VRAM

↓

Read

↓

Read

↓

Read

↓

Read



With Cache

VRAM

↓

Read Once

↓

L1 Cache

↓

Reuse

Reuse

Reuse

وقتی Shader داده‌ای را درخواست می‌کند چه اتفاقی می‌افتد؟

فرض کنید Shader به یک مقدار از حافظه نیاز دارد.

اولین جایی که سخت‌افزار بررسی می‌کند،
L1 Cache است.



Shader

    │

    ▼

L1 Cache

    │

 ┌──┴──┐

 │     │

Hit   Miss

از اینجا به بعد
دو سناریوی کاملاً متفاوت رخ می‌دهد.

Cache Hit

اگر داده داخل L1 Cache وجود داشته باشد،
GPU مستقیماً همان نسخه را استفاده می‌کند.



Shader

↓

L1 Cache

↓

✔ Found

↓

Return Data

این حالت
Cache Hit
نام دارد.

Cache Hit
سریع‌ترین حالت ممکن
بعد از Register و Shared Memory است.

Cache Miss

اگر داده در L1 Cache نباشد،
سخت‌افزار باید مرحله بعد را بررسی کند.



Shader

↓

L1 Cache

↓

✖ Not Found

↓

L2 Cache

↓

VRAM

به این وضعیت

Cache Miss

گفته می‌شود.

بعد از Cache Miss چه اتفاقی می‌افتد؟

اگر داده از L2 Cache
یا VRAM خوانده شود،
معمولاً نسخه‌ای از آن
دوباره داخل L1 Cache قرار می‌گیرد.



VRAM

↓

L2

↓

L1

↓

Shader

بنابراین اگر همان داده
دوباره موردنیاز باشد،
احتمال زیادی وجود دارد
که این بار Cache Hit رخ دهد.

چرا Cache Hit مهم است؟

فرض کنید
هزار Thread
به یک Texture مراجعه می‌کنند.

اگر همه آن‌ها
مستقیماً از VRAM بخوانند،
Memory Bus به شدت شلوغ خواهد شد.

اما اگر اولین Thread
داده را وارد Cache کند،
Threadهای بعدی
همان نسخه را استفاده خواهند کرد.



Thread 0

↓

VRAM



↓

Cache Filled



↓

Thread 1

Cache Hit



↓

Thread 2

Cache Hit



↓

Thread 3

Cache Hit

Cache Hit Rate

یکی از مهم‌ترین شاخص‌های عملکرد Cache،

Hit Rate

است.

نمونه نرخ موفقیت Cache

Hit Rate

وضعیت تقریبی

95%

عالی

80%

خوب

50%

نیاز به بررسی

20%

الگوی دسترسی نامناسب

مقادیر بالا نمونه‌هایی برای درک مفهوم هستند و به نوع برنامه، الگوی دسترسی و معماری GPU بستگی دارند.

ENGINEERING INSIGHT

Cache فقط برای داده‌های «تکراری» نیست

بسیاری تصور می‌کنند Cache فقط زمانی مفید است که دقیقاً همان آدرس دوباره خوانده شود.

در عمل، Cache معمولاً داده‌ها را در بلوک‌های متوالی نگه می‌دارد. بنابراین حتی اگر درخواست بعدی دقیقاً همان آدرس نباشد، ممکن است در همان بلوک قرار داشته باشد و بدون مراجعه به VRAM پاسخ داده شود.

PERFORMANCE DETECTIVE

اگر Cache Hit Rate پایین باشد…

  • آیا الگوی دسترسی به حافظه کاملاً تصادفی است؟
  • آیا داده‌ها آن‌قدر بزرگ هستند که سریع از Cache خارج می‌شوند؟
  • آیا Threadهای مجاور به داده‌های کاملاً متفاوت مراجعه می‌کنند؟
  • آیا می‌توان Locality را افزایش داد؟

UNDER THE HOOD

Cache Miss همیشه به معنی مراجعه مستقیم به VRAM نیست

یکی از برداشت‌های اشتباه این است که اگر L1 Cache داده‌ای را پیدا نکند، حتماً باید از VRAM خوانده شود. در عمل، درخواست معمولاً به سطوح بعدی سلسله‌مراتب حافظه مانند L2 Cache ارسال می‌شود و فقط در صورت نبودن داده در آنجا، دسترسی به حافظه اصلی انجام می‌شود. همین سلسله‌مراتب باعث می‌شود بسیاری از Cache Missها بدون رسیدن به VRAM برطرف شوند.

آیا Cache فقط یک عدد را ذخیره می‌کند؟

فرض کنید Shader
فقط یک عدد را از حافظه درخواست کند.

به نظر شما GPU
فقط همان یک عدد را داخل Cache قرار می‌دهد؟

شاید در نگاه اول
این منطقی به نظر برسد.

اما سخت‌افزار
تقریباً هیچ‌وقت این کار را انجام نمی‌دهد.

Cache معمولاً داده‌ها را
به صورت بلوک‌های متوالی
ذخیره می‌کند،
نه تک‌تک مقادیر.

Cache Line چیست؟

یک مثال ساده

فرض کنید برنامه
فقط مقدار شماره ۱۲ را می‌خواهد.



Memory

...

8

9

10

11

12

13

14

15

...

GPU معمولاً فقط مقدار ۱۲ را
داخل Cache قرار نمی‌دهد.

بلکه کل این بلوک را
یکجا وارد Cache می‌کند.



Cache Line

┌─────────────────────┐

8

9

10

11

12

13

14

15

└─────────────────────┘

چرا این کار انجام می‌شود؟

زیرا در بسیاری از برنامه‌ها،
اگر مقدار ۱۲ استفاده شود،
احتمال زیادی وجود دارد
که چند لحظه بعد
۱۳ یا ۱۴ نیز استفاده شوند.

به این ویژگی

Spatial Locality

گفته می‌شود.

یک مثال در پردازش تصویر

فرض کنید Shader
در حال پردازش Pixel شماره ۱۰۰ باشد.



98

99

100

101

102

103

104

احتمال بسیار زیادی وجود دارد
که Pixel بعدی
۱۰۱ باشد،
نه Pixel شماره ۹۰۰۰۰.

پس آوردن چند Pixel مجاور
کاملاً منطقی است.

مزیت Cache Line

چرا Cache از بلوک استفاده می‌کند؟

مزیت

دلیل

Hit Rate بیشتر

داده‌های مجاور آماده هستند

ترافیک کمتر

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

Latency کمتر

نیاز به مراجعه مجدد کاهش می‌یابد

اما همیشه هم مفید نیست

اگر برنامه
به داده‌های کاملاً تصادفی مراجعه کند،

بخش بزرگی از Cache Line
هیچ‌وقت استفاده نخواهد شد.



Cache Line

8

9

10

11

12

13

14

15

↓

Only 12 Used

در این حالت
کارایی Cache کاهش پیدا می‌کند.

ENGINEERING INSIGHT

چرا اندازه Cache Line بزرگ‌تر نمی‌شود؟

اگر Cache Line بسیار کوچک باشد،
تعداد زیادی انتقال حافظه انجام می‌شود.

اگر هم بیش از حد بزرگ باشد،
ممکن است حجم زیادی از داده‌هایی منتقل شوند که هرگز استفاده نمی‌شوند.

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

PERFORMANCE DETECTIVE

اگر Cache Hit پایین است…

  • آیا Threadهای مجاور
    به داده‌های مجاور مراجعه می‌کنند؟

  • آیا الگوی دسترسی
    Spatial Locality دارد؟

  • آیا داده‌ها
    کاملاً تصادفی هستند؟

  • آیا Cache Lineها
    قبل از استفاده مجدد
    جایگزین می‌شوند؟

UNDER THE HOOD

GPU آدرس‌ها را یکی‌یکی منتقل نمی‌کند

یکی از دلایل اصلی سرعت Cache این است که سخت‌افزار انتقال داده را در واحدهای بزرگ‌تر از یک مقدار انجام می‌دهد. این تصمیم باعث کاهش تعداد تراکنش‌های حافظه و افزایش بهره‌وری Memory Bus می‌شود. به همین دلیل، الگوهای دسترسی متوالی تقریباً همیشه نسبت به دسترسی‌های کاملاً تصادفی عملکرد بهتری دارند.

مرتضی 51 نوشته

مطالب مرتبط
4
مرداد
راهنمای کامل باتری لپ تاپ استوک | افزایش عمر باتری، روش صحیح شارژ و بررسی سلامت باتری
4
مرداد
تفاوت هارد اس اس دی وسترن بلو و گرین
4
مرداد
راهنمای خرید رم استوک کامپیوتر | فروش رم استوک
4
مرداد
چرا لپ‌ تاپ‌ استوک گزینه‌ای اقتصادی و هوشمندانه است؟
دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

زمینه‌های نمایش داده شده را انتخاب نمایید. بقیه مخفی خواهند شد. برای تنظیم مجدد ترتیب، بکشید و رها کنید.
  • تصویر
  • امتیاز
  • قيمت
  • موجودی
  • افزودن به سبد خرید
  • اطلاعات اضافی
برای مخفی‌کردن نوار مقایسه، بیرون را کلیک نمایید
مقایسه