دانشنامه سختافزار استوکشاپ
کارت گرافیک چیست؟ آشنایی کامل با GPU و کاربردهای آن
کارت گرافیک یکی از مهمترین قطعات کامپیوتر است که
پردازش تصاویر، اجرای بازیها، طراحی سهبعدی، تدوین
ویدئو و بسیاری از محاسبات سنگین را بر عهده دارد.
تعریف ساده GPU
گرافیک مجتمع و مجزا
آشنایی با VRAM
خلاصه مقاله کارت گرافیک
کارت گرافیک در یک نگاه
کارت گرافیک قطعهای است که دادههای تصویری و گرافیکی
را پردازش میکند و خروجی نهایی را برای نمایش روی مانیتور
میسازد. مهمترین بخش آن، پردازنده گرافیکی یا GPU است.
- GPU هسته پردازشی کارت گرافیک است.
- کارت گرافیک میتواند مجتمع، مجزا یا اکسترنال باشد.
- حافظه VRAM دادههای موردنیاز GPU را نگهداری میکند.
- بازی، رندر سهبعدی، تدوین ویدئو و هوش مصنوعی
از مهمترین کاربردهای آن هستند.
فهرست مطالب
کارت گرافیک چیست؟
GPU چیست؟
تفاوت GPU و کارت گرافیک
وظیفه کارت گرافیک
کارت گرافیک چگونه کار میکند؟
اجزای اصلی کارت گرافیک
انواع کارت گرافیک
تفاوت گرافیک مجتمع و مجزا
تفاوت GPU و CPU
مشخصات فنی کارت گرافیک
کاربردهای کارت گرافیک
انتخاب کارت گرافیک بر اساس نرمافزار
برندهای اصلی GPU
فناوریهای کارت گرافیک
راهنمای حافظه VRAM
راهنمای انتخاب کارت گرافیک
اشتباهات رایج هنگام خرید
راهنمای خرید کارت گرافیک استوک
سؤالات متداول
کارت گرافیک چیست؟
کارت گرافیک قطعهای سختافزاری است که دادههای تصویری و
گرافیکی را پردازش میکند و خروجی نهایی را برای نمایش روی
مانیتور یا سایر نمایشگرها آماده میسازد.
مهمترین بخش کارت گرافیک، پردازنده گرافیکی یا
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 | کارت گرافیک |
|---|---|---|
| ماهیت | تراشه پردازشی | مجموعه سختافزاری کامل |
| وظیفه اصلی | انجام محاسبات گرافیکی و موازی | فراهمکردن بستر کامل برای پردازش و خروجی تصویر |
| حافظه | به حافظه در دسترس خود وابسته است | در مدلهای مجزا معمولاً 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 | 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 عملکرد بیشتری داشته
باشد. قدرت تراشه، تعداد واحدهای پردازشی، پهنای باس،
محدودیت توان و معماری باید در کنار نوع حافظه سنجیده
شوند.
چگونه نوع حافظه کارت گرافیک را تشخیص دهیم؟
- مدل دقیق کارت یا GPU را در مشخصات سازنده بررسی کنید.
- از ابزارهای شناسایی سختافزار مانند GPU-Z یا
نرمافزارهای اطلاعات سیستم استفاده کنید. - در لپتاپ، کد دقیق مدل دستگاه و GPU را بررسی کنید؛
زیرا یک لپتاپ ممکن است با چند پیکربندی متفاوت عرضه
شده باشد. - فقط به مقدار حافظه نمایشدادهشده در ویندوز اعتماد
نکنید؛ زیرا حافظه اشتراکی سیستم نیز ممکن است در آن
عدد محاسبه شده باشد.
حافظه اشتراکی را با 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
| معماری | خانوادههای شناختهشده | نمونه کارتها | کاربرد و ویژگی شاخص |
|---|---|---|---|
| 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 را تشخیص دهیم؟
- مدل دقیق GPU را از Device Manager یا مشخصات
سازنده پیدا کنید. - در لپتاپ، مدل کامل دستگاه و کد پیکربندی آن را
بررسی کنید. - با نرمافزارهایی مانند GPU-Z مشخصات تراشه،
حافظه و کد GPU را مشاهده کنید. - نام معماری را با مدل دقیق کارت تطبیق دهید.
- در کارتهای دارای چند نسخه، نوع حافظه و تعداد
هستهها را نیز کنترل کنید. - نسخه درایور و آخرین سیستمعامل پشتیبانیشده را
بررسی کنید.
نام نمایشدادهشده در ویندوز همیشه کافی نیست
در بعضی لپتاپها یا کارتهای بازسازیشده، نام
نمایشدادهشده توسط درایور ممکن است برای تشخیص دقیق
نسخه 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
| معماری یا خانواده | محصولات رایج | نمونه کارتها | ویژگی و کاربرد کلی |
|---|---|---|---|
| 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 |
|---|---|---|
| کاربرد اصلی | گرافیک، بازی و تولید محتوا | هوش مصنوعی، 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
- مدل کامل کارت را از Device Manager، GPU-Z یا
مشخصات سازنده پیدا کنید. - شناسه سختافزاری GPU را در صورت وجود چند نسخه
متفاوت بررسی کنید. - نوع حافظه، ظرفیت VRAM و عرض باس را ثبت کنید.
- مشخص کنید کارت دسکتاپ، لپتاپی، ورکاستیشن یا
شتابدهنده سروری است. - معماری دقیق تراشه را با مدل تجاری تطبیق دهید.
- آخرین نسخه درایور و سیستمعامل پشتیبانیشده را
بررسی کنید. - برای نرمافزارهای حرفهای، فهرست سازگاری و
تأییدیههای 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 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
| خانواده | شرکت | کاربرد اصلی | نکته مهم |
|---|---|---|---|
| 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 | 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 |
|---|---|---|
| تعداد قطعات سیلیکونی | معمولاً یک 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
│
├── Front End
│ ├── Command Processor
│ ├── Work Queues
│ └── Task Distribution
│
├── Geometry Processing
│ ├── Vertex Processing
│ ├── Tessellation
│ └── Geometry Engine
│
├── Raster Engine
│ └── Triangle to Fragment Conversion
│
├── Shader / Compute Clusters
│ ├── NVIDIA SM
│ │ ├── CUDA Cores
│ │ ├── Tensor Cores
│ │ ├── RT Cores
│ │ ├── Registers
│ │ └── Schedulers
│ │
│ ├── AMD Compute Units / WGP
│ │ ├── Stream Processors
│ │ ├── Matrix / AI Units
│ │ ├── Registers
│ │ └── Schedulers
│ │
│ └── Intel Xe Cores
│ ├── Vector Engines
│ ├── XMX Engines
│ ├── Registers
│ └── Schedulers
│
├── Fixed-Function Units
│ ├── TMUs
│ ├── ROPs
│ ├── Ray-Tracing Units
│ ├── Video Engines
│ └── Display Engine
│
├── Cache Hierarchy
│ ├── Registers
│ ├── Shared / Local Memory
│ ├── L1 Cache
│ ├── L2 Cache
│ └── Last-Level Cache
│
├── Memory Controllers
│
├── Internal Interconnect
│
└── VRAM
├── Textures
├── Geometry
├── Frame Buffers
├── Compute Data
└── AI Model Data
مسیر کلی حرکت داده در 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 مهمتر است؟
پاسخ به نوع استفاده بستگی دارد.
| نوع استفاده | بخشهای مهمتر | نکته |
|---|---|---|
| بازی | 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 و پشتیبانی نرمافزاری آنها
محدودتر است.
| خانواده | معماری | نمونه مدل | کاربرد تقریبی امروز |
|---|---|---|---|
| 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
| معیار | 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، نور، رنگ و افکت | TMU، ROP، حافظه و درایور |
| AutoCAD | نمایش Viewport و مدل سهبعدی | CPU و پیچیدگی پروژه |
| SolidWorks | نمایش مدل و افکتهای Viewport | درایور حرفهای و گواهی ISV |
| Blender | Viewport و رندر GPU | Backend رندر و ظرفیت VRAM |
| Premiere Pro | افکت، رنگ و شتابدهی محاسبات | موتور ویدئو و کدک |
| هوش مصنوعی | محاسبات برداری و عددی | واحدهای ماتریسی و اکوسیستم نرمافزار |
هنگام خرید چگونه تعداد هستهها را بررسی کنیم؟
- ابتدا مدل دقیق GPU و معماری آن را مشخص کنید.
- تعداد هستهها را فقط با مدلهای هممعماری
مقایسه کنید. - ظرفیت و پهنای باند VRAM را بررسی کنید.
- توان مصرفی و فرکانس واقعی کارت را کنترل کنید.
- نتایج نرمافزار یا بازی موردنظر خود را ببینید.
- در لپتاپ، توان GPU و کیفیت خنککننده را
بررسی کنید. - برای CAD، گواهی و درایور حرفهای را بررسی کنید.
- برای 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 | کاربرد شاخص |
|---|---|---|---|
| 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 شد و در نسلهای بعدی بهبود پیدا کرد.
| معماری | خانواده کارت | نمونهها | وضعیت کلی |
|---|---|---|---|
| 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 |
|---|---|---|
| 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
| شرکت | واحد 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 نیز بر اساس نسل معماری خود از
این شتابدهندهها بهره میبرند.
| خانواده | معماری رایج | 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
میتواند محدودیت اصلی باشد.
فصل ۱۵-۴
TMU، ROP، Raster Engine و موتور رندر کارت گرافیک
بعد از پایان پردازش Shaderها و محاسبات هندسی،
GPU باید بافتها را روی مدلها قرار دهد،
پیکسلها را تولید کند،
عملیات عمق و شفافیت را انجام دهد
و در نهایت تصویر آماده را داخل حافظه Frame Buffer ذخیره کند.
تمام این مراحل توسط مجموعهای از واحدهای سختافزاری
مانند TMU، Raster Engine و ROP انجام میشود.
مسیر کامل تولید تصویر در GPU
تولید یک فریم سهبعدی فقط توسط هستههای Shader
انجام نمیشود. دادههای صحنه باید از چند مرحله
پردازشی عبور کنند تا در نهایت به تصویری قابل نمایش
روی مانیتور تبدیل شوند.
مسیر دقیق پردازش با توجه به معماری GPU، موتور بازی،
رابط گرافیکی و نوع تکنیک رندر متفاوت است؛ اما
ساختار کلی بیشتر روشهای Rasterization را میتوان
به مراحل زیر تقسیم کرد.
Application / Game
│
▼
CPU and Graphics API
│
▼
Command Processor
│
▼
Vertex Processing
│
▼
Geometry and Tessellation
│
▼
Primitive Assembly
│
▼
Raster Engine
│
▼
Fragment / Pixel Shader
│
├───────────────┐
▼ ▼
Texture Units Shader Cores
(TMU) CUDA / Stream / Xe
│ │
└───────┬───────┘
▼
Depth and Stencil Tests
│
▼
Blending and ROP
│
▼
Frame Buffer
│
▼
Display Engine
│
▼
Monitor
این مسیر همیشه کاملاً خطی نیست
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 کنترل میشود.
| حالت | رفتار | کاربرد نمونه |
|---|---|---|
| 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های موجود است تا بافت در زمان بزرگشدن،
کوچکشدن یا مشاهده از زاویههای مختلف کیفیت بهتری
داشته باشد.
بدون فیلتر مناسب، بافت ممکن است پیکسلی، لرزان،
محو یا دارای الگوهای ناخواسته دیده شود.
| روش | نحوه نمونهبرداری | کیفیت نسبی | هزینه پردازشی نسبی |
|---|---|---|---|
| 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 میتواند سطح
کوچکتری را انتخاب کند که با اندازه جسم روی صفحه
تناسب بیشتری دارد.
Base Texture 1024 × 1024
│
▼
Mipmap Level 1 512 × 512
│
▼
Mipmap Level 2 256 × 256
│
▼
Mipmap Level 3 128 × 128
│
▼
Mipmap Level 4 64 × 64
│
▼
...
مزایای 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 |
|---|---|---|
| مرحله پردازش | میانه مسیر رندر | مراحل پایانی رندر |
| وظیفه اصلی | تبدیل 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 |
|---|---|
| آینه | محدودکردن تصویر بازتابی به سطح آینه |
| 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 ذخیره شده است.
این عملیات برای نمایش شیشه، دود، ذرات، نورهای
درخشان، رابطهای نیمهشفاف و بسیاری از افکتهای
دیگر استفاده میشود.
New Fragment Color
│
├── Source Factor
│
▼
Blending
▲
│
├── Destination Factor
│
Existing Frame Buffer Color
│
▼
Final Output Color
شفافیت میتواند ترتیب رندر را پیچیده کند
اجسام شفاف معمولاً باید با ترتیب مشخصی رندر
شوند؛ زیرا رنگ نهایی به محتوای موجود پشت آنها
وابسته است.
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 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ها و
حافظههای کش نگهداری میکند.
Fastest / Smallest
│
▼
Registers
│
▼
Shared / Local Data Store
│
▼
L0 / Instruction Cache
│
▼
L1 Cache
│
▼
L2 Cache
│
▼
Last-Level / Large Cache
│
▼
VRAM
│
▼
System RAM
│
▼
Storage / SSD
│
▼
Slowest / Largest
چرا چند سطح حافظه وجود دارد؟
ساخت حافظهای که هم بسیار سریع، هم بسیار بزرگ
و هم کممصرف باشد دشوار و پرهزینه است. به همین
دلیل 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 قرار دارد.
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 نهایی کارت نقش دارد.
Shader and Compute Units
│
▼
L2 Cache
│
▼
Internal Interconnect
│
┌─────┼─────┐
▼ ▼ ▼
Memory Memory Memory
Ctrl 0 Ctrl 1 Ctrl 2
│ │ │
▼ ▼ ▼
VRAM VRAM VRAM
کانال حافظه در کارت گرافیک چیست؟
رابط حافظه 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 بیشتر
حافظه گرافیک مجتمع چگونه کار میکند؟
گرافیکهای مجتمع معمولاً 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ها را به صورت کاملاً مستقل
اجرا نمیکند؛ بلکه آنها را در قالب گروههایی
سازماندهی میکند تا سختافزار بتواند با کمترین
هزینه، بیشترین میزان پردازش موازی را انجام دهد.
Application
│
▼
Dispatch
│
▼
Grid
│
▼
Blocks / Workgroups
│
▼
Warps / Wavefronts
│
▼
Threads
│
▼
CUDA Core / Stream Processor / Xe Core
تعریف ساده
GPU ابتدا کار بزرگ را به هزاران Thread تقسیم
میکند و سپس آنها را به صورت گروهی روی
واحدهای پردازشی اجرا میکند.
چرا GPU هزاران Thread را همزمان اجرا میکند؟
حافظه گرافیکی نسبت به واحدهای محاسباتی تأخیر
بیشتری دارد. اگر GPU فقط چند Thread اجرا کند،
هنگام انتظار برای دریافت داده بخش زیادی از
سختافزار بیکار خواهد ماند.
به همین دلیل GPU هزاران Thread آماده اجرا نگه
میدارد تا هر زمان گروهی منتظر حافظه شد،
گروه دیگری فوراً جایگزین آن شود.
این روش یکی از مهمترین دلایل توان پردازشی بسیار
بالای GPU در بازی، رندر سهبعدی و هوش مصنوعی است.
تفاوت مدل اجرای CPU و GPU
| ویژگی | CPU | GPU |
|---|---|---|
| تعداد Thread | کم | بسیار زیاد |
| قدرت هر Thread | بسیار زیاد | کمتر |
| هدف طراحی | اجرای عمومی | پردازش موازی انبوه |
| تأخیر | کم | با مخفیسازی تأخیر مدیریت میشود |
| مناسب برای | سیستمعامل، برنامههای عمومی | بازی، رندر، هوش مصنوعی و پردازش تصویر |
Thread در GPU چیست؟
کوچکترین واحد اجرایی در پردازنده گرافیکی
Thread است.
هر Thread مجموعه مشخصی از دستورها را اجرا میکند،
Registerهای مخصوص خود را دارد و روی دادهای مشخص
کار میکند.
برای مثال اگر قرار باشد یک تصویر چهار میلیون
پیکسلی پردازش شود، ممکن است میلیونها Thread ایجاد
شوند و هر Thread مسئول پردازش یک یا چند پیکسل باشد.
مثال ساده
تصور کنید هزار نفر همزمان در حال رنگآمیزی
یک نقاشی بسیار بزرگ هستند. هر نفر فقط قسمت
کوچکی را رنگ میکند؛ اما در پایان کل تصویر
بسیار سریع آماده میشود.
تفاوت Thread در CPU و GPU
واژه Thread هم در CPU و هم در GPU استفاده میشود،
اما مفهوم و هدف طراحی آنها کاملاً یکسان نیست.
در CPU هر Thread تقریباً یک واحد پردازشی قدرتمند
محسوب میشود که میتواند وظایف پیچیده، شاخههای
شرطی متعدد و دسترسیهای نامنظم به حافظه را مدیریت
کند.
در مقابل، Threadهای 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 | نمونه داده | کاربرد رایج |
|---|---|---|
| یکبعدی | آرایه یا فهرست | پردازش عددی، جستوجو و مرتبسازی |
| دوبعدی | تصویر یا ماتریس | پردازش تصویر، فیلتر و رندر |
| سهبعدی | حجم، Voxel یا داده فضایی | شبیهسازی، پزشکی و رندر حجمی |
Grid
│
├── Block 0
│ ├── Thread 0
│ ├── Thread 1
│ ├── Thread 2
│ └── ...
│
├── Block 1
│ ├── Thread 0
│ ├── Thread 1
│ ├── Thread 2
│ └── ...
│
└── Block N
├── Thread 0
├── Thread 1
└── ...
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 |
|---|---|---|
| دید برنامهنویس | یک دستور برداری | چند 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 | وضعیت Warp آخر |
|---|---|---|
| ۳۲ | ۱ | کامل |
| ۶۴ | ۲ | کامل |
| ۱۲۸ | ۴ | کامل |
| ۲۵۶ | ۸ | کامل |
| ۲۸۰ | ۹ | Warp آخر فقط ۲۴ Thread فعال دارد |
Wavefront در AMD چیست؟
Wavefront گروهی از Work-Itemها است که در GPUهای
AMD با یکدیگر زمانبندی و اجرا میشوند.
در بسیاری از معماریهای قدیمی GCN، اندازه رایج
Wavefront برابر ۶۴ Thread یا Work-Item بود.
معماریهای جدیدتر RDNA میتوانند از حالتهای
Wave32 یا Wave64 استفاده کنند. انتخاب اندازه
Wave به Shader، API، کامپایلر و معماری بستگی دارد.
| خانواده معماری | اندازه رایج | نمونه محصولات |
|---|---|---|
| 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 | 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 دیگری را انتخاب کند تا واحدهای
پردازشی بیکار نمانند.
Resident Warps
│
├── Warp 0 ── Ready
├── Warp 1 ── Waiting for Memory
├── Warp 2 ── Ready
├── Warp 3 ── Waiting for Dependency
└── Warp 4 ── Ready
│
▼
Warp Scheduler
│
▼
Selects a Ready Warp
│
▼
Execution Units
Instruction Scheduler چیست؟
Instruction Scheduler مشخص میکند کدام دستور،
در چه زمان و روی کدام واحد اجرایی اجرا شود.
دستورها ممکن است مربوط به محاسبات عددی، بارگذاری
حافظه، ذخیره داده، Texture Sampling، عملیات
ماتریسی یا Branch باشند.
Scheduler باید وابستگی میان دستورها را نیز در نظر
بگیرد. اگر نتیجه یک دستور هنوز آماده نشده باشد،
دستور وابسته به آن نمیتواند اجرا شود.
| نوع دستور | واحد اجرایی احتمالی | نمونه کاربرد |
|---|---|---|
| FP32 | واحد محاسبات اعشاری | Shader و رندر |
| INT | واحد محاسبات صحیح | Index، آدرسدهی و منطق |
| Load | Load/Store Unit | خواندن داده از حافظه |
| Store | Load/Store Unit | نوشتن نتیجه در حافظه |
| Texture | TMU | نمونهبرداری و فیلتر بافت |
| Matrix | Tensor Core، XMX یا واحد معادل | هوش مصنوعی و ضرب ماتریسی |
| Branch | واحد کنترل جریان | شرط و حلقه |
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 with 8 Example Threads
T0 T1 T2 T3 T4 T5 T6 T7
│ │ │ │ │ │ │ │
└──────── if condition ────────┘
│ │
▼ ▼
Path A Path B
T0 T1 T2 T3 T4 T5 T6 T7
│ │
▼ ▼
Execute A Execute B
Other lanes off Other lanes off
│ │
└────────┬───────────┘
▼
Reconvergence
Warp Serialization چیست؟
Warp Serialization به حالتی گفته میشود که
عملیات اعضای یک Warp بهجای اجرای همزمان، در
چند مرحله جدا انجام شوند.
Branch Divergence، بعضی دسترسیهای حافظه،
Atomic Operationهای پرتداخل و Bank Conflict
میتوانند باعث نوعی Serialization شوند.
نتیجه معمولاً کاهش بهرهوری و طولانیترشدن زمان
اجرای Warp است.
| عامل | اثر | راهکار احتمالی |
|---|---|---|
| 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 بسیار پایین | احتمال افت عملکرد | Warp آماده کافی برای پنهانکردن تأخیر وجود ندارد |
| Occupancy متوسط | ممکن است کاملاً مناسب باشد | منابع بیشتری برای هر Thread باقی میماند |
| Occupancy بسیار بالا | لزوماً سریعتر نیست | ممکن است محدودیت دیگری مانند حافظه یا دستور وجود داشته باشد |
| Occupancy بالا با Register کم | احتمال Spilling | کاهش Register میتواند دسترسی به حافظه را افزایش دهد |
عوامل محدودکننده Occupancy
| عامل | نحوه ایجاد محدودیت | پیامد احتمالی |
|---|---|---|
| تعداد 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
و دسترسی بیشتر به حافظه ایجاد خواهد شد.
Fixed Register File Capacity
Low Registers per Thread
│
▼
More Threads Resident
│
▼
Potentially Higher Occupancy
High Registers per Thread
│
▼
Fewer Threads Resident
│
▼
Potentially Lower Occupancy
اندازه Block چه اثری بر Occupancy دارد؟
اندازه Block تعیین میکند هر گروه چند Thread داشته
باشد و به چند Warp یا Wavefront تقسیم شود.
Block بسیار کوچک ممکن است نتواند تمام ظرفیت واحد
پردازشی را استفاده کند. Block بسیار بزرگ نیز ممکن
است به دلیل محدودیت Register یا Shared Memory
تعداد گروههای مقیم را کاهش دهد.
| اندازه Block | مزیت احتمالی | محدودیت احتمالی |
|---|---|---|
| بسیار کوچک | مصرف منابع کمتر برای هر Block | تعداد Warp کم و استفاده ضعیف از SM |
| متوسط | تعادل مناسب منابع و تعداد Warp | نیازمند آزمون عملی |
| بسیار بزرگ | Threadهای بیشتر در هر Block | کاهش تعداد Blockهای همزمان |
| غیرمضرب اندازه Warp | انعطاف در بعضی الگوریتمها | ایجاد Warp نیمهخالی |
Active Warp و Resident Warp چیست؟
Resident Warp به Warpi گفته میشود که منابع لازم
برای آن روی واحد پردازشی رزرو شده و وضعیت اجرایی
آن داخل GPU قرار دارد.
Active Warp معمولاً Warpi است که هنوز اجرای آن
کامل نشده و میتواند در چرخه زمانبندی شرکت کند.
همه Warpهای Resident در هر لحظه آماده صدور دستور
نیستند؛ بعضی ممکن است منتظر حافظه، Barrier یا نتیجه
دستور قبلی باشند.
| اصطلاح | تعریف | قابلیت صدور فوری دستور |
|---|---|---|
| Resident Warp | منابع آن روی SM رزرو شده است | لزوماً نه |
| Active Warp | اجرای آن هنوز پایان نیافته است | وابسته به وضعیت |
| Eligible Warp | دستور بعدی آن قابل صدور است | بله |
| Stalled Warp | منتظر رویداد یا منبع است | خیر |
مثال ساده محاسبه مفهومی Occupancy
فرض کنید یک SM حداکثر توان نگهداری ۶۴ Warp فعال
را دارد، اما به دلیل مصرف Register و Shared Memory
فقط ۳۲ Warp روی آن قرار گرفتهاند.
در این مثال Occupancy مفهومی برابر نصف ظرفیت
سختافزار است.
این عدد بهتنهایی مشخص نمیکند Kernel سریع یا کند
است؛ زیرا ممکن است همان ۳۲ Warp برای مشغول نگه
داشتن واحدهای اجرایی کافی باشند.
چگونه Occupancy را بهینه کنیم؟
| روش | مزیت | خطر یا محدودیت |
|---|---|---|
| کاهش Register | افزایش Threadهای مقیم | احتمال Register Spilling |
| کاهش Shared Memory هر Block | افزایش Blockهای همزمان | افزایش مراجعه به VRAM |
| تغییر اندازه Block | جایگیری بهتر روی SM | کاهش کارایی الگوریتم |
| کاهش پیچیدگی Kernel | مصرف منابع کمتر | نیاز به چند Dispatch جدا |
| استفاده از ابزار Profiling | شناسایی محدودیت واقعی | نیاز به آزمون روی سختافزار هدف |
Synchronization در GPU چیست؟
هنگام اجرای هزاران Thread، همیشه همه آنها با سرعت
یکسان پیش نمیروند. بعضی زودتر به نتیجه میرسند،
بعضی منتظر حافظه میمانند و برخی هنوز در حال انجام
محاسبات هستند.
Synchronization مکانیزمی است که باعث میشود گروهی
از Threadها قبل از ادامه اجرای برنامه، منتظر
رسیدن سایر اعضای گروه بمانند.
این قابلیت از تولید دادههای ناقص، خواندن اطلاعات
اشتباه و ایجاد Race Condition جلوگیری میکند.
| کاربرد | دلیل | نمونه |
|---|---|---|
| اشتراک داده | جلوگیری از خواندن داده ناقص | 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 Add | افزودن مقدار به متغیر مشترک | شمارنده و Histogram |
| Atomic Sub | کمکردن مقدار | مدیریت شمارنده منابع |
| Atomic Min | نگهداری کوچکترین مقدار | جستوجوی کمینه |
| Atomic Max | نگهداری بزرگترین مقدار | جستوجوی بیشینه |
| Compare and Swap | مقایسه مقدار و جایگزینی شرطی | Lock و ساختار داده همزمان |
| Atomic Exchange | جایگزینی مقدار بهصورت اتمیک | علامتگذاری وضعیت |
Atomic Contention چیست؟
اگر تعداد زیادی Thread بخواهند همزمان یک آدرس
حافظه را با عملیات Atomic تغییر دهند، درخواستها
ممکن است پشتسرهم اجرا شوند.
این وضعیت Atomic Contention نام دارد و میتواند
اجرای موازی را به گلوگاه تبدیل کند.
هرچه تعداد Threadهای درگیر و تمرکز آنها روی یک
آدرس بیشتر باشد، احتمال Serialization نیز بیشتر
میشود.
Thread 0 ──┐
Thread 1 ──┤
Thread 2 ──┤
Thread 3 ──┤
Thread 4 ──┤
▼
Same Memory Address
│
▼
Atomic Queue
│
▼
Serialized Updates
Race Condition چیست؟
Race Condition زمانی رخ میدهد که نتیجه برنامه به
ترتیب زمانبندی و اجرای Threadها وابسته باشد.
اگر دو یا چند Thread بدون هماهنگی روی یک داده
مشترک بخوانند یا بنویسند، نتیجه میتواند در هر
اجرا متفاوت باشد.
Race Condition ممکن است باعث خروجی اشتباه، ناپایداری،
خطای تصویری یا خرابشدن داده شود.
| نوع تداخل | توضیح | خطر |
|---|---|---|
| Write After Write | چند Thread روی یک آدرس مینویسند | یکی از نتایج از بین میرود |
| Read After Write | Thread دادهای را پیش از کاملشدن نوشتن میخواند |
دریافت مقدار قدیمی یا ناقص |
| Write After Read | داده پیش از پایان استفاده Thread دیگر تغییر میکند |
نتیجه غیرقابل پیشبینی |
مثال ساده Race Condition
فرض کنید مقدار یک شمارنده برابر ۱۰ است و دو Thread
همزمان میخواهند آن را یک واحد افزایش دهند.
Initial Value = 10
Thread A reads 10
Thread B reads 10
Thread A calculates 11
Thread B calculates 11
Thread A writes 11
Thread B writes 11
Expected Result = 12
Actual Result = 11
استفاده از 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
هستند.
| علت | وضعیت | راهکار |
|---|---|---|
| Barrier داخل شرط | فقط بخشی از Threadها به Barrier میرسند |
اطمینان از رسیدن تمام اعضای گروه |
| Lock حلقهای | هر Thread منتظر منبع Thread دیگر است | ترتیب ثابت دریافت Lock |
| Spinlock نامناسب | Threadها بدون پیشرفت منتظر میمانند | استفاده از الگوریتم بدون Lock |
| هماهنگی میان Blockها | فرض همزمانی Blockهایی که ممکن است همزمان مقیم نباشند |
تقسیم کار به چند Dispatch |
چرا Barrier داخل شرط خطرناک است؟
اگر فقط بعضی Threadهای یک Workgroup وارد مسیر شرطی
شوند و به Barrier برسند، سایر Threadها ممکن است
هرگز به همان Barrier نرسند.
در نتیجه Threadهای رسیده برای همیشه منتظر باقی
میمانند و برنامه متوقف میشود یا رفتار تعریفنشده
ایجاد میکند.
if (condition) {
Thread 0 ── reaches barrier
Thread 1 ── reaches barrier
}
Thread 2 ── skips condition
Thread 3 ── skips condition
Threads 0 and 1 wait forever
اصول همگامسازی امن در GPU
| اصل | توضیح |
|---|---|
| کاهش داده مشترک | تا جای ممکن هر Thread روی داده مستقل کار کند |
| استفاده محدود از Atomic | Atomic فقط در نقاط لازم استفاده شود |
| Barrier یکنواخت | تمام Threadهای گروه باید به Barrier برسند |
| تقسیم الگوریتم | مراحل پیچیده به چند Kernel یا Dispatch تقسیم شوند |
| استفاده از Shared Memory محلی | رقابت روی Global Memory کاهش پیدا کند |
| Profiling و Validation | خطاهای همزمانی روی سختافزار هدف بررسی شوند |
Cooperative Groups چیست؟
Cooperative Groups روشی برای تعریف و مدیریت
گروههای مختلف Thread در برنامههای موازی است.
بهجای اینکه برنامه فقط کل Thread Block را بهعنوان
یک گروه در نظر بگیرد، میتواند زیرگروههای کوچکتر
یا مجموعههای بزرگتری از Threadها را برای همکاری
و همگامسازی ایجاد کند.
این قابلیت در الگوریتمهایی که نیاز به ارتباط
مستقیم، رأیگیری، جابهجایی داده و هماهنگی میان
گروههای مشخص دارند مفید است.
| نوع گروه | اعضا | کاربرد |
|---|---|---|
| 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های کوچک
کاربرد دارند.
| عملیات | وظیفه | نمونه کاربرد |
|---|---|---|
| Shuffle | انتقال مستقیم مقدار میان Laneها | Reduction و Scan |
| Ballot | ساخت Mask از نتیجه شرط Threadها | تشخیص اعضای فعال |
| Any | بررسی درستبودن شرط برای حداقل یک عضو | خروج زودهنگام گروهی |
| All | بررسی درستبودن شرط برای همه اعضا | تصمیمگیری جمعی |
| Match | شناسایی اعضای دارای مقدار مشابه | گروهبندی داده |
Parallel Reduction چیست؟
Parallel Reduction روشی برای تبدیل مجموعه بزرگی
از دادهها به یک نتیجه کوچکتر مانند مجموع،
میانگین، کمینه یا بیشینه است.
بهجای اینکه یک Thread تمام دادهها را پشتسرهم
پردازش کند، Threadهای متعدد بخشهای مختلف را
محاسبه و نتایج خود را مرحلهبهمرحله با یکدیگر
ترکیب میکنند.
Input Values
1 2 3 4 5 6 7 8
│ │ │ │ │ │ │ │
└┬─┘ └┬─┘ └┬─┘ └┬─┘
3 7 11 15
└──┬──┘ └──┬──┘
10 26
└────┬────┘
36
| عملیات | نتیجه | نمونه کاربرد |
|---|---|---|
| Sum | مجموع دادهها | آمار و تحلیل عددی |
| Minimum | کوچکترین مقدار | جستوجوی کمینه |
| Maximum | بزرگترین مقدار | جستوجوی بیشینه |
| Average | میانگین | پردازش تصویر و داده |
| Logical Reduction | نتیجه AND یا OR | بررسی شرط جمعی |
Prefix Sum یا Scan چیست؟
Prefix Sum عملیاتی است که برای هر عنصر، مجموع
عناصر قبلی یا عناصر قبلی بهعلاوه خود آن را
محاسبه میکند.
این الگوریتم در فشردهسازی داده، مرتبسازی،
ساخت اندیس، تخصیص محل خروجی و پردازش گراف کاربرد
گسترده دارد.
| نوع Scan | ورودی | خروجی نمونه |
|---|---|---|
| Inclusive | ۱، ۲، ۳، ۴ | ۱، ۳، ۶، ۱۰ |
| Exclusive | ۱، ۲، ۳، ۴ | ۰، ۱، ۳، ۶ |
ساخت Histogram روی GPU
Histogram تعداد تکرار مقادیر مختلف را محاسبه
میکند. برای نمونه در تصویر خاکستری میتوان تعداد
پیکسلهای هر سطح روشنایی را شمارش کرد.
چالش اصلی این است که Threadهای متعدد ممکن است
بخواهند یک شمارنده مشترک را همزمان افزایش دهند.
برای کاهش رقابت، معمولاً هر Block یک Histogram
محلی در Shared Memory میسازد و در پایان نتایج
محلی با یکدیگر ادغام میشوند.
۱
تقسیم داده
هر Thread بخشی از تصویر یا آرایه را
پردازش میکند.
۲
شمارش محلی
هر Block شمارندههای محلی خود را میسازد.
۳
همگامسازی
Threadها پس از پایان شمارش محلی هماهنگ
میشوند.
۴
ادغام نتایج
Histogramهای محلی در خروجی نهایی جمع
میشوند.
مرتبسازی موازی روی GPU
الگوریتمهایی مانند Radix Sort، Bitonic Sort و
Merge Sort میتوانند برای اجرای موازی روی GPU
طراحی شوند.
انتخاب الگوریتم مناسب به تعداد دادهها، نوع کلید،
مقدار حافظه و میزان نیاز به ترتیب پایدار بستگی دارد.
| الگوریتم | مزیت | محدودیت |
|---|---|---|
| Radix Sort | مناسب کلیدهای عددی | نیاز به چند مرحله عبور |
| Bitonic Sort | الگوی منظم و قابل موازیسازی | برای داده بسیار بزرگ همیشه بهینه نیست |
| Merge Sort | مناسب دادههای عمومی | نیاز به حافظه میانی |
اجرای محاسبات ماتریسی توسط Threadها
ضرب ماتریسی یکی از مهمترین عملیات در هوش مصنوعی،
شبیهسازی، گرافیک و محاسبات علمی است.
ماتریسهای بزرگ به Tileهای کوچکتر تقسیم میشوند
و هر Block یا Workgroup مسئول پردازش بخشی از
خروجی است.
دادههای Tile میتوانند در Shared Memory قرار
بگیرند تا چندین بار بدون مراجعه مکرر به VRAM
استفاده شوند.
Matrix A Matrix B
┌────┬────┐ ┌────┬────┐
│Tile│Tile│ │Tile│Tile│
├────┼────┤ × ├────┼────┤
│Tile│Tile│ │Tile│Tile│
└────┴────┘ └────┴────┘
│
▼
Shared Memory Tiles
│
▼
Parallel Multiply-Accumulate
│
▼
Output Matrix C
مقایسه Reduction، Scan و Histogram
| الگوریتم | ورودی | خروجی | چالش اصلی |
|---|---|---|---|
| Reduction | آرایه بزرگ | یک یا چند مقدار خلاصه | ترکیب مرحلهای دادهها |
| Scan | آرایه ترتیبی | مجموعهای پیشوندی | حفظ ارتباط ترتیب عناصر |
| Histogram | داده دستهبندیشونده | شمارنده هر دسته | Atomic Contention |
| Matrix Multiply | دو ماتریس | ماتریس نتیجه | پهنای باند و استفاده مجدد داده |
نقش Threadها در بازی و رندر گرافیکی
در رندر گرافیکی، هر Thread میتواند بخشی از
پردازش یک رأس، Fragment، پیکسل، نمونه بافت،
پرتو یا داده مربوط به یک افکت را انجام دهد.
موتور بازی یا نرمافزار سهبعدی حجم بزرگی از
دادهها را به GPU میفرستد و سختافزار آنها را
میان هزاران Thread تقسیم میکند.
عملکرد نهایی به هماهنگی میان Shaderها، حافظه،
Scheduler، TMU، ROP و واحدهای اختصاصی بستگی دارد.
| مرحله | وظیفه 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 شود.
| عامل | اثر | نتیجه احتمالی |
|---|---|---|
| مسیر متفاوت پرتو | پیمایش متفاوت ساختار هندسی | Divergence بیشتر |
| Material متفاوت | اجرای Shaderهای گوناگون | کاهش یکپارچگی Warp |
| تعداد Bounce متفاوت | طول اجرای نامساوی | Threadهای غیرفعال بیشتر |
| Miss و Hit متفاوت | مسیرهای برنامه متفاوت | Serialization برخی مسیرها |
نقش Threadها در هوش مصنوعی
مدلهای هوش مصنوعی شامل تعداد بسیار زیادی عملیات
ماتریسی، برداری و انتقال داده هستند.
Threadها بخشهای مختلف ماتریس، Tensor یا Batch را
پردازش میکنند و دادهها را برای CUDA Core،
Tensor Core، XMX یا واحدهای مشابه آماده میسازند.
عملکرد مناسب به چیدمان حافظه، اندازه Tile، نوع
داده، Occupancy و هماهنگی میان 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 استفاده کنند.
| وظیفه | واحد اصلی | نقش 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 | عامل مهم دیگر |
|---|---|---|
| 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 را برای نرمافزارهای
تخصصی بهینه کند.
| خانواده | گروه اجرایی | کاربرد رایج |
|---|---|---|
| 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
و ویژگیهای معماری آنها محدودتر است.
| مدل یا خانواده | معماری | گروه اجرایی | محدودیت امروز |
|---|---|---|---|
| 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 | توان پردازشی و حافظه مشترک محدود |
| بخش | عنوان | موضوع اصلی | سطح مطالعه |
|---|---|---|---|
| ۱ | مفهوم 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 Thread
│
▼
Register
│
▼
Shared Memory / L1 Cache
│
▼
L2 Cache
│
▼
Last-Level Cache
│
▼
VRAM
│
▼
System RAM through PCI Express
انواع اصلی دسترسی حافظه در 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 فقط مقدار
کوچکی داده نیاز داشته باشد.
Coalesced Access
T0 → Address 0
T1 → Address 1
T2 → Address 2
T3 → Address 3
│
▼
One or Few Memory Transactions
Scattered Access
T0 → Address 0
T1 → Address 19
T2 → Address 47
T3 → Address 93
│
▼
Multiple Memory Transactions
چه عواملی بر سرعت دسترسی حافظه اثر دارند؟
| عامل | اثر | نتیجه احتمالی |
|---|---|---|
| نزدیکی آدرسها | امکان ترکیب درخواستها | تراکنش کمتر |
| 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
Threads in One Warp
T0 T1 T2 T3 T4 T5 T6 T7
│ │ │ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼
A0 A1 A2 A3 A4 A5 A6 A7
Adjacent Threads
+
Adjacent Addresses
│
▼
One or Few Efficient Transactions
چرا Coalescing اهمیت دارد؟
حافظه خارجی GPU مانند GDDR یا HBM داده را در
بلوکها و تراکنشهای مشخص منتقل میکند.
اگر Threadها فقط بخش کوچکی از چندین بلوک حافظه را
درخواست کنند، مقدار زیادی از پهنای باند بدون
استفاده مفید مصرف میشود.
دسترسی Coalesced کمک میکند داده منتقلشده با
نیاز واقعی Threadها تطابق بیشتری داشته باشد.
| مزیت | اثر مستقیم | نتیجه احتمالی |
|---|---|---|
| تراکنش کمتر | درخواستهای Threadها ترکیب میشوند | کاهش فشار روی حافظه |
| استفاده بهتر از پهنای باند | داده منتقلشده بیشتر استفاده میشود | سرعت بالاتر Kernel |
| Cache Line مؤثرتر | Threadهای مجاور از دادههای یک بلوک استفاده میکنند |
Cache Hit بیشتر |
| تأخیر قابل پنهانسازی | درخواستهای حافظه سریعتر تکمیل میشوند | Warpهای متوقفشده کمتر |
| مصرف انرژی کمتر | انتقالهای اضافی کاهش پیدا میکنند | بهرهوری بالاتر GPU |
مثال دسترسی Coalesced به آرایه
فرض کنید هر Thread باید یک عنصر از یک آرایه بزرگ
را پردازش کند.
اگر Thread شماره صفر عنصر صفر، Thread شماره یک
عنصر یک و Thread شماره دو عنصر دو را بخواند،
دسترسیها منظم و مجاور خواهند بود.
Array:
[0] [1] [2] [3] [4] [5] [6] [7]
Thread 0 → Array[0]
Thread 1 → Array[1]
Thread 2 → Array[2]
Thread 3 → Array[3]
Thread 4 → Array[4]
Thread 5 → Array[5]
Thread 6 → Array[6]
Thread 7 → Array[7]
Result:
Regular and Adjacent Access
دسترسی سطری به ماتریس
در بسیاری از زبانها، عناصر هر سطر ماتریس بهصورت
پشتسرهم در حافظه ذخیره میشوند.
اگر 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، هر ویژگی در یک آرایه
جداگانه قرار میگیرد.
| چیدمان | ساختار حافظه | مزیت | محدودیت |
|---|---|---|---|
| Array of Structures | تمام ویژگیهای هر عنصر کنار هم | مناسب دسترسی کامل به هر شیء | دسترسی یک ویژگی ممکن است پراکنده شود |
| Structure of Arrays | هر ویژگی در آرایه جدا | مناسب دسترسی گروهی Threadها | مدیریت ساختار پیچیدهتر |
Array of Structures
[x0 y0 z0] [x1 y1 z1] [x2 y2 z2]
Structure of Arrays
X: [x0 x1 x2]
Y: [y0 y1 y2]
Z: [z0 z1 z2]
اندازه داده و 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 یا تغییر چیدمان حافظه میتواند
بخشی از هزینه را کاهش دهد.
| عامل | مشکل ایجادشده | راهکار احتمالی |
|---|---|---|
| داده نامنظم | آدرسهای پراکنده | مرتبسازی یا گروهبندی داده |
| Branch Divergence | فقط بخشی از Threadها دسترسی دارند | همگنسازی Workload |
| ساختار AoS | فاصله میان ویژگیهای مشابه | استفاده از SoA |
| Stride بزرگ | عبور از چندین بلوک حافظه | Transpose یا Tile-Based Processing |
| Alignment نامناسب | شکستن تراکنش روی چند مرز | Padding و همترازی مناسب |
کاربرد Coalesced Access در نرمافزارهای مختلف
| کاربرد | نوع داده | اهمیت 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
زمانی که درخواستهای حافظه تصادفی باشند،
کنترلکننده حافظه نمیتواند آنها را بهخوبی
ادغام کند و در نتیجه تعداد زیادی انتقال مستقل
ایجاد میشود.
| بخش | اثر 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های قدیمی
| مدل | معماری | نتیجه |
|---|---|---|
| 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
| کاربرد | نمونه استفاده | میزان استفاده |
|---|---|---|
| Texture Sampling | خواندن چند Pixel | بسیار زیاد |
| Ray Tracing | دادههای پراکنده صحنه | زیاد |
| هوش مصنوعی | Sparse Tensor | زیاد |
| پردازش تصویر | فیلترهای همسایگی | بسیار زیاد |
| Graph Processing | خواندن گرههای مختلف | زیاد |
اثر Gather بر عملکرد GPU
عملکرد Gather به فاصله آدرسها، وضعیت Cache،
پهنای باند حافظه و نوع الگوریتم بستگی دارد.
اگر دادهها در Cache موجود باشند، هزینه Gather
بسیار کمتر خواهد بود.
| عامل | اثر |
|---|---|
| Cache Hit | افزایش سرعت |
| Cache Miss | مراجعه به VRAM |
| فاصله آدرسها | افزایش Transaction |
| پهنای باند | محدودکننده سرعت |
| Memory Latency | افزایش زمان انتظار |
نمونه در کارتهای قدیمی
| کارت گرافیک | وضعیت 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 |
|---|---|---|
| عملیات اصلی | خواندن | نوشتن |
| مسیر داده | چند آدرس → یک Thread | یک Thread → چند آدرس |
| استفاده از Cache | زیاد | وابسته به معماری |
| احتمال برخورد | کم | زیاد |
| نیاز به Atomic | معمولاً خیر | گاهی ضروری |
نقش Atomic Operation در Scatter
اگر چندین Thread همزمان بخواهند روی یک آدرس
حافظه عملیات نوشتن انجام دهند، ممکن است دادهها
بهدرستی ذخیره نشوند.
برای جلوگیری از این مشکل، GPU از
Atomic Operation
استفاده میکند.
عملیات Atomic تضمین میکند که هر بار فقط یک
Thread بتواند مقدار آن آدرس را تغییر دهد.
کاربردهای Scatter Access
| نرمافزار یا کاربرد | نمونه عملیات |
|---|---|
| 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 کاهش پیدا میکند.
| مدل | کاربرد |
|---|---|
| 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
وابسته است.
| نوع Locality | مفهوم | نمونه | اثر بر Cache |
|---|---|---|---|
| Temporal Locality | استفاده دوباره از همان داده در فاصله زمانی کوتاه |
خواندن چندباره یک Tile ماتریس | افزایش احتمال Cache Hit |
| Spatial Locality | استفاده از دادههای نزدیک به آدرس فعلی |
پردازش عناصر متوالی آرایه | استفاده بهتر از Cache Line |
نمونه الگوی Cache-Friendly
VRAM Data
[A0 A1 A2 A3] [A4 A5 A6 A7]
│
▼
Cache Line
[A0 A1 A2 A3]
│
├── Thread 0 uses A0
├── Thread 1 uses A1
├── Thread 2 uses A2
└── Thread 3 uses A3
Nearby Data Already Available in Cache
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 شوند.
| عامل | اتفاق ایجادشده | پیامد |
|---|---|---|
| Working Set بزرگ | دادهها در Cache جا نمیشوند | Cache Miss بیشتر |
| Random Access | Cache Lineهای متعدد بارگذاری میشوند | استفاده مجدد کمتر |
| چند جریان داده | دادههای یکدیگر را جایگزین میکنند | کاهش Locality |
| Tile نامناسب | اندازه بلوک از ظرفیت Cache بیشتر است | مراجعه مکرر به VRAM |
Tiling چگونه بهرهوری Cache را افزایش میدهد؟
Tiling یعنی داده بزرگ به بلوکهای کوچکتر تقسیم
شود تا هر بلوک در Cache یا Shared Memory جا بگیرد.
بهجای پردازش یک ماتریس یا تصویر کامل، GPU ابتدا
یک Tile کوچک را بارگذاری میکند، چندین عملیات روی
آن انجام میدهد و سپس به Tile بعدی میرود.
این روش استفاده مجدد از داده را افزایش و حجم
انتقال میان VRAM و واحدهای پردازشی را کاهش میدهد.
Large Matrix
┌──────┬──────┬──────┐
│Tile 0│Tile 1│Tile 2│
├──────┼──────┼──────┤
│Tile 3│Tile 4│Tile 5│
├──────┼──────┼──────┤
│Tile 6│Tile 7│Tile 8│
└──────┴──────┴──────┘
Process One Tile
│
▼
Reuse Data in Cache or Shared Memory
│
▼
Move to the Next Tile
ترتیب حلقهها و دسترسی به حافظه
ترتیب اجرای حلقهها میتواند تعیین کند دادهها
بهصورت متوالی یا با 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 در کاربردهای مختلف
| کاربرد | داده اصلی | روش بهینهسازی | اهمیت |
|---|---|---|---|
| بازی | 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-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
| بررسی | هدف |
|---|---|
| دادههای مجاور با هم پردازش شوند | افزایش Spatial Locality |
| داده خواندهشده دوباره استفاده شود | افزایش Temporal Locality |
| Working Set کوچک نگه داشته شود | جلوگیری از Cache Thrashing |
| پردازش به Tile تقسیم شود | جاگیری بهتر در Cache |
| چیدمان AoS و SoA مقایسه شود | کاهش داده بلااستفاده |
| Random Access کاهش یابد | کاهش Cache Miss |
| ابزار Profiling استفاده شود | شناسایی گلوگاه واقعی |
مقایسه کامل الگوهای دسترسی به حافظه GPU
هیچ الگوی دسترسی حافظهای برای تمام الگوریتمها
بهترین نیست. کارایی هر روش به چیدمان داده، نوع
پردازش، معماری GPU، اندازه Cache و میزان استفاده
مجدد از اطلاعات بستگی دارد.
بااینحال، دسترسیهای منظم و مجاور معمولاً پهنای
باند مؤثرتری ایجاد میکنند و دسترسیهای پراکنده
فشار بیشتری بر Cache و VRAM وارد میکنند.
| الگوی دسترسی | ساختار آدرسها | تعداد تراکنش | بهرهوری 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ها مدت کمتری منتظر حافظه بمانند.
| روش | هدف | مزیت | خطر یا محدودیت |
|---|---|---|---|
| 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 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
را افزایش دهد.
| تغییر | مزیت | هزینه احتمالی |
|---|---|---|
| استفاده بیشتر از 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
معمولاً پیش از هرگونه بهینهسازی پردازشی، الگوی دسترسی
حافظه را بررسی میکنند.
مهمترین توصیههای مهندسی
| توصیه | دلیل | نتیجه |
|---|---|---|
| استفاده از 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 چیست؟ |
مفهوم 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، پهنای باند حافظه، واحدهای اختصاصی و توان
مصرفی آنها متفاوت است.
حتی در یک معماری مشابه نیز افزایش فرکانس زمانی
مفید است که محدودیت دما، توان یا پهنای باند حافظه
مانع استفاده کامل از آن نشود.
| عامل | نقش | اثر احتمالی |
|---|---|---|
| معماری | تعیین توان انجام کار در هر چرخه | اختلاف عملکرد حتی در 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 یا طراحی
برد، فرکانس واقعی متفاوتی داشته باشند.
Requested Performance
│
▼
Temperature Check
│
▼
Power Limit Check
│
▼
Voltage and Stability Check
│
▼
Available Cooling Headroom
│
▼
Selected Boost Clock
تفاوت Base Clock و Boost Clock
| معیار | 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 |
|---|---|---|
| مفهوم | نقطه فرکانسی انتخابشده | نرخ مؤثر فعالیت واقعی |
| اثر Idle Cycle | ممکن است نشان داده نشود | در مقدار نهایی منعکس میشود |
| کاربرد | بررسی رفتار Boost | تحلیل استفاده واقعی از فرکانس |
Clock Domainهای مختلف در GPU
تمام اجزای GPU الزاماً با یک فرکانس واحد کار
نمیکنند. معماری میتواند چند Clock Domain مستقل
داشته باشد که هرکدام بر اساس نیاز خود تنظیم شوند.
جداشدن 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 |
|---|---|---|
| مفهوم | فرکانس فیزیکی حافظه | نرخ مؤثر انتقال داده |
| کاربرد | طراحی سختافزار | محاسبه پهنای باند |
| عدد درجشده در تبلیغات | معمولاً خیر | معمولاً بله |
رفتار فرکانس در انواع حافظه
| نوع حافظه | نرخ انتقال | کاربرد رایج |
|---|---|---|
| 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 شناخته میشود.
هدف اصلی این سیستم کاهش مصرف انرژی، کنترل دما
و افزایش عمر قطعات بدون کاهش محسوس عملکرد است.
اثر افزایش ولتاژ
| اثر | نتیجه |
|---|---|
| پایداری بیشتر | امکان رسیدن به فرکانس بالاتر |
| مصرف انرژی | افزایش توان مصرفی |
| دما | تولید گرمای بیشتر |
| فشار روی مدار تغذیه | افزایش بار 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 لحظهای.
| خانواده | اولویت طراحی |
|---|---|
| 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
مصرف انرژی تراشه را میتوان بهصورت مفهومی به دو
بخش توان ایستا و توان پویا تقسیم کرد.
توان پویا هنگام تغییر وضعیت ترانزیستورها و اجرای
محاسبات ایجاد میشود. توان ایستا نیز حتی در نبود
فعالیت کامل، به دلیل نشت جریان ترانزیستورها وجود
دارد.
| نوع توان | علت | عوامل مؤثر |
|---|---|---|
| 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 از مدار تغذیه مادربرد تأمین
میشود و محدودیت آن به طراحی دستگاه، آداپتور،
باتری و سیستم خنککننده وابسته است.
Desktop GPU
Power Supply
│
├── PCI Express Slot
│
└── Auxiliary Power Connector
│
▼
VRM
│
┌───────┴────────┐
▼ ▼
GPU Core VRAM
Laptop GPU
AC Adapter / Battery
│
▼
Motherboard Power Circuit
│
▼
GPU and VRAM
بازده مدار VRM چه اثری بر مصرف دارد؟
مدار VRM ولتاژ ورودی منبع تغذیه را به ولتاژهای
پایین و دقیق موردنیاز هسته GPU و حافظه تبدیل
میکند.
این تبدیل کاملاً بدون اتلاف نیست و بخشی از انرژی
به گرما تبدیل میشود. کیفیت طراحی، تعداد فازها،
نوع قطعات و دمای VRM بر بازده آن اثر دارند.
VRM ضعیف یا بسیار گرم ممکن است پایداری فرکانس را
کاهش دهد یا باعث محدودشدن توان کارت شود.
تفاوت TDP، TGP و TBP چیست؟
شرکتها و سازندگان سختافزار از اصطلاحات مختلفی
برای بیان توان یا نیاز حرارتی کارت گرافیک استفاده
میکنند.
این اصطلاحات همیشه دقیقاً یک محدوده یکسان را
اندازهگیری نمیکنند؛ بنابراین مقایسه مستقیم
اعداد بدون توجه به تعریف سازنده میتواند گمراهکننده
باشد.
| اصطلاح | مفهوم عمومی | محدوده احتمالی | نکته مهم |
|---|---|---|---|
| TDP | شاخص طراحی حرارتی | گرمایی که سیستم خنککننده باید مدیریت کند | الزاماً مصرف دقیق لحظهای نیست |
| TGP | توان کلی پردازنده یا زیرسیستم گرافیکی | معمولاً GPU و اجزای وابسته | تعریف دقیق به سازنده وابسته است |
| TBP | توان کلی برد | هسته، حافظه و اجزای کارت | به توان کل کارت نزدیکتر است |
| Board Power | توان اندازهگیریشده یا محدودشده برد | کل کارت گرافیک | ممکن است لحظهای یا میانگین باشد |
چرا TGP در لپتاپ اهمیت بیشتری دارد؟
یک مدل GPU لپتاپی ممکن است در دستگاههای مختلف
با سقف توان متفاوت تنظیم شود.
نسخه کممصرفتر معمولاً فرکانس پایدار پایینتری
دارد، درحالیکه نسخه پرتوانتر در صورت وجود
خنککننده مناسب میتواند عملکرد بیشتری ارائه دهد.
به همین دلیل نام GPU بهتنهایی برای مقایسه دو
لپتاپ کافی نیست و باید توان واقعی یا محدوده TGP
آنها نیز بررسی شود.
| TGP پایینتر | TGP بالاتر |
|---|---|
| مصرف و گرمای کمتر | عملکرد بالقوه بیشتر |
| مناسب دستگاه باریکتر | نیازمند خنککننده قویتر |
| فشار کمتر بر آداپتور و باتری | مصرف انرژی و صدای فن بیشتر |
| Boost پایدار پایینتر | Boost پایدار بالاتر در شرایط مناسب |
Power Limit چیست؟
Power Limit سقفی است که مشخص میکند کارت گرافیک
در یک بازه زمانی چه مقدار توان الکتریکی میتواند
مصرف کند.
کنترلکننده توان GPU بهطور پیوسته مصرف هسته،
حافظه و بخشهای مختلف کارت را بررسی میکند. اگر
توان مصرفی به محدوده تعیینشده نزدیک شود، سیستم
ممکن است فرکانس، ولتاژ یا میزان Boost را کاهش دهد.
Power Limit برای جلوگیری از فشار بیشازحد بر مدار
تغذیه، منبع انرژی، آداپتور، باتری و سیستم خنککننده
استفاده میشود.
Power Limit چگونه عمل میکند؟
GPU برای رسیدن به فرکانس بالاتر معمولاً به ولتاژ
و توان بیشتری نیاز دارد. کنترلکننده داخلی بررسی
میکند که افزایش فرکانس باعث عبور از سقف توان
نشود.
اگر فضای توان وجود داشته باشد، GPU میتواند Boost
بیشتری اعمال کند. اگر مصرف به سقف برسد، فرکانس
کاهش پیدا میکند تا توان در محدوده مجاز باقی بماند.
GPU Workload Increases
│
▼
Higher Clock Requested
│
▼
Power Consumption Checked
│
┌────┴────┐
│ │
Below Limit At Power Limit
│ │
▼ ▼
Boost More Reduce Clock or Voltage
تفاوت Power Limit و TGP
TGP معمولاً مشخصهای برای توان طراحیشده زیرسیستم
گرافیکی است، درحالیکه Power Limit محدودیتی است
که Firmware یا BIOS برای کنترل مصرف واقعی اعمال
میکند.
این دو مقدار ممکن است به یکدیگر نزدیک باشند، اما
همیشه دقیقاً برابر نیستند و تعریف آنها به سازنده
و نوع محصول بستگی دارد.
| معیار | Power Limit | TGP |
|---|---|---|
| مفهوم | سقف اجرایی مصرف توان | مشخصه توان زیرسیستم گرافیکی |
| محل تنظیم | BIOS، Firmware یا نرمافزار | طراحی و مشخصات سازنده |
| قابلیت تغییر | در بعضی کارتها قابل تنظیم است | معمولاً مشخصه محصول است |
| اثر مستقیم | محدودکردن Boost و مصرف لحظهای | تعیین کلاس توان و خنککننده |
افزایش Power Limit چه اثری دارد؟
در بعضی کارتهای دسکتاپ، نرمافزارهای تنظیم GPU
اجازه میدهند Power Limit در محدودهای مشخص افزایش
پیدا کند.
افزایش این مقدار به معنی افزایش مستقیم فرکانس نیست؛
بلکه فضای بیشتری در اختیار سیستم Boost قرار میدهد
تا در صورت مناسببودن دما و ولتاژ، فرکانس بالاتری
حفظ شود.
| اثر | نتیجه احتمالی |
|---|---|
| فضای توان بیشتر | حفظ Boost Clock بالاتر |
| مصرف برق بیشتر | فشار بیشتر بر منبع تغذیه و آداپتور |
| تولید گرمای بیشتر | افزایش دما و سرعت فن |
| فشار بیشتر بر VRM | نیاز به مدار تغذیه و خنککننده مناسب |
| احتمال محدودیت حرارتی | تبدیل Power Limit به Thermal Limit |
کاهش Power Limit چه کاربردی دارد؟
کاهش Power Limit میتواند برای کنترل دما، کاهش
صدای فن، کاهش مصرف انرژی و افزایش پایداری سیستم
خنککننده مفید باشد.
در بعضی GPUها، کاهش محدود توان افت عملکرد کمی
ایجاد میکند؛ زیرا بخش پایانی منحنی فرکانس و
ولتاژ بهرهوری پایینی دارد.
این روش برای ورکاستیشنهای کوچک، لپتاپهای
قدیمی، سیستمهای کمصدا و کارتهایی با خنککننده
محدود کاربرد دارد.
| مزیت | محدودیت |
|---|---|
| دمای کمتر | کاهش احتمالی فرکانس |
| صدای فن کمتر | افت عملکرد در بارهای سنگین |
| مصرف انرژی کمتر | نیاز به آزمون برای یافتن نقطه مناسب |
| فشار کمتر بر VRM و آداپتور | محدودیت در رندر یا محاسبات طولانی |
Power Throttling چیست؟
Power Throttling زمانی رخ میدهد که GPU به سقف
توان تعیینشده برسد و برای جلوگیری از عبور از آن،
فرکانس یا ولتاژ خود را کاهش دهد.
این وضعیت لزوماً نشانه خرابی نیست؛ بلکه بخشی از
رفتار طبیعی سیستم مدیریت توان است.
اگر Power Throttling دائماً رخ دهد، ممکن است کارت
در بار کاری موردنظر به توان بیشتری نیاز داشته باشد
یا طراحی دستگاه عمداً برای مصرف پایینتر تنظیم شده
باشد.
نشانههای Power Throttling
| نشانه | توضیح |
|---|---|
| رسیدن مصرف به سقف مشخص | توان گزارششده نزدیک 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 یکسان میتوانند
عملکرد پایدار متفاوتی داشته باشند.
| عامل | اثر |
|---|---|
| توان آداپتور | تعیین بودجه کل انرژی دستگاه |
| سیستم خنککننده | تعیین توان قابل حفظ در مدت طولانی |
| مصرف CPU | کاهش یا افزایش توان قابل اختصاص به GPU |
| BIOS سازنده | تعیین سقفها و رفتار Boost |
| حالت عملکرد دستگاه | تغییر توان میان Silent، Balanced و Performance |
| کار با باتری | کاهش شدید توان و فرکانس در بسیاری از مدلها |
رفتار توان در لپتاپهای ورکاستیشن
لپتاپهای ورکاستیشن قدیمی مجهز به Quadro K،
M یا P معمولاً با توانهای محافظهکارانه طراحی
شدهاند تا پایداری در رندر، CAD و محاسبات طولانی
حفظ شود.
در این دستگاهها، گردوغبار، خشکشدن خمیر حرارتی،
فرسودگی فن و استفاده از آداپتور نامناسب میتواند
باعث کاهش توان قابلدستیابی GPU شود.
هنگام خرید دستگاه استوک، فقط نام Quadro کافی نیست
و باید توان پایدار، دما، فرکانس و وضعیت آداپتور
زیر بار بررسی شود.
Thermal Throttling چیست؟
Thermal Throttling زمانی رخ میدهد که دمای GPU
به محدوده تعیینشده توسط سازنده نزدیک شود و
پردازنده گرافیکی برای جلوگیری از افزایش بیشتر
دما، فرکانس یا ولتاژ خود را کاهش دهد.
این فرایند یک مکانیزم حفاظتی طبیعی است و از
آسیبدیدن تراشه، حافظه، مدار تغذیه و سایر اجزای
سیستم جلوگیری میکند.
اگر سیستم خنککننده نتواند گرمای تولیدشده را
بهسرعت دفع کند، GPU ممکن است بهصورت مداوم میان
فرکانسهای بالاتر و پایینتر جابهجا شود.
Thermal Throttling چگونه اتفاق میافتد؟
Heavy GPU Workload
│
▼
Higher Power Consumption
│
▼
More Heat Generated
│
▼
Temperature Limit Reached
│
▼
Clock and Voltage Reduced
│
▼
Temperature Stabilized
پس از کاهش فرکانس و ولتاژ، توان مصرفی و گرمای
تولیدشده کمتر میشود. اگر دما دوباره کاهش پیدا
کند، سیستم Boost میتواند فرکانس را افزایش دهد.
Thermal Limit چیست؟
Thermal Limit دمایی است که کنترلکننده GPU پس از
رسیدن به آن، رفتار فرکانس و ولتاژ را برای کنترل
گرما تغییر میدهد.
این مقدار میان معماریها، مدلها، BIOSها و
محصولات دسکتاپ یا لپتاپی متفاوت است.
Thermal Limit را نباید با دمای خرابی تراشه یکی
دانست. محدودیت حرارتی معمولاً پیش از رسیدن به
شرایط خطرناک فعال میشود.
نشانههای Thermal Throttling
| نشانه | توضیح |
|---|---|
| دمای بالا | دما نزدیک محدودیت تعیینشده باقی میماند |
| افت فرکانس پس از چند دقیقه | خنککننده در شروع سرد است اما بهتدریج اشباع میشود |
| نوسان Clock | GPU میان Boost و فرکانس پایینتر جابهجا میشود |
| افزایش سرعت فن | سیستم برای کنترل دما تلاش میکند |
| افت FPS یا سرعت رندر | کاهش فرکانس باعث افت عملکرد پایدار میشود |
| ثبت Thermal Limit | ابزار مانیتورینگ دلیل محدودیت را حرارتی نشان میدهد |
دلایل رایج Thermal Throttling
| علت | اثر | راهکار احتمالی |
|---|---|---|
| گردوغبار | کاهش عبور هوا از هیتسینک | تمیزکردن سیستم خنککننده |
| خمیر حرارتی خشکشده | انتقال ضعیف گرما از تراشه | تعویض اصولی خمیر حرارتی |
| فرسودگی 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 در دمای پایینتر و بدون رسیدن به محدودیت
حرارتی کار کند، فرکانس پایدار در بازی، رندر و
پردازشهای طولانی بهتر حفظ میشود.
| خنککننده ضعیف | خنککننده مناسب |
|---|---|
| افزایش سریع دما | کنترل بهتر دمای تراشه |
| افت زودهنگام 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 چگونه کار میکند؟
Total Laptop Power Budget
│
▼
Workload Analysis
│
┌─────┴─────┐
│ │
CPU-Heavy GPU-Heavy
│ │
▼ ▼
More CPU More GPU
Power Power
│ │
└─────┬─────┘
▼
Dynamic Performance Balance
Firmware، درایور و کنترلکننده توان دستگاه بهطور
پیوسته بار CPU، بار GPU، دما و توان کل سیستم را
بررسی میکنند.
انتقال توان تنها زمانی انجام میشود که آداپتور،
مدار تغذیه و سیستم خنککننده ظرفیت لازم را داشته
باشند.
چه عواملی بر Dynamic Boost اثر دارند؟
| عامل | اثر |
|---|---|
| نوع بار کاری | تعیین میکند CPU یا GPU به توان بیشتری نیاز دارد |
| دمای CPU و GPU | قطعه گرمتر ممکن است توان کمتری دریافت کند |
| توان آداپتور | سقف بودجه انرژی کل سیستم را تعیین میکند |
| طراحی خنککننده | توان قابل حفظ در بار طولانی را محدود میکند |
| حالت عملکرد لپتاپ | پروفایل Silent، Balanced یا Performance رفتار توان را تغییر میدهد |
| BIOS و Firmware | محدوده جابهجایی توان و اولویتها را تعیین میکند |
مزایا و محدودیتهای Dynamic Boost
| مزیت | محدودیت |
|---|---|
| استفاده بهتر از بودجه توان لپتاپ | وابستگی شدید به طراحی سازنده |
| افزایش عملکرد در بارهای GPU-محور | توان اضافه همیشه دائمی نیست |
| تنظیم خودکار بدون دخالت کاربر | دما میتواند انتقال توان را محدود کند |
| تعادل بهتر میان CPU و GPU | در بار همزمان سنگین، هر دو قطعه محدود میشوند |
| بهبود بهرهوری دستگاه | رفتار دقیق در هر لپتاپ متفاوت است |
Performance State یا P-State چیست؟
P-State حالت عملکرد و مصرف انرژی GPU را مشخص
میکند. هر حالت میتواند محدوده متفاوتی از فرکانس،
ولتاژ و فعالیت واحدهای داخلی داشته باشد.
GPU هنگام تغییر بار کاری میان این حالتها جابهجا
میشود تا تعادل مناسبی میان عملکرد و مصرف انرژی
ایجاد کند.
نامگذاری و تعداد P-Stateها میان سازندگان و نسلهای
مختلف یکسان نیست.
نمونه حالتهای عملکرد 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 | قطع یا کاهش شدید جریان برق |
| کاهش توان پویا | زیاد | زیاد |
| کاهش نشت جریان | محدود | بیشتر |
| سرعت بازگشت | سریع | معمولاً کندتر |
| کاربرد | توقفهای کوتاه | بیکاری طولانیتر |
مصرف انرژی GPU در حالت Idle
در حالت Idle، فرکانس هسته و حافظه کاهش پیدا میکند
و بسیاری از واحدهای پردازشی وارد حالت Clock-Gated
یا Power-Gated میشوند.
بااینحال، GPU ممکن است همچنان برای مدیریت خروجی
تصویر، مانیتورهای متصل، شتابدهی رابط کاربری و
برنامههای پسزمینه فعال باقی بماند.
تعداد مانیتورها، وضوح، نرخ تازهسازی، HDR و نوع
اتصال میتوانند روی فرکانس حافظه و مصرف Idle اثر
بگذارند.
| عامل | اثر احتمالی |
|---|---|
| چند مانیتور | افزایش فعالیت Display Engine و حافظه |
| نرخ تازهسازی بالا | جلوگیری از کاهش کامل Memory Clock |
| وضوح بالا | افزایش پهنای باند خروجی تصویر |
| برنامههای شتابیافته | فعال نگهداشتن بخشی از GPU |
| ضبط صفحه یا Overlay | فعالیت موتور رسانه یا Shader |
| تنظیمات درایور | جلوگیری از ورود به حالت کممصرف |
نقش گرافیک ترکیبی در کاهش مصرف لپتاپ
بسیاری از لپتاپها از گرافیک مجتمع برای کارهای
سبک و از GPU مجزا برای بارهای سنگین استفاده میکنند.
در صورت عدم نیاز، GPU مجزا میتواند وارد حالت
کممصرف یا تقریباً خاموش شود تا عمر باتری افزایش
پیدا کند.
برنامهای که بهاشتباه GPU مجزا را فعال نگه دارد
میتواند مصرف باتری و دمای Idle را افزایش دهد.
Overclocking یا اورکلاک GPU چیست؟
Overclocking به افزایش فرکانس هسته، حافظه یا هر دو
نسبت به تنظیمات پیشفرض سازنده گفته میشود.
هدف اورکلاک افزایش عملکرد در بازی، رندر، پردازش
محاسباتی یا سایر بارهای کاری است؛ اما نتیجه نهایی
به ظرفیت خنککننده، Power Limit، ولتاژ و کیفیت
تراشه بستگی دارد.
افزایش عدد فرکانس بهتنهایی کافی نیست. تنظیم جدید
باید در بارهای طولانی پایدار باشد و باعث خطای
محاسباتی، Artifact، Crash یا افزایش بیشازحد دما
نشود.
تفاوت اورکلاک هسته و حافظه
| نوع اورکلاک | بخش تحتتأثیر | کاربردهای حساس | خطاهای احتمالی |
|---|---|---|---|
| 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
| مزیت | نتیجه |
|---|---|
| توان مصرفی کمتر | کاهش فشار بر منبع تغذیه و آداپتور |
| دمای پایینتر | کاهش احتمال Thermal Throttling |
| صدای فن کمتر | عملکرد آرامتر سیستم |
| Sustained Clock بهتر | حفظ فرکانس پایدار در سقف توان مشخص |
| بهرهوری بالاتر | عملکرد بیشتر بهازای هر وات |
| فشار کمتر بر VRM | گرمای کمتر مدار تغذیه |
محدودیتها و خطرهای Undervolting
کاهش بیشازحد ولتاژ میتواند باعث ناپایداری،
بستهشدن برنامه، ریست درایور یا خطای محاسباتی شود.
هر تراشه کیفیت متفاوتی دارد و تنظیم پایدار یک GPU
الزاماً روی نمونه دیگر قابل استفاده نیست.
| مشکل | علت | راهکار |
|---|---|---|
| Crash | ولتاژ ناکافی برای فرکانس انتخابشده | افزایش جزئی ولتاژ یا کاهش Clock |
| ریست درایور | ناپایداری لحظهای | اصلاح نقطه Voltage/Frequency |
| افت عملکرد | انتخاب فرکانس هدف بسیار پایین | تنظیم منحنی متعادلتر |
| خطای Compute | ناپایداری بدون نشانه تصویری | تست صحت محاسبات و رندر |
| بازگشت تنظیم پس از Restart | محدودیت نرمافزار یا درایور | ذخیره پروفایل و بررسی سازگاری |
تفاوت Undervolting و کاهش Power Limit
| معیار | Undervolting | کاهش Power Limit |
|---|---|---|
| روش | کاهش ولتاژ در فرکانس مشخص | کاهش سقف توان مجاز |
| کنترل فرکانس | امکان حفظ Clock هدف | کنترل خودکار توسط Boost |
| پیچیدگی | نیازمند تنظیم و تست دقیقتر | سادهتر |
| افت عملکرد | در تنظیم مناسب ممکن است بسیار کم باشد | به میزان کاهش سقف توان وابسته است |
| خطر ناپایداری | در ولتاژ بسیار پایین وجود دارد | معمولاً کمتر |
بهرهوری انرژی GPU چیست؟
بهرهوری انرژی نشان میدهد GPU در برابر هر وات
مصرف انرژی چه مقدار عملکرد ارائه میکند.
یک GPU ممکن است سریعتر باشد، اما برای دستیابی به
آن عملکرد توان بسیار بیشتری مصرف کند. در مقابل،
مدلی دیگر ممکن است با مصرف کمتر، بخش بزرگی از همان
عملکرد را ارائه دهد.
این معیار برای لپتاپ، ورکاستیشن، سرور، هوش
مصنوعی و سیستمهای کمصدا اهمیت زیادی دارد.
چه عواملی عملکرد بهازای وات را تعیین میکنند؟
| عامل | اثر |
|---|---|
| معماری | تعیین مقدار کار انجامشده در هر چرخه |
| فرآیند ساخت | اثر بر ولتاژ، نشت جریان و چگالی ترانزیستور |
| فرکانس کاری | فرکانسهای بسیار بالا معمولاً بهرهوری کمتری دارند |
| ولتاژ | افزایش ولتاژ توان مصرفی را بهشدت بالا میبرد |
| نوع بار کاری | استفاده متفاوت از واحدهای داخلی |
| خنککننده | جلوگیری از اتلاف عملکرد در اثر دما |
| سیستم حافظه | جلوگیری از انتظار بیهوده هستهها برای داده |
| درایور و نرمافزار | استفاده بهتر یا ضعیفتر از سختافزار |
نقطه بهینه بهرهوری GPU
بیشتر GPUها در حداکثر فرکانس و ولتاژ خود بهترین
عملکرد بهازای وات را ندارند.
معمولاً بخشی از عملکرد نهایی با افزایش شدید توان
به دست میآید. کاهش محدود Clock، Voltage یا Power
Limit ممکن است مصرف و دما را بهطور محسوسی کاهش
دهد، درحالیکه افت عملکرد کم باقی بماند.
Power Consumption
▲
│ Maximum Clock
│ /
│ /
│ /
│ Sweet Spot
│ /
│ /
│ /
└────────────────────────► Performance
Near Maximum Performance:
Small Performance Gain
Large Power Increase
مدیریت توان در Quadro و کارتهای حرفهای
کارتهای حرفهای مانند NVIDIA Quadro، سری RTX
Professional، AMD Radeon Pro و Intel Arc Pro برای
بارهای کاری طولانی، پایداری درایور و عملکرد یکنواخت
طراحی میشوند.
در این محصولات، بیشترین Boost لحظهای همیشه هدف
اصلی نیست. سازنده ممکن است فرکانس، ولتاژ و Power
Limit را محافظهکارانهتر تنظیم کند تا کارت در
رندرهای چندساعته، محاسبات مهندسی و پروژههای حساس
رفتار قابلپیشبینیتری داشته باشد.
ظرفیت VRAM، پشتیبانی ECC در مدلهای خاص، طراحی
خنککننده و گواهی نرمافزارهای حرفهای نیز میتوانند
در انتخاب تنظیمات توان نقش داشته باشند.
مقایسه رفتار توان کارت حرفهای و گیمینگ
| معیار | کارت حرفهای | کارت گیمینگ |
|---|---|---|
| اولویت اصلی | پایداری، سازگاری و عملکرد یکنواخت | بیشترین عملکرد در بازی و بار لحظهای |
| رفتار Boost | معمولاً کنترلشدهتر | معمولاً تهاجمیتر |
| بار کاری هدف | CAD، رندر، شبیهسازی و محاسبات طولانی | بازی، تولید محتوا و استفاده عمومی |
| خنککننده | متناسب با ورکاستیشن و کار مداوم | متنوع و گاهی متمرکز بر Boost بالا |
| محدودیت توان | ممکن است محافظهکارانهتر باشد | در مدلهای ردهبالا معمولاً بالاتر است |
| تنظیم دستی | ممکن است محدودتر باشد | معمولاً انعطاف بیشتری دارد |
چرا بسیاری از کارتهای حرفهای از خنککننده Blower استفاده میکنند؟
خنککننده Blower هوای گرم را از داخل کارت عبور
داده و مستقیماً از پشت کیس خارج میکند.
این طراحی در ورکاستیشنهای چندکارت، کیسهای فشرده
و سیستمهایی با جریان هوای کنترلشده مفید است؛ زیرا
گرمای کارت کمتر داخل کیس پخش میشود.
در مقابل، Blower ممکن است صدای بیشتری تولید کند و
در یک کارت منفرد، دمای بالاتری نسبت به خنککننده
Open-Air داشته باشد.
| مزیت | محدودیت |
|---|---|
| خروج مستقیم گرما از کیس | صدای بیشتر فن |
| مناسب چند کارت نزدیک به هم | سطح هیتسینک محدودتر |
| رفتار حرارتی قابلپیشبینی | دمای بالاتر در بعضی مدلها |
| مناسب کیسهای ورکاستیشن | Boost کمتر از طراحیهای بزرگ Open-Air |
رفتار توان در رندر و محاسبات طولانی
در بارهای کوتاه، GPU ممکن است برای چند ثانیه یا
چند دقیقه Boost بالایی حفظ کند؛ اما در پردازشهای
طولانی، تعادل حرارتی سیستم اهمیت بیشتری پیدا میکند.
پس از گرمشدن کامل هیتسینک، VRM، حافظه و هوای داخل
کیس، فرکانس ممکن است در مقدار پایینتری تثبیت شود.
برای رندر، شبیهسازی و هوش مصنوعی، فرکانس پایدار
یکساعته معمولاً از نتیجه یک بنچمارک چنددقیقهای
مهمتر است.
مرحله ۱
شروع بار کاری
GPU سرد است و فضای حرارتی زیادی دارد.
مرحله ۲
Boost اولیه
فرکانس به بالاترین مقدار مجاز نزدیک میشود.
مرحله ۳
اشباع حرارتی
دمای GPU، VRAM و خنککننده افزایش پیدا میکند.
مرحله ۴
فرکانس پایدار
Clock در نقطه متعادل توان و دما تثبیت میشود.
ECC چه اثری بر توان و عملکرد دارد؟
برخی کارتها و شتابدهندههای حرفهای از حافظه ECC
یا سازوکارهای تشخیص و اصلاح خطا پشتیبانی میکنند.
این قابلیت برای محاسبات علمی، مدلسازی طولانی و
پردازشهای حساس اهمیت دارد؛ زیرا احتمال خطای خاموش
در داده را کاهش میدهد.
فعالبودن ECC ممکن است مقداری از ظرفیت حافظه،
پهنای باند یا توان پردازشی را مصرف کند، اما در
پروژههای حساس، صحت داده معمولاً مهمتر از این
سربار محدود است.
رفتار توان در GPUهای قدیمی و لپتاپهای استوک
GPUهای قدیمی معمولاً با فرآیند ساخت بزرگتر، Cache
محدودتر و معماری کمبازدهتری نسبت به نسلهای جدید
تولید شدهاند.
بااینحال، بسیاری از آنها به دلیل Power Limit
پایینتر، همچنان برای CAD سبک، کارهای اداری،
آموزش و پروژههای نیمهحرفهای قابل استفادهاند.
وضعیت خنککننده، آداپتور و باتری در لپتاپ استوک
میتواند بیشتر از تفاوت جزئی مشخصات اسمی بر عملکرد
واقعی اثر بگذارد.
| مدل یا خانواده | نسل | رفتار رایج | نکته خرید |
|---|---|---|---|
| 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 | مصرف نسبتاً بالا در بار کامل | نیازمند منبع تغذیه و تهویه مناسب |
مشکلات رایج توان در لپتاپهای قدیمی
| مشکل | اثر | روش بررسی |
|---|---|---|
| آداپتور ضعیف | محدودشدن Power Limit | بررسی وات و شناسه آداپتور |
| باتری خراب | ناتوانی در جبران پیک مصرف | تست دستگاه با باتری سالم |
| گردوغبار | Thermal Throttling | بررسی دما و جریان هوا |
| خمیر حرارتی فرسوده | افت Sustained Clock | مقایسه دمای شروع و دمای پایدار |
| BIOS قدیمی | مدیریت نامناسب توان یا فن | بررسی نسخه و مستندات سازنده |
| فن فرسوده | کاهش ظرفیت خنککننده | بررسی صدا و سرعت فن |
| Thermal Pad نامناسب | افزایش دمای VRAM یا VRM | بررسی تعمیرات قبلی دستگاه |
هنگام خرید GPU یا لپتاپ، توان مصرفی را چگونه بررسی کنیم؟
نام مدل GPU بهتنهایی برای پیشبینی عملکرد واقعی
کافی نیست. توان قابلاختصاص، سیستم خنککننده،
ظرفیت آداپتور و فرکانس پایدار میتوانند عملکرد دو
دستگاه مجهز به GPU مشابه را کاملاً متفاوت کنند.
این موضوع در لپتاپهای گیمینگ، ورکاستیشنهای
استوک و مدلهای باریک اهمیت بیشتری دارد؛ زیرا
سازنده میتواند همان تراشه را با Power Limit
متفاوت عرضه کند.
هنگام خرید باید عملکرد پایدار زیر بار بررسی شود،
نه فقط عدد Boost Clock، تعداد هسته یا نتیجه یک
آزمایش بسیار کوتاه.
چکلیست توان 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 در کاربردهای مختلف
| کاربرد | نوع بار | عامل مهم | اهمیت توان پایدار |
|---|---|---|---|
| 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
| باور اشتباه | واقعیت |
|---|---|
| فرکانس بیشتر همیشه یعنی 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، فایلهای ویدئویی را پردازش کنند.
| بخش | عنوان | موضوع اصلی | سطح مطالعه |
|---|---|---|---|
| ۱ | موتور ویدئویی 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 فرستاده شود تا به یک جریان ویدئویی
فشرده تبدیل شود.
Compressed Video File
│
▼
Decode Engine
│
▼
Decoded Frames in VRAM
│
┌────┴────┐
│ │
▼ ▼
Video Effects Display Engine
and Shaders
│
▼
Processed Frames
│
▼
Encode Engine
│
▼
Compressed Output Video
اجزای اصلی زیرسیستم ویدئویی 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 است.
4K HEVC Input
│
▼
HEVC Decode
│
▼
Raw Frames
│
▼
Resize / Filter / Color Conversion
│
▼
H.264 Encode
│
▼
1080p H.264 Output
تفاوت پردازش سختافزاری و نرمافزاری ویدئو
در پردازش نرمافزاری، 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
خروجی را فشرده میکند.
| وظیفه | واحد مناسبتر | توضیح |
|---|---|---|
| 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 |
|---|---|---|
| وظیفه | فشردهسازی و بازسازی تصویر یا صدا | نگهداری چند جریان رسانهای در یک فایل |
| نمونه | H.264، HEVC، AV1 و VP9 | MP4، MKV، MOV و WebM |
| اثر بر حجم فایل | بسیار زیاد | معمولاً محدود |
| اثر بر کیفیت | مستقیم | غیرمستقیم |
| ارتباط با GPU | موتور ویدئویی باید Codec را پشتیبانی کند | معمولاً توسط نرمافزار مدیریت میشود |
| پسوند فایل | الزاماً از روی پسوند مشخص نمیشود | معمولاً پسوند فایل را تعیین میکند |
Container چه اطلاعاتی را نگهداری میکند؟
یک Container میتواند علاوه بر جریان تصویر،
چندین Track صوتی، زیرنویس، Chapter، تصویر بندانگشتی
و Metadata را نیز نگهداری کند.
Video Container
├── Video Stream
│ └── H.264 / HEVC / AV1 / VP9
│
├── Audio Stream
│ └── AAC / Opus / PCM / AC-3
│
├── Subtitle Track
│
├── Chapters
│
└── 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 | 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 تفاوت میان فریمهای
متوالی را نیز بررسی میکند و برای کاهش حجم از
ارتباط زمانی میان آنها استفاده میکند.
| معیار | Intraframe | Interframe |
|---|---|---|
| وابستگی فریمها | کمتر | بیشتر |
| جستوجو در Timeline | معمولاً آسانتر | ممکن است سنگینتر باشد |
| حجم فایل | معمولاً بیشتر | معمولاً کمتر |
| کاربرد | تدوین و تولید حرفهای | انتشار، استریم و آرشیو فشرده |
| فشار Decode | معمولاً قابلپیشبینیتر | وابسته به ساختار GOP |
پشتیبانی یک Codec به چه عواملی وابسته است؟
مشاهده نام یک Codec در مشخصات GPU بهتنهایی برای
اطمینان از پشتیبانی کامل کافی نیست.
ممکن است موتور ویدئویی فقط Decode، فقط Encode یا
مجموعه محدودی از Profileها، Bit Depthها و وضوحها
را پشتیبانی کند.
| مورد | پرسش مهم |
|---|---|
| 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 در چه کاربردهایی استفاده میشود؟
| کاربرد | دلیل استفاده | اهمیت شتابدهی سختافزاری |
|---|---|---|
| استریم زنده | سازگاری گسترده با سرویسها و دستگاهها | بسیار زیاد |
| ضبط صفحه | حجم مناسب و پخش آسان | زیاد |
| خروجی تدوین | مناسب انتشار عمومی | بسیار زیاد |
| دوربینهای نظارتی | کاهش حجم ذخیرهسازی | زیاد |
| تماس تصویری | تأخیر کم و پشتیبانی گسترده | زیاد |
| ویدئوی آموزشی | قابل پخش روی دستگاههای قدیمیتر | متوسط |
| شبکههای اجتماعی | سازگاری مناسب با پلتفرمهای مختلف | زیاد |
Hardware Decode در H.264
هنگام پخش فایل H.264، موتور Decode میتواند بخش
اصلی رمزگشایی جریان ویدئویی را بهجای CPU انجام
دهد.
این کار مصرف پردازنده مرکزی، دمای سیستم و مصرف
باتری را کاهش میدهد و امکان پخش روانتر فایلهای
با وضوح یا نرخ فریم بالاتر را فراهم میکند.
اگر Decode سختافزاری در دسترس نباشد، نرمافزار
ممکن است از CPU یا Shaderهای GPU استفاده کند.
H.264 Compressed Stream
│
▼
Hardware Decode Engine
│
▼
Decoded Video Frames
│
┌────┴────┐
│ │
▼ ▼
Display Video Editing
Hardware Encode در H.264
موتور Encode میتواند فریمهای خام یا پردازششده
را به جریان H.264 تبدیل کند.
این قابلیت در ضبط بازی، استریم زنده، Export سریع،
تبدیل ویدئو و سیستمهای نظارتی کاربرد دارد.
Encode سختافزاری معمولاً بسیار سریعتر و
کممصرفتر از Encode نرمافزاری روی CPU است؛
اما کیفیت نهایی در Bitrate یکسان به نسل Encoder،
تنظیمات نرمافزار و نوع محتوا بستگی دارد.
Profileهای مهم H.264
Profile مجموعهای از قابلیتهای Codec را مشخص
میکند. دستگاه یا موتور ویدئویی ممکن است فقط
بعضی 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 پایینتر | Level بالاتر |
|---|---|
| وضوح پایینتر | وضوح بالاتر |
| نرخ فریم محدودتر | نرخ فریم بیشتر |
| Bitrate پایینتر | Bitrate بیشتر |
| نیاز پردازشی کمتر | نیاز پردازشی و حافظه بیشتر |
عمق رنگ و Chroma در H.264
رایجترین نوع H.264 برای انتشار عمومی و پخش
سختافزاری، ویدئوی ۸ بیت با Chroma Subsampling
برابر 4:2:0 است.
حالتهای ۱۰ بیت، 4:2:2 و 4:4:4 نیز در استاندارد
وجود دارند، اما پشتیبانی سختافزاری آنها بسیار
محدودتر است.
| حالت | کاربرد | سازگاری سختافزاری عمومی |
|---|---|---|
| 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 B B P B B P B B I
I-Frame:
Independent Image
P-Frame:
Predicted from Previous Frames
B-Frame:
Predicted from Previous and Future Frames
تفاوت I-Frame، P-Frame و B-Frame
| نوع فریم | ساختار | حجم | کاربرد |
|---|---|---|---|
| I-Frame | مستقل از سایر فریمها | بیشتر | شروع GOP و جابهجایی سریع |
| P-Frame | وابسته به فریمهای قبلی | کمتر | کاهش حجم جریان |
| B-Frame | وابسته به فریمهای قبلی و بعدی | معمولاً کمتر | افزایش راندمان فشردهسازی |
تأخیر Encode در H.264
تنظیمات فشردهسازی میتوانند تأخیر Encode را
افزایش یا کاهش دهند.
استفاده از B-Frameهای بیشتر، Lookahead و تحلیل
پیچیدهتر معمولاً کیفیت یا راندمان فشردهسازی را
بهتر میکند، اما تأخیر بیشتری ایجاد میکند.
برای استریم زنده، تماس تصویری و Remote Desktop
معمولاً تنظیمات Low-Latency اهمیت بیشتری دارند.
| معیار | Low-Latency | High-Quality |
|---|---|---|
| تأخیر | کمتر | بیشتر |
| تحلیل فریم | محدودتر | گستردهتر |
| B-Frame | کمتر یا غیرفعال | بیشتر |
| کاربرد | استریم زنده و تماس تصویری | Export و آرشیو |
پشتیبانی H.264 در GPUهای قدیمی
H.264 به دلیل قدمت و گسترش زیاد، در بسیاری از
GPUهای قدیمی نیز دارای شتابدهی سختافزاری است.
بااینحال، نسلهای قدیمیتر ممکن است در وضوح بالا،
نرخ فریم زیاد، تعداد جریان همزمان یا بعضی
Profileها محدود باشند.
| خانواده | 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 | 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 Video
│
▼
Hardware Decode
│
▼
Video Frames
│
┌───┴────┐
│ │
▼ ▼
Display Editing
│
▼
Hardware Encode
│
▼
HEVC Output
قابلیتهای مهم HEVC
| قابلیت | اهمیت | کاربرد |
|---|---|---|
| فشردهسازی بهتر | کاهش حجم فایل | آرشیو و استریم |
| پشتیبانی بهتر از 4K و 8K | وضوحهای بسیار بالا | فیلم و تولید محتوا |
| HDR | نمایش دامنه دینامیکی بیشتر | تلویزیون و مانیتورهای HDR |
| 10-bit و 12-bit | افزایش دقت رنگ | تدوین حرفهای |
| Chromaهای مختلف | انعطاف بیشتر در تولید محتوا | Broadcast و Cinema |
| Bitrate پایینتر | صرفهجویی در فضای ذخیرهسازی | سرویسهای آنلاین |
Profileهای مهم HEVC
مانند H.264، استاندارد HEVC نیز دارای Profileهای
مختلفی است و همه GPUها الزاماً از تمام آنها
پشتیبانی نمیکنند.
| 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 پایینتر | Level بالاتر |
|---|---|---|
| وضوح تصویر | محدودتر | بالاتر |
| نرخ فریم | کمتر | بیشتر |
| Bitrate | پایینتر | بالاتر |
| نیاز به حافظه | کمتر | بیشتر |
| فشار پردازشی | سبکتر | سنگینتر |
تفاوت Main Tier و High Tier در HEVC
HEVC علاوه بر Profile و Level، از مفهوم Tier نیز
استفاده میکند.
Tier بیشتر به محدوده Bitrate مجاز مربوط است و
مشخص میکند جریان ویدئویی برای کاربرد عمومی یا
کاربردهای حرفهای با Bitrate بالاتر طراحی شده است.
| معیار | Main Tier | High Tier |
|---|---|---|
| Bitrate مجاز | پایینتر | بالاتر |
| کاربرد | پخش و انتشار عمومی | Broadcast و تولید حرفهای |
| نیاز ذخیرهسازی | کمتر | بیشتر |
| سازگاری سختافزاری | گستردهتر | محدودتر و وابسته به دستگاه |
پشتیبانی HEVC از عمق رنگ ۸، ۱۰ و ۱۲ بیت
HEVC میتواند ویدئو را با Bit Depthهای مختلف
ذخیره کند. افزایش عمق رنگ تعداد سطوح قابل نمایش
در هر کانال رنگی را بیشتر میکند.
ویدئوی ۱۰ بیت برای HDR، Color Grading و کاهش
Banding بسیار رایج است؛ اما Decode و Encode
سختافزاری آن به نسل GPU وابسته است.
| عمق رنگ | ویژگی | کاربرد | پشتیبانی سختافزاری عمومی |
|---|---|---|---|
| 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 | میزان اطلاعات رنگ | کاربرد | پشتیبانی عمومی 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
پشتیبانی کنند.
HEVC HDR Video
│
▼
10-bit Hardware Decode
│
▼
HDR Metadata Processing
│
▼
Display Engine
│
▼
HDR-Compatible Connection
│
▼
HDR Monitor or TV
تفاوت پشتیبانی Decode و Encode در HEVC
معمولاً پشتیبانی سختافزاری Decode یک Codec زودتر
و گستردهتر از Encode آن وارد GPUها میشود.
دلیل این موضوع آن است که پخش ویدئو برای کاربران
بیشتری ضروری است، درحالیکه Encode سختافزاری به
مدار پیچیدهتر و قابلیتهای بیشتری نیاز دارد.
| معیار | HEVC Decode | HEVC Encode |
|---|---|---|
| ورود به سختافزار | معمولاً زودتر | معمولاً دیرتر |
| کاربرد | پخش، Preview و Timeline | Export، ضبط و Transcoding |
| نیاز به کیفیت تصمیمگیری | کمتر | بیشتر |
| پشتیبانی Profileهای حرفهای | محدود | محدودتر |
| اهمیت نسل Encoder | متوسط | بسیار زیاد |
اگر GPU از HEVC پشتیبانی نکند چه میشود؟
نرمافزار میتواند پردازش را به CPU یا Shaderهای
عمومی GPU منتقل کند.
این روش ممکن است برای فایلهای سبک قابلقبول باشد،
اما در ویدئوهای 4K، 10-bit، HDR یا نرخ فریم بالا
فشار زیادی بر سیستم وارد میکند.
| بخش | پیامد احتمالی |
|---|---|
| CPU Usage | افزایش شدید |
| مصرف انرژی | بیشتر |
| دما و صدای فن | افزایش |
| پخش ویدئو | احتمال افت فریم |
| Timeline تدوین | Scrubbing و Preview ضعیفتر |
| عمر باتری لپتاپ | کاهش |
پشتیبانی HEVC در نسلهای مختلف NVIDIA
قابلیت HEVC در محصولات NVIDIA به نسل دقیق موتور
NVDEC و NVENC وابسته است، نه فقط نام تجاری GeForce
یا Quadro.
بعضی GPUهای قدیمی ممکن است Decode محدود HEVC
داشته باشند، اما از Main 10، Encode یا وضوحهای
بالاتر پشتیبانی نکنند.
| خانواده | وضعیت عمومی | نکته مهم |
|---|---|---|
| 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
بررسی شود.
| سازنده | موتور مرتبط | موارد قابل بررسی |
|---|---|---|
| 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 | اهمیت شتابدهی سختافزاری |
|---|---|---|
| استریم ویدئوی آنلاین | کاهش مصرف پهنای باند | بسیار زیاد |
| ویدئوی 4K و 8K | فشردهسازی بهتر فایلهای حجیم | بسیار زیاد |
| استریم زنده | کیفیت بهتر در Bitrate محدود | بسیار زیاد |
| تماس تصویری | کیفیت مناسب در اینترنت ضعیفتر | زیاد |
| ضبط ویدئو | کاهش فضای ذخیرهسازی | زیاد |
| آرشیو ویدئو | کاهش حجم مجموعههای بزرگ | متوسط تا زیاد |
| پخش در مرورگر | کاهش حجم داده دریافتی | بسیار زیاد |
مقایسه AV1 با H.264 و HEVC
| معیار | H.264 | HEVC | AV1 |
|---|---|---|---|
| سازگاری | بسیار گسترده | گسترده در دستگاههای جدیدتر | وابستهتر به نسل جدید سختافزار |
| راندمان فشردهسازی | خوب | بهتر | بسیار بالا |
| پیچیدگی Decode | کمتر | بیشتر | زیاد |
| پیچیدگی Encode | متوسط | زیاد | بسیار زیاد |
| مناسب برای | انتشار عمومی و سازگاری بالا | 4K، HDR و آرشیو | استریم مدرن و پهنای باند محدود |
| نیاز به موتور سختافزاری | مفید | بسیار مهم | بسیار مهم |
Hardware Decode در AV1
Decode سختافزاری AV1 به موتور اختصاصی GPU اجازه
میدهد جریان فشرده را بدون فشار سنگین بر CPU به
فریمهای قابل نمایش تبدیل کند.
این قابلیت برای پخش ویدئوی 4K، نرخ فریم بالا،
استریم آنلاین و افزایش عمر باتری لپتاپ اهمیت
زیادی دارد.
در نبود AV1 Hardware Decode، مرورگر یا نرمافزار
ممکن است پردازش را به CPU منتقل کند و باعث افزایش
مصرف، دما و احتمال افت فریم شود.
AV1 Compressed Stream
│
▼
Hardware AV1 Decoder
│
▼
Decoded Frames in VRAM
│
┌────┴────┐
│ │
▼ ▼
Display Video Editing
Hardware Encode در AV1
AV1 Hardware Encode امکان تبدیل فریمهای خام یا
پردازششده به جریان AV1 را با استفاده از موتور
اختصاصی GPU فراهم میکند.
این قابلیت برای استریم، ضبط بازی، تولید محتوای
آنلاین و تبدیل سریع ویدئو بسیار مهم است؛ زیرا
Encode نرمافزاری AV1 میتواند پردازش بسیار سنگینی
داشته باشد.
کیفیت Encoder سختافزاری به نسل موتور، تنظیمات
Bitrate، Preset، تعداد Passها و نوع محتوای تصویر
وابسته است.
Profileهای AV1
Profile در AV1 مشخص میکند جریان ویدئویی از چه
عمق رنگ، Chroma Subsampling و مجموعه قابلیتهایی
استفاده میکند.
| Profile | ویژگی عمومی | کاربرد |
|---|---|---|
| Main Profile | حالت رایج برای محتوای مصرف عمومی | وب، استریم و پخش عمومی |
| High Profile | پشتیبانی از اطلاعات رنگی بیشتر | کاربردهای تصویری پیشرفتهتر |
| Professional Profile | عمق رنگ و Chroma حرفهایتر | تولید، آرشیو و Workflow تخصصی |
عمق رنگ در AV1
AV1 میتواند از عمق رنگهای مختلف برای نمایش
دقیقتر طیف رنگ و کاهش Banding استفاده کند.
ویدئوی ۱۰ بیت برای HDR و محتوای با دامنه رنگی
گسترده اهمیت زیادی دارد، اما پشتیبانی سختافزاری
باید برای مدل دقیق GPU بررسی شود.
| 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 | اطلاعات رنگ | کاربرد | پشتیبانی سختافزاری |
|---|---|---|---|
| 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 را دوباره
روی تصویر اعمال میکند تا ظاهر سینمایی حفظ شود،
بدون آنکه تمام جزئیات تصادفی داخل جریان اصلی
کدگذاری شوند.
Original Grainy Video
│
▼
Grain Analysis
│
┌────┴────┐
│ │
▼ ▼
Cleaner Video Grain Parameters
│ │
└────┬────┘
▼
AV1 Stream
│
▼
Decode and Rebuild Film Grain
AV1 و Screen Content
محتوای صفحهنمایش مانند متن، رابط نرمافزار،
اسلاید، کدنویسی و Remote Desktop با ویدئوی دوربین
تفاوت دارد.
AV1 دارای ابزارهایی برای فشردهسازی بهتر خطوط
تیز، متن و نواحی با رنگ یکنواخت است.
این ویژگی میتواند برای ضبط آموزش، استریم دسکتاپ،
جلسه آنلاین و نرمافزارهای Remote Work مفید باشد.
Encode نرمافزاری AV1
Encode نرمافزاری AV1 میتواند کیفیت و انعطاف
زیادی ارائه دهد، اما در Presetهای باکیفیت بسیار
پردازشبر است.
سرعت خروجی به تعداد هستههای CPU، نوع Encoder،
Resolution، Preset، Bitrate و تنظیمات تحلیل
ویدئو وابسته است.
برای آرشیو نهایی ممکن است 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 باید بررسی شود.
| وضعیت | پیامد |
|---|---|
| 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
| کاربرد | دلیل استفاده | اهمیت Hardware Decode |
|---|---|---|
| YouTube | کاهش پهنای باند | بسیار زیاد |
| مرورگرها | پخش آنلاین | زیاد |
| ویدئوهای 4K | حجم کمتر | بسیار زیاد |
| Smart TV | استریم اینترنتی | زیاد |
| Android TV | کاهش مصرف اینترنت | زیاد |
| آموزش آنلاین | کیفیت بهتر در Bitrate پایین | متوسط |
تفاوت VP9 و H.264
| معیار | H.264 | VP9 |
|---|---|---|
| راندمان فشردهسازی | خوب | بهتر |
| نیاز پردازشی | کمتر | بیشتر |
| حجم فایل | بیشتر | کمتر |
| سازگاری | بسیار گسترده | وابسته به مرورگر و GPU |
| کاربرد اصلی | انتشار عمومی | استریم اینترنتی |
Hardware Decode در VP9
موتور Decode اختصاصی VP9 میتواند ویدئوهای اینترنتی
را بدون فشار زیاد بر CPU پخش کند.
این موضوع مخصوصاً هنگام پخش ویدئوهای 4K، نرخ فریم
بالا یا HDR اهمیت بیشتری پیدا میکند.
VP9 Bitstream
│
▼
VP9 Decode Engine
│
▼
Decoded Frames
│
▼
Display Engine
│
▼
Monitor
Hardware Encode در VP9
پشتیبانی Encode سختافزاری VP9 نسبت به Decode آن
محدودتر است و در همه GPUها وجود ندارد.
هنگام تولید محتوا باید مشخص شود GPU علاوه بر Decode،
امکان Encode VP9 را نیز ارائه میدهد یا خیر.
عمق رنگ در VP9
VP9 علاوه بر ویدئوی ۸ بیت، از عمق رنگ ۱۰ و ۱۲ بیت
نیز پشتیبانی میکند و میتواند برای محتوای HDR نیز
مورد استفاده قرار گیرد.
| Bit Depth | کاربرد | وضعیت عمومی |
|---|---|---|
| 8-bit | پخش عمومی | بسیار رایج |
| 10-bit | HDR | وابسته به GPU |
| 12-bit | کاربردهای تخصصی | محدود |
پشتیبانی VP9 در نسلهای مختلف GPU
پشتیبانی VP9 به نسل موتور ویدئویی GPU وابسته است،
نه صرفاً نام کارت گرافیک.
بسیاری از GPUهای قدیمی Decode سختافزاری VP9
ندارند و هنگام پخش ویدئوهای آنلاین، CPU بار اصلی
پردازش را بر عهده میگیرد.
| نسل 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، هر پیکسل معمولاً از سه کانال قرمز،
سبز و آبی تشکیل میشود.
افزایش تعداد بیت هر کانال باعث افزایش بسیار زیاد
تعداد ترکیبهای رنگی قابل نمایش میشود.
8-bit per Channel
Red = 256 Levels
Green = 256 Levels
Blue = 256 Levels
256 × 256 × 256
≈ 16.7 Million Colors
10-bit per Channel
1024 × 1024 × 1024
≈ 1.07 Billion Colors
12-bit per Channel
4096 × 4096 × 4096
≈ 68.7 Billion Colors
Color Banding چیست؟
Color Banding زمانی دیده میشود که تعداد سطوح
رنگ یا روشنایی برای نمایش یک Gradient نرم کافی
نباشد.
بهجای تغییر تدریجی رنگ، نوارهای مشخص و جدا از
یکدیگر در آسمان، سایه، مه، دود یا پسزمینههای
نرم دیده میشوند.
افزایش Bit Depth میتواند احتمال Banding را کاهش
دهد؛ اما Bitrate پایین، فشردهسازی شدید، تنظیمات
نادرست رنگ و نمایشگر ضعیف نیز میتوانند این مشکل
را ایجاد کنند.
| عامل | اثر |
|---|---|
| Bit Depth پایین | تعداد محدود سطوح رنگ و روشنایی |
| Bitrate پایین | حذف جزئیات Gradient هنگام فشردهسازی |
| Encode چندباره | افزایش خطاهای فشردهسازی |
| Color Space نامناسب | تبدیل نادرست دامنه رنگ |
| نمایشگر ۸ بیت ضعیف | نمایش ناتوان Gradientهای نرم |
چرا ویدئوی HDR معمولاً ۱۰ بیت است؟
HDR دامنه روشنایی و رنگ بیشتری نسبت به SDR دارد.
برای نمایش این دامنه گسترده، تعداد سطوح رنگی بیشتری
لازم است.
استفاده از ۱۰ بیت باعث میشود Gradientهای روشنایی
و رنگ در سایهها و نقاط بسیار روشن نرمتر نمایش
داده شوند.
مسیر کامل HDR شامل Codec، موتور Decode، سیستمعامل،
نرمافزار، Display Engine، اتصال تصویر و نمایشگر
سازگار است.
10-bit HDR Video
│
▼
10-bit Hardware Decode
│
▼
HDR Color Processing
│
▼
10-bit Display Pipeline
│
▼
HDR-Compatible Output
│
▼
HDR Monitor or TV
تفاوت 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 حرفهای،
پنل واقعی ۱۰ بیت قابلاعتمادتر است.
| معیار | True 10-bit | 8-bit + FRC |
|---|---|---|
| تولید رنگ | نمایش مستقیم سطوح بیشتر | شبیهسازی زمانی رنگهای میانی |
| دقت حرفهای | بالاتر | مناسب بسیاری از کاربردهای عمومی |
| قیمت | معمولاً بیشتر | معمولاً اقتصادیتر |
| کاربرد | Mastering، Cinema و Color Critical | تدوین عمومی، طراحی و مصرف محتوا |
پشتیبانی Bit Depth در 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 بالا |
|---|---|
| ضبط | حفظ اطلاعات بیشتر نور و رنگ |
| تدوین | کاهش تخریب تصویر در تغییرات چندباره |
| 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:4:4
Luma: ● ● ● ●
Chroma: ● ● ● ●
Full Color Information
4:2:2
Luma: ● ● ● ●
Chroma: ● ●
Half Horizontal Color Resolution
4:2:0
Luma Row 1: ● ● ● ●
Luma Row 2: ● ● ● ●
Chroma: ● ●
Reduced Horizontal and Vertical Color Resolution
مقایسه 4:2:0، 4:2:2 و 4:4:4
| حالت | اطلاعات رنگ | حجم داده | کاربرد رایج |
|---|---|---|---|
| 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 | حالت مناسبتر |
|---|---|---|
| فیلم طبیعی | کم تا متوسط | 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 و حذف دقیق پسزمینه فراهم میکند.
Green Screen Footage
│
▼
Color Edge Analysis
│
┌────┴────┐
│ │
Low Chroma High Chroma
Detail Detail
│ │
▼ ▼
Rough Edge Cleaner Key
and Artifacts
اثر Chroma Subsampling بر حجم و پهنای باند
هرچه اطلاعات رنگ بیشتری ذخیره شود، حجم فریم خام،
Bitrate و نیاز به پهنای باند حافظه افزایش پیدا
میکند.
در پروژههای 4K، 8K، نرخ فریم بالا و عمق رنگ
۱۰ یا ۱۲ بیت، این اختلاف میتواند بسیار قابلتوجه
باشد.
| حالت | حجم نسبی داده | فشار بر VRAM | فشار بر Storage |
|---|---|---|---|
| 4:2:0 | کمتر | کمتر | کمتر |
| 4:2:2 | متوسط | بیشتر | بیشتر |
| 4:4:4 | زیاد | زیاد | زیاد |
پشتیبانی 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ها منتقل شود.
| مورد | پرسش اصلی |
|---|---|
| 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 پیشنهادی | دلیل |
|---|---|---|
| انتشار وب | 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 اهمیت دارد؟
افزایش وضوح تصویر یا نرخ فریم باعث میشود حجم
دادهای که موتور ویدئویی باید در هر ثانیه پردازش
کند چند برابر شود.
1080p 30fps
│
▼
Base Workload
1080p 60fps
│
▼
≈ 2× Frames
4K 60fps
│
▼
≈ 8× Pixels
+
2× Frames
Much Higher Decode Workload
ارتباط Resolution با پهنای باند حافظه
افزایش وضوح تصویر فقط Decode را سنگینتر نمیکند،
بلکه میزان انتقال داده میان موتور ویدئویی، حافظه،
Display Engine و سایر بخشهای GPU را نیز افزایش
میدهد.
به همین دلیل بعضی GPUها اگرچه از یک Codec
پشتیبانی میکنند، اما در وضوحهای بسیار بالا یا
نرخ فریم زیاد با محدودیت مواجه میشوند.
Pixel Throughput در پردازش ویدئو چیست؟
Pixel Throughput نشان میدهد موتور ویدئویی باید
در هر ثانیه چه تعداد پیکسل را برای Decode، Encode
یا پردازش میانمرحلهای مدیریت کند.
این مقدار از ضرب تعداد پیکسلهای هر فریم در نرخ
فریم به دست میآید و معیار مفیدی برای مقایسه
سنگینی جریانهای مختلف ویدئویی است.
افزایش Resolution یا Frame Rate میتواند حتی بدون
تغییر Codec، فشار پردازشی موتور ویدئویی را چند
برابر کند.
Pixels per Second
Resolution Width
×
Resolution Height
×
Frames per Second
مقایسه حجم پردازش در وضوحها و نرخهای فریم مختلف
| حالت ویدئو | پیکسل هر فریم | نرخ فریم | پیکسل در ثانیه | فشار نسبی |
|---|---|---|---|---|
| 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 ایجاد کند.
Compressed Video File
│
│ Small Bitstream
▼
Decode Engine
│
│ Much Larger Frame Data
▼
Decoded Frames in VRAM
│
▼
Effects / Display / Encode
Frame Buffer و حافظه موردنیاز ویدئو
موتور Decode برای بازسازی فریمها معمولاً چندین
فریم را همزمان در حافظه نگهداری میکند.
تعداد این فریمها به Codec، ساختار GOP، تعداد
Reference Frameها، B-Frameها و تنظیمات نرمافزار
وابسته است.
پروژههای چندلایه، Multicam، Noise Reduction،
Color Grading و افکتهای زمانی میتوانند مصرف
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های همزمان را محدود کند.
در بعضی محصولات حرفهای، سرور یا دیتاسنتر،
محدودیتهای نرمافزاری متفاوتی نسبت به کارتهای
مصرفکننده اعمال میشود.
| عامل | نقش |
|---|---|
| تعداد موتورهای فیزیکی | ظرفیت پردازش موازی سختافزار |
| Codec | پیچیدگی متفاوت H.264، HEVC و AV1 |
| Resolution | مصرف بیشتر ظرفیت در وضوح بالاتر |
| Frame Rate | افزایش Pixel Throughput |
| Bit Depth و Chroma | افزایش حجم داده هر فریم |
| درایور | امکان اعمال محدودیت نرمافزاری |
| نرمافزار | نحوه مدیریت و تقسیم Sessionها |
| نوع کارت | تفاوت میان مصرفکننده، حرفهای و سرور |
Decode و Encode همزمان
در Transcoding، تدوین و استریم ممکن است موتور
Decode و Encode بهصورت همزمان فعال باشند.
موتور Decode فایل ورودی را به فریم تبدیل میکند،
Shaderها یا واحدهای پردازشی افکت را اعمال میکنند
و موتور Encode خروجی را فشرده میکند.
Compressed Input
│
▼
Decode Engine
│
▼
Frames in VRAM
│
▼
Effects / Resize / Color
│
▼
Encode Engine
│
▼
Compressed Output
اگر ورودی و خروجی از Codecهای سنگین، وضوح بالا یا
چند Stream تشکیل شده باشند، ظرفیت هر دو موتور و
حافظه GPU اهمیت پیدا میکند.
Real-Time Processing در ویدئو چیست؟
پردازش Real-Time یعنی سیستم بتواند هر فریم را پیش
از رسیدن زمان نمایش یا ارسال فریم بعدی آماده کند.
برای ویدئوی 60fps، هر فریم باید تقریباً در بازه
کوتاهتری نسبت به ویدئوی 30fps پردازش شود.
اگر موتور یا نرمافزار نتواند به سرعت موردنیاز
برسد، افت فریم، افزایش تأخیر یا توقف Timeline
رخ میدهد.
| کاربرد | نیاز اصلی | پیامد کمبود توان |
|---|---|---|
| پخش ویدئو | 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 و تنظیمات انتخابشده فشرده شود.
Rendered or Processed Frames
│
▼
Frames in VRAM
│
▼
NVENC
│
▼
Rate Control and Compression
│
▼
H.264 / HEVC / AV1 Bitstream
│
▼
File, Recording or Live Stream
کاربردهای 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 |
|---|---|---|
| نوع واحد | موتور ثابت و تخصصی | واحد محاسباتی قابل برنامهریزی |
| وظیفه اصلی | Encode ویدئو | افکت، رندر و Compute |
| مصرف انرژی | برای Encode معمولاً کمتر | وابسته به بار محاسباتی |
| انعطاف | محدود به Codec و قابلیتهای موتور | بسیار بیشتر |
| اجرای افکت | معمولاً انجام نمیدهد | انجام میدهد |
| فعالیت همزمان | میتواند همزمان با CUDA Coreها کار کند | افکتها را پیش از Encode پردازش میکند |
Codecهای قابل استفاده با NVENC
قابلیت دقیق NVENC به نسل معماری و تراشه بستگی دارد.
همه GPUهای NVIDIA مجموعه Codecها و Profileهای
یکسانی ندارند.
| 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
نیست.
| ویژگی | نسلهای قدیمیتر | نسلهای جدیدتر |
|---|---|---|
| کیفیت در Bitrate محدود | ضعیفتر | بهبودیافته |
| Codecها | بیشتر متمرکز بر H.264 | HEVC و AV1 در نسلهای مناسب |
| Bit Depth | گزینههای محدودتر | پشتیبانی گستردهتر در برخی Codecها |
| B-Frame | محدودیت بیشتر | قابلیتهای پیشرفتهتر |
| Lookahead | محدودتر یا وابسته به نرمافزار | گزینههای پیشرفتهتر |
| کیفیت Preset | گزینههای سادهتر | کنترل بهتر سرعت و کیفیت |
چه عواملی کیفیت خروجی NVENC را تعیین میکنند؟
کیفیت خروجی فقط به نام NVENC وابسته نیست. Codec،
Bitrate، Resolution، Preset، Rate Control،
B-Frame، Lookahead و نوع محتوای تصویر نیز نقش
مهمی دارند.
| عامل | اثر |
|---|---|
| نسل 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 |
|---|---|---|
| تأخیر | کمتر | بیشتر |
| Lookahead | محدود یا غیرفعال | قابل استفاده |
| B-Frame | کمتر | بیشتر |
| راندمان فشردهسازی | پایینتر | بهتر |
| کاربرد | استریم، Remote و تماس زنده | Export و آرشیو |
آیا NVENC هیچ فشاری بر GPU وارد نمیکند؟
NVENC بخش اصلی Encode را روی موتور اختصاصی انجام
میدهد، اما کل Workflow الزاماً بدون استفاده از
سایر بخشهای GPU نیست.
Scaling، تبدیل رنگ، Capture، Compositing، افکت،
حذف نویز و انتقال فریمها میتوانند از Shader،
VRAM و پهنای باند حافظه استفاده کنند.
به همین دلیل هنگام استریم همزمان با بازی، ممکن
است مصرف کلی GPU افزایش یابد؛ حتی اگر موتور Encode
مستقل باشد.
| عملیات | واحد اصلی |
|---|---|
| رندر بازی | 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 را
مشخص نمیکند.
| مورد | پرسش لازم |
|---|---|
| تراشه دقیق | 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 میشود. سپس این موتور فریمها را
بازسازی کرده و آنها را برای پردازشهای بعدی یا
نمایش آماده میکند.
Compressed Video File
│
▼
NVDEC Engine
│
▼
Decoded Frames
│
▼
Color Conversion
│
▼
Display Engine
│
▼
Monitor
کاربردهای 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 و وضوحهای بالا میتواند فشار زیادی
به پردازنده وارد کند.
| معیار | NVDEC | Software Decode |
|---|---|---|
| محل پردازش | موتور اختصاصی GPU | CPU |
| مصرف CPU | بسیار کمتر | بیشتر |
| مصرف انرژی | کمتر | بیشتر |
| مناسب برای چند Stream | بهتر | محدودتر |
| مناسب برای 4K و 8K | بله (در صورت پشتیبانی GPU) | وابسته به قدرت CPU |
تفاوت NVDEC و NVENC
| ویژگی | NVDEC | NVENC |
|---|---|---|
| وظیفه | Decode | Encode |
| ورودی | فایل فشرده | فریم خام |
| خروجی | فریم خام | فایل یا Stream فشرده |
| کاربرد | پخش ویدئو | ضبط و استریم |
| محل استفاده | ابتدای Pipeline | انتهای Pipeline |
چرا نسل NVDEC اهمیت دارد؟
قابلیتهای NVDEC در نسلهای مختلف NVIDIA یکسان
نیستند. پشتیبانی از Codec، عمق رنگ، Chroma،
وضوح، نرخ فریم و تعداد Streamهای همزمان به
معماری و تراشه دقیق GPU وابسته است.
ممکن است دو کارت از یک خانواده تجاری مشابه باشند،
اما به دلیل استفاده از تراشههای متفاوت، موتور
Decode یکسانی نداشته باشند.
بنابراین نامهایی مانند GeForce، Quadro، RTX یا
Tesla بهتنهایی برای تشخیص قابلیتهای 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 | وضعیت عمومی | کاربرد | نکته بررسی |
|---|---|---|---|
| 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 | تعیین قابلیتهای فعال 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 | کاربرد | وضعیت عمومی |
|---|---|---|
| 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 | کاربرد | وضعیت عمومی 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 همزمان را دارد.
| حالت | بار نسبی | کاربرد |
|---|---|---|
| 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 همه جریانها اهمیت دارد.
Video Stream 1 ─┐
Video Stream 2 ─┤
Video Stream 3 ─┤
Video Stream 4 ─┘
│
▼
NVDEC
│
▼
Multiple Decoded Frame Buffers
│
▼
Editing / Analytics / Display
مصرف VRAM هنگام استفاده از NVDEC
پس از Decode، فریمها در حافظه GPU نگهداری میشوند.
هرچه Resolution، Bit Depth و Chroma بیشتر باشد،
اندازه Frame Buffer افزایش پیدا میکند.
Codecهایی که از Reference Frameهای بیشتری استفاده
میکنند نیز ممکن است تعداد بیشتری فریم را همزمان
در VRAM نگهداری کنند.
| عامل | اثر |
|---|---|
| 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
را کاهش دهد.
Compressed Video
│
▼
NVDEC
│
▼
Frames Stay in VRAM
│
┌────┼─────────┐
│ │ │
▼ ▼ ▼
CUDA Tensor NVENC
Processing
ارتباط NVDEC با CUDA و Tensor Core
NVDEC فقط وظیفه Decode را انجام میدهد. پس از
بازسازی فریم، عملیات پردازشی میتواند توسط CUDA
Core، Tensor Core یا سایر واحدهای GPU ادامه پیدا
کند.
این مسیر در Video Analytics، تشخیص اشیا، Super
Resolution، حذف نویز، تبدیل رنگ و پردازش هوش
مصنوعی استفاده میشود.
| مرحله | واحد اصلی | نمونه وظیفه |
|---|---|---|
| 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 مشابه استفاده کنند، اما ظرفیت حافظه، تعداد
موتورهای فیزیکی، درایور، پایداری و محدودیتهای
نرمافزاری آنها متفاوت باشد.
| خانواده | کاربرد اصلی | مزیت احتمالی | نکته |
|---|---|---|---|
| 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 یکی را انتخاب کند.
| مورد | پرسش لازم |
|---|---|
| تراشه دقیق | کارت از چه 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 میشود.
| نشانه | تفسیر احتمالی |
|---|---|
| Video Decode Usage بالا | NVDEC احتمالاً فعال است |
| CPU Usage پایینتر | بخش اصلی Decode به GPU منتقل شده است |
| CPU Usage بسیار بالا | احتمال Software Decode وجود دارد |
| افت فریم با Video Decode صفر | Codec یا Profile پشتیبانی نمیشود |
| افزایش VRAM | Frame Bufferها داخل GPU نگهداری میشوند |
| استفاده همزمان از Compute | افکت یا پردازش AI نیز فعال است |
چرا نرمافزار از 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ها، مصرف انرژی و عملکرد
بهینهتر شود.
| نسل | وظیفه | توضیح |
|---|---|---|
| UVD | Decode | موتور اختصاصی Decode |
| VCE | Encode | موتور اختصاصی Encode |
| VCN | Decode + Encode | نسل جدید موتور ویدئویی AMD |
مسیر پردازش ویدئو در VCN
VCN میتواند فایلهای فشرده را Decode کرده،
فریمها را برای پردازش آماده کند و در صورت نیاز
خروجی را دوباره Encode نماید.
Compressed Video
│
▼
Decode Engine
│
▼
Frames in VRAM
│
▼
Effects / Compute
│
▼
Encode Engine
│
▼
Compressed Output
کاربردهای AMD 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 VCN | NVIDIA |
|---|---|---|
| Decode | VCN | NVDEC |
| Encode | VCN | NVENC |
| معماری | موتور مجتمع | دو موتور مستقل |
| هدف | Hardware Video Processing | Hardware Video Processing |
Codecهای پشتیبانیشده توسط VCN
قابلیت دقیق VCN به نسل GPU وابسته است و همه
محصولات AMD از Codecهای یکسانی پشتیبانی نمیکنند.
| 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
یکسان نیست.
| نسل | ویژگی شاخص | تغییرات کلی |
|---|---|---|
| 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 | موارد قابل بررسی | اهمیت |
|---|---|---|
| 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 | کاربرد | وضعیت کلی |
|---|---|---|
| 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 | کاربرد | وضعیت کلی |
|---|---|---|
| 4:2:0 | فیلم و Streaming | رایجترین حالت |
| 4:2:2 | Broadcast | وابسته به نسل |
| 4:4:4 | VFX و Mastering | محدودتر |
محدودیت Resolution و Frame Rate
ظرفیت واقعی VCN تنها با عبارت «پشتیبانی از 4K»
مشخص نمیشود.
تعداد پیکسل، نرخ فریم، Codec، Bit Depth و تعداد
Streamهای همزمان همگی بر توان موتور ویدئویی
تأثیر میگذارند.
| حالت | بار نسبی | توضیح |
|---|---|---|
| 1080p 30fps | کم | پخش عمومی |
| 1080p 60fps | متوسط | استریم |
| 4K 60fps | زیاد | تولید محتوا |
| 8K | بسیار زیاد | نسلهای جدید |
پردازش چند Stream همزمان
VCN میتواند چند جریان ویدئویی را بهصورت همزمان
Decode یا Encode کند؛ اما ظرفیت واقعی به مدل GPU،
نسل VCN، Codec و Resolution وابسته است.
Stream A
Stream B
Stream C
Stream D
│
▼
AMD VCN
│
▼
Decoded / Encoded Streams
VCN در برابر Software Processing
اگر فایل ویدئویی توسط VCN پشتیبانی نشود، بخشی از
عملیات Encode یا Decode ممکن است به CPU منتقل شود.
| معیار | 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، درایور و نرمافزار هدف نیز
اهمیت دارند.
Intel Processor
┌──────────────────────────────┐
│ CPU Cores │
│ │
│ Integrated Graphics │
│ ├── Execution Units │
│ ├── Media Decode Engine │
│ ├── Media Encode Engine │
│ └── Display Engine │
└──────────────────────────────┘
Intel Arc GPU
┌──────────────────────────────┐
│ Xe Cores │
│ XMX Units │
│ Media Engines │
│ Display Engine │
└──────────────────────────────┘
مسیر پردازش ویدئو با Quick Sync
در یک عملیات Transcoding، موتور Decode ابتدا فایل
ورودی را به فریم تبدیل میکند.
سپس Scaling، تبدیل رنگ، افکت یا پردازشهای دیگر
انجام میشوند و در مرحله پایانی موتور Encode
خروجی فشرده را تولید میکند.
Compressed Input Video
│
▼
Intel Hardware Decode
│
▼
Frames in Graphics Memory
│
▼
Resize / Color / Effects
│
▼
Intel Hardware Encode
│
▼
Compressed Output Video
کاربردهای Intel Quick Sync
| کاربرد | نقش 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 Software Processing |
|---|---|---|
| سرعت | معمولاً بیشتر | وابسته به CPU و Preset |
| مصرف CPU | کمتر | بیشتر |
| مصرف انرژی | معمولاً کمتر | بیشتر |
| انعطاف تنظیمات | محدود به موتور و درایور | معمولاً بیشتر |
| کیفیت در Preset بسیار کند | وابسته به نسل موتور | ممکن است بالاتر باشد |
| پردازش چند Stream | مناسبتر در بسیاری از کاربردها | به تعداد هستههای CPU وابسته است |
تفاوت Quick Sync با Execution Unit و Xe Core
Execution Unitها و Xe Coreها واحدهای پردازشی
عمومیتری هستند که Shader، Compute، افکت و عملیات
قابل برنامهریزی را اجرا میکنند.
موتور Quick Sync برای عملیات مشخص Codec طراحی شده
و نمیتواند جایگزین واحدهای عمومی در تمام مراحل
تدوین یا پردازش تصویر شود.
| معیار | 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 باید بررسی شوند.
| ویژگی | نسلهای قدیمیتر | نسلهای جدیدتر |
|---|---|---|
| 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 | Decode | Encode | نکته |
|---|---|---|---|
| MPEG-2 | در بسیاری از نسلها | وابسته به نسل و نرمافزار | مناسب محتوای قدیمی |
| H.264 | بسیار گسترده | بسیار گسترده | Profile و کیفیت به نسل وابسته است |
| HEVC | در نسلهای جدیدتر | در نسلهای مناسب | Main 10 و Chroma بررسی شوند |
| VP9 | در نسلهای جدیدتر | محدودتر | بیشتر برای پخش وب اهمیت دارد |
| AV1 | در نسلهای جدید | در GPUهای جدید منتخب | Decode و Encode AV1 جدا هستند |
| JPEG و MJPEG | وابسته به موتور و API | وابسته به محصول | کاربرد در دوربین و پردازش تصویر |
تفاوت Decode و Encode در 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 و محصول دقیق بررسی شود.
| عمق رنگ | کاربرد | وضعیت عمومی |
|---|---|---|
| 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 | کاربرد | وضعیت عمومی |
|---|---|---|
| 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
استفاده شود.
این تقسیم وظایف میتواند ظرفیت کل سیستم را افزایش
دهد، اما نیازمند پشتیبانی صحیح نرمافزار و درایور
است.
Compressed Camera File
│
▼
Intel Quick Sync Decode
│
▼
Decoded Frames
│
▼
NVIDIA / AMD GPU Effects
│
▼
Intel QSV or Discrete GPU Encode
│
▼
Final Video
Quick Sync در لپتاپها
در بسیاری از لپتاپها، گرافیک مجتمع Intel همیشه
بخشی از مسیر نمایش و مدیریت انرژی دستگاه است.
Quick Sync میتواند هنگام پخش ویدئو یا تماس تصویری
بهجای GPU مجزای پرمصرف استفاده شود و عمر باتری را
افزایش دهد.
در لپتاپهای ورکاستیشن قدیمی، ممکن است گرافیک
مجتمع Intel Codec جدیدتری را نسبت به Quadro مجزا
پشتیبانی کند.
| مزیت | نتیجه |
|---|---|
| Decode کممصرف | افزایش عمر باتری |
| فعالنشدن GPU مجزا | دما و صدای کمتر |
| Encode سریع | خروجی سریعتر در دستگاه کممصرف |
| تقسیم بار | آزادماندن GPU مجزا برای افکت |
| پخش Codec جدیدتر | برتری احتمالی نسبت به GPU مجزای قدیمی |
Quick Sync در سیستمها و لپتاپهای قدیمی
نسلهای قدیمی Quick Sync معمولاً برای H.264 بسیار
مفید هستند، اما ممکن است HEVC دهبیتی، VP9 یا AV1
را بهصورت کامل پشتیبانی نکنند.
در ورکاستیشنهای استوک، باید نسل پردازنده در کنار
مدل Quadro یا Radeon Pro بررسی شود؛ زیرا موتور
رسانه iGPU ممکن است نقش مهمی در تدوین و پخش داشته
باشد.
| مورد | پرسش لازم |
|---|---|
| نسل 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 در حال استفاده است.
| نشانه | تفسیر |
|---|---|
| Video Decode فعال | Decode سختافزاری در حال انجام است |
| Video Encode فعال | خروجی با Quick Sync ساخته میشود |
| مصرف CPU کمتر | بخشی از پردازش به موتور رسانه منتقل شده است |
| فعالیت iGPU با GPU مجزا | Quick Sync در کنار کارت مجزا فعال است |
| Video Engine بدون 3D Load زیاد | موتور اختصاصی مستقل از رندر سهبعدی کار میکند |
چرا 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 دارد.
| نسل | مهمترین تغییر | نتیجه |
|---|---|---|
| نسلهای اولیه | تمرکز بر 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های بالاتر
پشتیبانی کامل نداشته باشد.
| پارامتر | تأثیر |
|---|---|
| Codec | تعیین نوع فشردهسازی |
| Profile | تعیین قابلیتهای Codec |
| Level | تعیین سقف Resolution و Bitrate |
| Bit Depth | تعیین عمق رنگ |
| Chroma | تعیین ساختار نمونهبرداری رنگ |
پشتیبانی از Resolutionهای مختلف
ظرفیت واقعی موتور رسانه تنها با عبارت
«پشتیبانی از 4K» مشخص نمیشود.
نرخ فریم، تعداد Stream، Codec و Bit Depth نیز
در میزان بار پردازشی Quick Sync نقش دارند.
| حالت | بار نسبی | نمونه کاربرد |
|---|---|---|
| 1080p | پایین | پخش عمومی |
| 1440p | متوسط | تولید محتوا |
| 4K | زیاد | تدوین و HDR |
| 8K | بسیار زیاد | Workflow حرفهای |
پردازش چند Stream همزمان
موتور Quick Sync میتواند همزمان چند جریان
ویدئویی را Decode یا Encode کند، اما ظرفیت واقعی
به نسل Media Engine، Codec، وضوح تصویر و حافظه
سیستم بستگی دارد.
Video Stream 1
Video Stream 2
Video Stream 3
Video Stream 4
│
▼
Intel Media Engine
│
▼
Decoded / Encoded Streams
مصرف حافظه در 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 خواهد شد.
Compressed Video
│
▼
Hardware Decode
│
▼
Frames Stay in GPU Memory
│
├────────► Effects
│
└────────► Hardware Encode
استفاده Quick Sync در نرمافزارهای حرفهای
بسیاری از نرمافزارهای تدوین، تبدیل و استریم
از Quick Sync برای Decode، Preview یا Export
استفاده میکنند.
| نرمافزار | کاربرد 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ها اطلاعات تکراری میان پیکسلها و میان
فریمهای متوالی را حذف یا بازنویسی میکنند تا
حجم فایل کاهش یابد.
Camera Frames
│
▼
Video Codec
│
▼
Compressed Video
│
▼
Smaller File Size
تفاوت Encode و Decode
عملیات Encode داده خام را به فایل فشرده تبدیل
میکند، در حالی که Decode فایل فشرده را برای
نمایش یا پردازش دوباره به فریم تبدیل میکند.
| ویژگی | Encode | Decode |
|---|---|---|
| ورودی | تصویر خام | فایل فشرده |
| خروجی | فایل فشرده | فریم خام |
| کاربرد | ذخیره و استریم | نمایش و تدوین |
مسیر کلی پردازش Codec
Raw Frames
│
▼
Encoder
│
▼
Compressed Video
│
▼
Storage / Network
│
▼
Decoder
│
▼
Display Frames
رایجترین Codecهای ویدئویی
هر Codec با هدف خاصی طراحی شده است؛ بعضی برای
Streaming، بعضی برای تدوین و برخی برای آرشیو
حرفهای مناسبتر هستند.
| Codec | کاربرد اصلی | وضعیت امروزی |
|---|---|---|
| MPEG-2 | DVD و Broadcast | قدیمی |
| H.264 / AVC | وب و استریم | بسیار رایج |
| H.265 / HEVC | 4K و HDR | بسیار رایج |
| VP9 | YouTube | رایج |
| AV1 | Streaming نسل جدید | در حال گسترش |
| Apple ProRes | تدوین حرفهای | حرفهای |
| Avid DNxHR | Post Production | حرفهای |
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
کیفیت مشابهی را با حجم بسیار کمتر ارائه میدهد.
همچنین تقریباً تمام سیستمعاملها، مرورگرها،
تلفنهای همراه، تلویزیونهای هوشمند، دوربینها و
کارتهای گرافیک از آن پشتیبانی میکنند.
| عامل | توضیح |
|---|---|
| حجم کم | کاهش قابل توجه اندازه فایل |
| کیفیت مناسب | کیفیت بالا نسبت به Bitrate |
| سازگاری گسترده | تقریباً تمام دستگاهها |
| Hardware Acceleration | پشتیبانی توسط اکثر GPUها |
| اکوسیستم نرمافزاری | پشتیبانی تقریباً همه برنامهها |
مسیر پردازش H.264
Raw Frames
│
▼
H.264 Encoder
│
▼
Compressed Bitstream
│
▼
Storage / Internet
│
▼
H.264 Decoder
│
▼
Video Frames
کاربردهای H.264
| حوزه | کاربرد |
|---|---|
| YouTube | بارگذاری ویدئو |
| تماس تصویری | Zoom، Teams و Meet |
| دوربینهای دیجیتال | ضبط ویدئو |
| سیستمهای نظارتی | ذخیره تصاویر دوربین |
| استریم زنده | Twitch و بسیاری از سرویسها |
| تدوین ویدئو | فایل ورودی و خروجی |
پشتیبانی سختافزاری H.264
تقریباً تمام موتورهای رسانه امروزی از H.264
پشتیبانی میکنند و این Codec به استاندارد مشترک
صنعت تبدیل شده است.
| موتور رسانه | Decode | Encode |
|---|---|---|
| NVIDIA NVDEC / NVENC | بله | بله |
| AMD VCN | بله | بله |
| Intel Quick Sync | بله | بله |
| Apple Video Engine | بله | بله |
مزایای H.264
| مزیت | توضیح |
|---|---|
| سازگاری بسیار بالا | تقریباً همه دستگاهها |
| کیفیت مناسب | نسبت خوب کیفیت به حجم |
| سرعت Decode | پشتیبانی سختافزاری گسترده |
| مناسب Streaming | Bitrate انعطافپذیر |
| نرمافزارهای فراوان | پشتیبانی کامل اکثر برنامهها |
محدودیتهای H.264
با وجود محبوبیت بالا، H.264 نسبت به Codecهای
جدید مانند HEVC و AV1 راندمان فشردهسازی پایینتری
دارد.
| محدودیت | اثر |
|---|---|
| حجم بیشتر نسبت به HEVC | Bitrate بالاتر |
| راندمان کمتر از AV1 | فایل بزرگتر |
| محدودیت در Workflowهای جدید | مناسب نبودن برای بعضی پروژههای 8K |
Profile در H.264 چیست؟
Profile مجموعهای از قابلیتهای مجاز در استاندارد
H.264 است و مشخص میکند Encoder و Decoder باید از
چه ویژگیهایی پشتیبانی کنند.
دو فایل H.264 ممکن است کاملاً متفاوت باشند؛ زیرا
یکی با Baseline Profile و دیگری با High Profile
تولید شده است.
| 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 | کاربرد رایج | ظرفیت کلی |
|---|---|---|
| 3.1 | HD | متوسط |
| 4.0 | Full HD | بالا |
| 5.1 | 4K | بسیار بالا |
| 5.2 | 4K با نرخ فریم بیشتر | بسیار زیاد |
ساختار Bitstream در H.264
خروجی Encoder مجموعهای از واحدهای داده است که
Bitstream نامیده میشود.
این Bitstream شامل اطلاعات تصویر، پارامترهای Codec،
Headerها و دادههای موردنیاز Decoder است.
Sequence Header
│
▼
Picture Header
│
▼
Slice Data
│
▼
NAL Units
│
▼
Compressed Video Stream
NAL Unit چیست؟
Network Abstraction Layer یا NAL لایهای است که
دادههای فشرده H.264 را برای انتقال و ذخیرهسازی
بستهبندی میکند.
تقریباً تمام فایلهای H.264 از مجموعهای از
NAL Unitها تشکیل شدهاند.
| نوع | وظیفه |
|---|---|
| SPS | اطلاعات کلی ویدئو |
| PPS | پارامترهای تصویر |
| Slice | داده تصویری |
| SEI | اطلاعات جانبی |
SPS و PPS چه هستند؟
Decoder قبل از Decode تصویر باید پارامترهای اصلی
فایل را دریافت کند.
این اطلاعات داخل Sequence Parameter Set و Picture
Parameter Set قرار میگیرند.
| بخش | اطلاعات |
|---|---|
| SPS | Resolution، Profile، Level و… |
| PPS | پارامترهای مربوط به Sliceها |
Macroblock در H.264
یکی از واحدهای اصلی پردازش در H.264، Macroblock
است که معمولاً ناحیهای 16×16 پیکسلی را نمایش
میدهد.
بسیاری از مراحل Encode مانند Motion Estimation،
Prediction و Transform بر اساس Macroblock انجام
میشوند.
+----+----+----+----+
| MB | MB | MB | MB |
+----+----+----+----+
| MB | MB | MB | MB |
+----+----+----+----+
| MB | MB | MB | MB |
+----+----+----+----+
انواع فریم در H.264
یکی از مهمترین دلایل حجم پایین فایلهای H.264،
استفاده از چند نوع فریم مختلف است.
تمام فریمها اطلاعات کامل تصویر را ذخیره نمیکنند.
بعضی فریمها تنها تغییرات نسبت به فریمهای دیگر را
ثبت میکنند.
| نوع فریم | وابستگی | حجم تقریبی | کاربرد |
|---|---|---|---|
| I-Frame | مستقل | زیاد | شروع گروه فریم |
| P-Frame | وابسته به گذشته | متوسط | ثبت تغییرات |
| B-Frame | وابسته به گذشته و آینده | کم | بیشترین فشردهسازی |
I-Frame چیست؟
I-Frame یا Intra Frame تصویری کامل و مستقل است که
بدون نیاز به سایر فریمها Decode میشود.
این فریمها معمولاً بزرگترین حجم را دارند اما
سریعترین نقطه برای شروع پخش یا جابهجایی در
Timeline هستند.
| وابستگی | ندارد |
|---|---|
| کیفیت | کامل |
| حجم | زیاد |
| مناسب برای Seek | بله |
P-Frame چیست؟
P-Frame فقط تغییرات نسبت به فریمهای قبلی را ذخیره
میکند.
اگر بخشی از تصویر ثابت باشد، Encoder دوباره آن را
ذخیره نمیکند و تنها اختلافها ثبت میشوند.
I ─────► P ─────► P ─────► P
B-Frame چیست؟
B-Frame علاوه بر فریم گذشته، از فریم آینده نیز برای
پیشبینی تصویر استفاده میکند.
همین موضوع باعث میشود حجم فایل کاهش یابد اما
عملیات Decode پیچیدهتر شود.
I ───► B ◄─── P
GOP چیست؟
Group of Pictures یا GOP مجموعهای از فریمهای
وابسته به یک I-Frame است.
هرچه فاصله بین I-Frameها بیشتر باشد، حجم فایل کمتر
میشود اما جابهجایی و ویرایش فایل دشوارتر خواهد شد.
I B B P B B P B B P B B I
مقایسه I، P و B Frame
| ویژگی | I | P | B |
|---|---|---|---|
| وابستگی | ندارد | گذشته | گذشته و آینده |
| حجم | زیاد | متوسط | کم |
| کیفیت مستقل | کامل | خیر | خیر |
| سرعت Seek | بسیار خوب | متوسط | ضعیف |
| فشردهسازی | کم | خوب | بسیار زیاد |
Motion Estimation چیست؟
Motion Estimation فرآیندی است که Encoder حرکت
اشیاء را بین فریمهای متوالی پیدا میکند.
بهجای ذخیره مجدد کل تصویر، تنها بردار حرکت
(Motion Vector) ذخیره میشود.
Frame A
│
Object →
│
▼
Frame B
Store Motion Vector
Motion Compensation چیست؟
پس از یافتن بردار حرکت، Decoder تصویر جدید را با
استفاده از اطلاعات فریم قبلی و Motion Vector
بازسازی میکند.
این روش یکی از مهمترین دلایل کاهش حجم فایلهای
H.264 محسوب میشود.
Motion Vector چیست؟
Motion Vector برداری است که جهت و مقدار جابهجایی
هر Macroblock را نسبت به فریم مرجع نشان میدهد.
بهجای ذخیره دوباره تصویر، تنها این بردارها ذخیره
میشوند که حجم فایل را بهشدت کاهش میدهد.
تفاوت CABAC و CAVLC
پس از پایان مراحل فشردهسازی تصویر، دادهها باید
بهصورت بیتی کدگذاری شوند.
H.264 دو روش اصلی برای این کار دارد:
CAVLC و CABAC.
| ویژگی | CAVLC | CABAC |
|---|---|---|
| پیچیدگی | کمتر | بیشتر |
| سرعت Encode | بیشتر | کمتر |
| راندمان فشردهسازی | کمتر | بیشتر |
| حجم فایل | بزرگتر | کوچکتر |
Reference Frame چیست؟
هنگام Encode، بسیاری از فریمها بهصورت مستقل
ذخیره نمیشوند؛ بلکه از یک یا چند فریم قبلی به
عنوان مرجع (Reference Frame) استفاده میکنند.
هرچه تعداد Reference Frameها بیشتر باشد، Encoder
میتواند تطابق دقیقتری پیدا کند، اما عملیات
Encode و Decode پیچیدهتر خواهد شد.
I ─────► P1 ─────► P2
│ ▲ ▲
└─────────┴─────────┘
Reference Frames
Multiple Reference Frame
H.264 میتواند بهجای یک فریم مرجع، از چندین
Reference Frame استفاده کند.
این قابلیت کیفیت فشردهسازی را افزایش میدهد،
اما حافظه، توان پردازشی و زمان Encode بیشتری
نیاز خواهد داشت.
| تعداد مرجع | کیفیت | سرعت | حافظه |
|---|---|---|---|
| 1 | مناسب | سریع | کم |
| چند مرجع | بهتر | کندتر | بیشتر |
Transform در H.264
پس از پیشبینی تصویر، اختلاف میان تصویر واقعی و
تصویر پیشبینیشده وارد مرحله Transform میشود.
هدف این مرحله تبدیل دادههای فضایی به ضرایبی است
که فشردهسازی آنها سادهتر باشد.
Prediction Error
│
▼
Transform
│
▼
Transform Coefficients
Quantization چیست؟
مهمترین مرحله کاهش حجم فایل، Quantization است.
در این مرحله بخشی از اطلاعات کماهمیت حذف یا
تقریب زده میشود تا حجم Bitstream کاهش پیدا کند.
هرچه Quantization شدیدتر باشد، حجم فایل کمتر و
احتمال افت کیفیت بیشتر خواهد بود.
| Quantization | حجم فایل | کیفیت |
|---|---|---|
| کم | بیشتر | بهتر |
| زیاد | کمتر | پایینتر |
Quantization Parameter (QP)
شدت Quantization توسط پارامتری به نام
Quantization Parameter یا QP کنترل میشود.
افزایش مقدار QP باعث کاهش حجم فایل و افزایش
افت کیفیت میشود.
| QP | کیفیت | حجم فایل |
|---|---|---|
| پایین | بسیار خوب | زیاد |
| متوسط | متعادل | متوسط |
| بالا | افت محسوس | کم |
Deblocking Filter
Quantization ممکن است باعث ایجاد مرزهای قابل مشاهده
میان Macroblockها شود.
Deblocking Filter این مرزها را نرمتر میکند تا
تصویر طبیعیتر دیده شود.
Before Filter
████│████
████│████
▼
After Filter
██████████
██████████
Rate Control چیست؟
Rate Control تعیین میکند Encoder چگونه Bitrate
فایل را در طول Encode مدیریت کند.
این بخش تعادل میان کیفیت، حجم فایل و پهنای باند
را کنترل میکند.
روشهای مختلف Rate Control
| روش | ویژگی اصلی | کاربرد |
|---|---|---|
| CBR | Bitrate ثابت | Streaming |
| VBR | Bitrate متغیر | آرشیو و کیفیت بهتر |
| CQP | QP ثابت | تست و تولید محتوا |
| CRF | کیفیت تقریباً ثابت | x264 و FFmpeg |
Hardware Acceleration در H.264
امروزه تقریباً تمام GPUهای مدرن دارای موتور
اختصاصی برای Decode و Encode فایلهای 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 با افزایش بهرهوری فشردهسازی، امکان
انتقال و ذخیره ویدئوهای باکیفیت را با
پهنای باند کمتر فراهم کرد.
| هدف | نتیجه |
|---|---|
| کاهش Bitrate | حجم فایل کمتر |
| پشتیبانی 4K و 8K | کیفیت بالاتر |
| HDR | عمق رنگ بیشتر |
| Streaming | مصرف کمتر پهنای باند |
مسیر پردازش HEVC
Raw Frames
│
▼
HEVC Encoder
│
▼
Compressed HEVC Stream
│
▼
Storage / Network
│
▼
HEVC Decoder
│
▼
Decoded Frames
مزایای HEVC
| مزیت | توضیح |
|---|---|
| راندمان بیشتر | کیفیت مشابه با Bitrate کمتر |
| مناسب 4K و 8K | فشردهسازی بهتر تصاویر بزرگ |
| پشتیبانی HDR | کیفیت رنگ بهتر |
| مناسب Streaming | کاهش مصرف پهنای باند |
| کیفیت بالاتر | Artifact کمتر نسبت به H.264 |
محدودیتهای HEVC
در مقابل راندمان بالاتر، Encode و Decode
HEVC نسبت به H.264 پیچیدهتر هستند.
همچنین برخی تجهیزات قدیمی از Decode سختافزاری
HEVC پشتیبانی نمیکنند.
| محدودیت | اثر |
|---|---|
| Encode پیچیدهتر | زمان پردازش بیشتر |
| نیاز پردازشی بالاتر | وابستگی بیشتر به GPU |
| سازگاری کمتر | بعضی دستگاههای قدیمی |
مقایسه H.264 و HEVC
| ویژگی | H.264 | HEVC |
|---|---|---|
| راندمان فشردهسازی | خوب | بسیار بهتر |
| حجم فایل | بیشتر | کمتر |
| نیاز پردازشی | کمتر | بیشتر |
| مناسب 4K | قابل استفاده | بسیار مناسب |
| HDR | محدود | مناسبتر |
کاربردهای 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 میشود.
| ویژگی | H.264 | HEVC |
|---|---|---|
| واحد اصلی | Macroblock | CTU |
| اندازه معمول | 16×16 | تا 64×64 |
| انعطافپذیری | محدود | بسیار زیاد |
Coding Tree چیست؟
هر CTU بهصورت پویا به بلوکهای کوچکتر تقسیم
میشود تا بهترین ساختار برای فشردهسازی انتخاب شود.
این تقسیمبندی با ساختاری درختی انجام میشود که
دلیل نامگذاری Coding Tree نیز همین موضوع است.
CTU
│
├──── CU
│ ├── CU
│ └── CU
│
└──── CU
Coding Unit (CU)
Coding Unit کوچکترین واحد تصمیمگیری برای Encode
است و مشخص میکند هر بخش تصویر چگونه فشرده شود.
اندازه CU میتواند متناسب با پیچیدگی تصویر تغییر
کند؛ بنابراین بخشهای ساده و پیچیده تصویر به شکل
متفاوتی Encode میشوند.
Prediction Unit (PU)
Prediction Unit نحوه پیشبینی هر بخش تصویر را
تعیین میکند.
هر CU میتواند شامل یک یا چند Prediction Unit
باشد تا بهترین روش پیشبینی انتخاب شود.
| وظیفه | توضیح |
|---|---|
| Intra Prediction | پیشبینی از همان فریم |
| Inter Prediction | پیشبینی از فریمهای مرجع |
Transform Unit (TU)
پس از پایان Prediction، اختلاف تصویر وارد مرحله
Transform میشود.
Transform Unit مشخص میکند ضرایب Transform چگونه
تولید و Quantize شوند.
ساختار داخلی CTU
CTU
│
├──── Coding Unit
│
├──── Prediction Unit
│
└──── Transform Unit
Profileهای اصلی HEVC
مانند H.264، استاندارد HEVC نیز دارای Profileهای
مختلف است که قابلیتهای Codec را مشخص میکنند.
| Profile | ویژگی | کاربرد |
|---|---|---|
| Main | 8-bit | استفاده عمومی |
| Main 10 | 10-bit | HDR و 4K |
| Main Still Picture | تصویر ثابت | کاربردهای خاص |
Level در HEVC
Level در HEVC نیز همانند H.264 محدودیتهایی مانند
حداکثر Resolution، نرخ فریم، تعداد CTUها و Bitrate
را تعیین میکند.
| Level | کاربرد رایج |
|---|---|
| 4 | Full HD |
| 5 | 4K |
| 6 | 8K |
Intra Prediction در HEVC
Intra Prediction روشی است که در آن تصویر تنها با
استفاده از اطلاعات همان فریم پیشبینی میشود و
نیازی به مراجعه به فریمهای قبلی یا بعدی وجود ندارد.
HEVC تعداد حالتهای پیشبینی درونفریمی را نسبت به
H.264 بهطور قابل توجهی افزایش داده است و به همین
دلیل میتواند لبهها و جزئیات تصویر را دقیقتر
مدلسازی کند.
| ویژگی | نتیجه |
|---|---|
| پیشبینی از همان فریم | عدم وابستگی به فریمهای دیگر |
| جهتهای بیشتر | دقت بالاتر در لبهها |
| خطای کمتر | فشردهسازی بهتر |
Inter Prediction در HEVC
Inter Prediction از اطلاعات فریمهای مرجع برای
پیشبینی تصویر جدید استفاده میکند.
در HEVC الگوریتمهای جستجوی حرکت نسبت به H.264
بهینهتر شدهاند و همین موضوع یکی از دلایل اصلی
افزایش راندمان این Codec است.
Reference Frame
│
▼
Motion Search
│
▼
Prediction
│
▼
Current Frame
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 دوباره
استفاده شود و دیگر نیازی به ذخیره بردار جدید نباشد.
| مزیت | اثر |
|---|---|
| داده کمتر | کاهش حجم Bitstream |
| Encode سریعتر | کاهش محاسبات |
| راندمان بیشتر | فشردهسازی بهتر |
Tile چیست؟
Tile تصویر را به چند ناحیه مستقل تقسیم میکند تا
عملیات Encode و Decode بتواند بهصورت موازی انجام
شود.
این قابلیت مخصوصاً برای پردازندههای چند هستهای و
GPUهای مدرن اهمیت زیادی دارد.
+-----+-----+
|Tile1|Tile2|
+-----+-----+
|Tile3|Tile4|
+-----+-----+
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ها کمتر شوند.
Decoded Image
│
▼
Sample Adaptive Offset
│
▼
Improved Image
Deblocking Filter در HEVC
مانند H.264، در HEVC نیز پس از Quantization ممکن
است مرز میان بلوکها قابل مشاهده باشد.
Deblocking Filter این مرزها را نرمتر میکند و
ظاهر تصویر را طبیعیتر نشان میدهد.
| قبل از فیلتر | بعد از فیلتر |
|---|---|
| مرزهای قابل مشاهده | لبههای نرمتر |
| Block Artifact | تصویر طبیعیتر |
Reference Picture Set (RPS)
HEVC برای مدیریت فریمهای مرجع از ساختاری به نام
Reference Picture Set استفاده
میکند.
این ساختار تعیین میکند هر فریم برای پیشبینی از
کدام تصاویر قبلی یا بعدی استفاده کند.
Reference Frames
│
▼
Reference Picture Set
│
▼
Prediction Process
Entropy Coding
آخرین مرحله Encode، تبدیل اطلاعات فشردهشده به
Bitstream نهایی است.
HEVC مانند High Profile در H.264 از CABAC برای
افزایش راندمان فشردهسازی استفاده میکند.
| ویژگی | اثر |
|---|---|
| فشردهسازی بهتر | کاهش حجم فایل |
| پیچیدگی بیشتر | Encode سنگینتر |
| راندمان بالا | کیفیت بهتر در Bitrate یکسان |
Bit Depth در HEVC
HEVC از Bit Depthهای مختلف پشتیبانی میکند و
نسخه Main 10 به یکی از رایجترین Profileهای
این Codec تبدیل شده است.
| Bit Depth | کاربرد |
|---|---|
| 8-bit | استفاده عمومی |
| 10-bit | HDR و تولید حرفهای |
| 12-bit | کاربردهای تخصصی |
Chroma Sampling در HEVC
HEVC از ساختارهای مختلف نمونهبرداری رنگ
پشتیبانی میکند.
| حالت | کاربرد |
|---|---|
| 4:2:0 | رایجترین حالت |
| 4:2:2 | Broadcast |
| 4:4:4 | تدوین حرفهای و VFX |
HEVC و HDR
یکی از مهمترین دلایل محبوبیت HEVC، پشتیبانی مناسب
از محتوای HDR است.
ترکیب Main 10، عمق رنگ 10-bit و فضای رنگ گسترده،
HEVC را به گزینهای مناسب برای ویدئوهای HDR تبدیل
کرده است.
پشتیبانی سختافزاری 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 را نیز برای شرکتها کاهش میدهد.
| هدف | نتیجه |
|---|---|
| کاهش Bitrate | حجم کمتر |
| کیفیت بالاتر | Artifact کمتر |
| Royalty-Free | استفاده آزاد |
| پشتیبانی 4K و 8K | مناسب برای آینده |
Alliance for Open Media
AV1 توسط اتحاد AOMedia توسعه یافته است؛
کنسرسیومی که با هدف ایجاد استانداردهای آزاد
برای رسانههای دیجیتال تشکیل شد.
| شرکت | نقش |
|---|---|
| توسعه و استفاده در YouTube | |
| Microsoft | پشتیبانی نرمافزاری |
| Intel | توسعه سختافزار |
| AMD | GPU و Media Engine |
| NVIDIA | Decode و Encode سختافزاری |
| Meta | استفاده در سرویسهای آنلاین |
مسیر کلی Encode و Decode
Raw Frames
│
▼
AV1 Encoder
│
▼
Compressed AV1 Stream
│
▼
Network / Storage
│
▼
AV1 Decoder
│
▼
Display Frames
مزایای AV1
| مزیت | توضیح |
|---|---|
| راندمان بسیار بالا | Bitrate کمتر نسبت به HEVC |
| متنباز | بدون Royalty |
| کیفیت بالا | مناسب HDR و 8K |
| مناسب Streaming | کاهش مصرف پهنای باند |
| آیندهنگر | پشتیبانی گسترده در حال توسعه |
محدودیتهای AV1
Encode نرمافزاری AV1 نسبت به HEVC و H.264
پیچیدهتر و زمانبرتر است.
به همین دلیل وجود موتورهای سختافزاری Encode و
Decode برای استفاده گسترده از 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 بهصورت پویا و درختی به
بلوکهای کوچکتر تقسیم میشوند.
این تقسیمبندی انعطافپذیر باعث میشود هر قسمت
تصویر متناسب با میزان جزئیات خود فشرده شود.
Superblock
│
├──── Block
│ ├── Block
│ ├── Block
│ └── Block
│
└──── Block
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 است.
در این روش مرز بین بلوکهای متحرک با یکدیگر
همپوشانی پیدا میکند تا شکستگیهای تصویر کاهش
یابد.
Block A
██████▒▒▒▒
Block B
▒▒▒▒██████
Overlap Area
Warped Motion
بسیاری از حرکتهای واقعی تنها جابهجایی ساده
نیستند و شامل چرخش، تغییر زاویه یا پرسپکتیو نیز
میشوند.
Warped Motion این نوع حرکتها را دقیقتر مدل
میکند و خطای پیشبینی را کاهش میدهد.
Constrained Directional Enhancement Filter (CDEF)
CDEF یکی از فیلترهای اختصاصی AV1 است که پس از
Decode اجرا میشود.
این فیلتر نویزهای ناشی از فشردهسازی را کاهش داده
و در عین حال جزئیات لبهها را حفظ میکند.
| قبل | بعد |
|---|---|
| Artifact بیشتر | تصویر نرمتر |
| نویز لبهها | حفظ جزئیات |
Loop Restoration Filter
پس از پایان Decode و اجرای CDEF، مرحله دیگری
به نام Loop Restoration اجرا میشود.
هدف این فیلتر بازیابی جزئیات تصویر و کاهش نویزهای
باقیمانده است تا کیفیت نهایی افزایش یابد.
Film Grain Synthesis
یکی از فناوریهای منحصربهفرد AV1، بازسازی نویز
طبیعی فیلم پس از Decode است.
در بسیاری از فیلمهای سینمایی، Grain بخشی از ظاهر
طبیعی تصویر محسوب میشود. ذخیره مستقیم این نویز،
حجم فایل را بهشدت افزایش میدهد.
AV1 بهجای ذخیره تمام Grain، تنها پارامترهای آن را
ذخیره کرده و هنگام Decode دوباره آن را تولید
میکند.
Encoded Video
│
▼
Film Grain Parameters
│
▼
Decoder
│
▼
Natural Film Grain
Tile و Tile Group
AV1 تصویر را میتواند به چند Tile مستقل تقسیم کند
تا عملیات Encode و Decode بهصورت موازی انجام شود.
Tile Group نیز مجموعهای از Tileها است که مدیریت
پردازش آنها را سادهتر میکند.
+-------+-------+
| Tile1 | Tile2 |
+-------+-------+
| Tile3 | Tile4 |
+-------+-------+
Open Bitstream Unit (OBU)
ساختار Bitstream در AV1 از واحدهایی به نام
Open Bitstream Unit (OBU)
تشکیل شده است.
هر OBU بخشی از اطلاعات فایل مانند Header،
پارامترهای Sequence، دادههای تصویری یا Metadata
را نگهداری میکند.
| نوع OBU | وظیفه |
|---|---|
| Sequence Header | اطلاعات کلی ویدئو |
| Frame Header | اطلاعات هر فریم |
| Tile Group | داده تصویری |
| Metadata | اطلاعات جانبی |
Profileهای AV1
AV1 برای پشتیبانی از عمق رنگ و نمونهبرداری رنگ،
چند Profile مختلف ارائه میکند.
| 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 پشتیبانی میکند.
| ویژگی | حالتهای متداول |
|---|---|
| Bit Depth | 8 / 10 / 12 بیت |
| Chroma Sampling | 4:2:0 ، 4:2:2 ، 4:4:4 |
پشتیبانی سختافزاری AV1
در سالهای اخیر تقریباً تمام GPUهای جدید از Decode
سختافزاری AV1 پشتیبانی میکنند و بسیاری از آنها
قابلیت Encode سختافزاری را نیز ارائه میدهند.
| سازنده | Decode | Encode |
|---|---|---|
| NVIDIA Ada / Blackwell | بله | بله |
| AMD RDNA 3 و جدیدتر | بله | بله |
| Intel Arc و Xe | بله | بله |
| Apple Media Engine | بله | بسته به نسل تراشه |
مقایسه H.264، HEVC و AV1
| ویژگی | 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 |
|---|---|---|
| وظیفه | فشردهسازی | نگهداری داده |
| کیفیت تصویر | مؤثر | بدون تأثیر |
| نمونه | H.264، HEVC، AV1 | MP4، MKV، MOV |
ساختار داخلی Container
یک Container میتواند چندین Stream مختلف را
در یک فایل نگهداری کند.
Video Stream
│
Audio Stream
│
Subtitle
│
Metadata
│
Chapters
│
▼
Container File
چرا به 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های صوتی و تصویری
را بر عهده دارد.
MP4 File
│
├── ftyp
├── moov
├── mdat
└── free
مهمترین Boxهای MP4
| Box | وظیفه |
|---|---|
| ftyp | نوع فایل و سازگاری |
| moov | اطلاعات ساختاری فایل |
| mdat | دادههای اصلی صوت و تصویر |
| free | فضای رزرو شده |
Codecهای قابل استفاده در MP4
MP4 میتواند چندین Codec مختلف را در خود
نگهداری کند؛ البته میزان پشتیبانی نرمافزارها
ممکن است متفاوت باشد.
| نوع | نمونهها |
|---|---|
| Video | H.264، HEVC، AV1، MPEG-4 Visual |
| Audio | AAC، ALAC، MP3 |
| Subtitle | Timed Text و فرمتهای سازگار |
مزایای MP4
| مزیت | توضیح |
|---|---|
| سازگاری بسیار بالا | تقریباً تمام دستگاهها |
| مناسب Streaming | بارگذاری و پخش سریع |
| پشتیبانی نرمافزاری | تقریباً تمام پلیرها |
| مدیریت Metadata | اطلاعات جانبی فایل |
محدودیتهای MP4
MP4 نسبت به بعضی Containerهای مدرن مانند MKV
انعطافپذیری کمتری در نگهداری چندین زیرنویس،
Trackهای متعدد یا Metadata پیچیده دارد.
| محدودیت | اثر |
|---|---|
| قابلیت کمتر نسبت به 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 باعث میشود اضافه کردن
اطلاعات جدید بدون شکستن سازگاری فایل امکانپذیر
باشد.
EBML
│
├── Segment
│ ├── Info
│ ├── Tracks
│ ├── Chapters
│ ├── Attachments
│ └── Cluster
چه دادههایی در MKV ذخیره میشوند؟
| نوع داده | پشتیبانی |
|---|---|
| Video Track | ✔ |
| Audio Track | ✔ |
| Subtitle | ✔ |
| Chapter | ✔ |
| Font Attachment | ✔ |
| Cover Image | ✔ |
| Metadata | ✔ |
Codecهای قابل استفاده در MKV
تقریباً تمام Codecهای رایج صوتی و تصویری
میتوانند داخل MKV قرار بگیرند.
| نوع | نمونهها |
|---|---|
| Video | H.264، HEVC، AV1، VP9، MPEG-2 |
| Audio | AAC، FLAC، Opus، Vorbis، DTS، Dolby Digital، TrueHD |
| Subtitle | SRT، ASS، SSA، PGS، VobSub |
مزایای MKV
| مزیت | توضیح |
|---|---|
| انعطاف بسیار بالا | پشتیبانی از انواع Track |
| چندین زیرنویس | بدون محدودیت عملی |
| چندین Audio Track | دوبله و زبانهای مختلف |
| متنباز | توسعه آزاد |
| مناسب آرشیو | کیفیت بالا و امکانات زیاد |
محدودیتهای MKV
اگرچه MKV امکانات بسیار زیادی دارد، اما هنوز
همه دستگاههای قدیمی و برخی تجهیزات مصرفی از
تمام قابلیتهای آن پشتیبانی نمیکنند.
| محدودیت | اثر |
|---|---|
| سازگاری کمتر | برخی دستگاههای قدیمی |
| امکانات زیاد | پیادهسازی پیچیدهتر |
مقایسه MP4 و MKV
| ویژگی | 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 تشکیل میشوند.
MOV File
│
├── ftyp
├── moov
├── mdat
└── wide
Codecهای رایج در MOV
MOV تقریباً از تمام Codecهای حرفهای Apple و
بسیاری از Codecهای عمومی پشتیبانی میکند.
| نوع | نمونهها |
|---|---|
| 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
| مزیت | توضیح |
|---|---|
| مناسب تدوین | Workflow حرفهای |
| پشتیبانی Timecode | همگامسازی پروژه |
| Metadata کامل | اطلاعات فنی و پروژه |
| کیفیت بالا | مناسب Master File |
| سازگاری با Apple | Final Cut Pro و macOS |
محدودیتهای MOV
| محدودیت | اثر |
|---|---|
| حجم فایل | معمولاً بیشتر از MP4 |
| مناسب نبودن برای وب | Streaming محدودتر |
| تمرکز بر Apple | بهترین عملکرد در اکوسیستم Apple |
مقایسه 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 استفاده میکند.
EBML
│
├── Segment
│ ├── Info
│ ├── Tracks
│ ├── Cluster
│ └── Cues
Codecهای قابل استفاده در WebM
برخلاف MKV، WebM تنها از تعداد محدودی Codec
استاندارد پشتیبانی میکند تا سازگاری مرورگرها
حفظ شود.
| نوع | Codec |
|---|---|
| Video | VP8، VP9، AV1 |
| Audio | Opus، Vorbis |
چرا WebM توسعه یافت؟
با گسترش HTML5 و ویدئوهای آنلاین، نیاز به
قالبی آزاد و بدون هزینه حق امتیاز برای پخش
مستقیم در مرورگرها احساس شد.
WebM پاسخی به این نیاز بود و امروزه یکی از
قالبهای اصلی ویدئوی وب محسوب میشود.
مزایای WebM
| مزیت | توضیح |
|---|---|
| متنباز | بدون Royalty |
| مناسب وب | HTML5 و مرورگرها |
| حجم کم | مناسب Streaming |
| پشتیبانی AV1 | مناسب نسل جدید ویدئو |
محدودیتهای WebM
| محدودیت | اثر |
|---|---|
| Codec محدود | پشتیبانی فقط از Codecهای مشخص |
| امکانات کمتر از MKV | انعطافپذیری پایینتر |
| مناسب نبودن برای آرشیو | تمرکز بر پخش آنلاین |
مقایسه WebM، MP4 و MKV
| ویژگی | 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 تشکیل میشود که هر کدام
اطلاعات مشخصی را نگهداری میکنند.
RIFF
│
├── Header
├── Stream List
├── Video Data
├── Audio Data
└── Index
Codecهای قابل استفاده در AVI
AVI از Codecهای متنوعی پشتیبانی میکند، اما
این قالب برای Codecهای مدرن طراحی نشده است.
| نوع | نمونهها |
|---|---|
| Video | DivX، Xvid، MPEG-4 Visual، MJPEG، DV |
| Audio | PCM، MP3، AC-3 |
مزایای AVI
| مزیت | توضیح |
|---|---|
| ساختار ساده | پیادهسازی آسان |
| سازگاری با ویندوز | پشتیبانی گسترده تاریخی |
| مناسب فایلهای قدیمی | آرشیو کلاسیک |
| مناسب Capture | برخی تجهیزات ضبط قدیمی |
محدودیتهای AVI
AVI پیش از ظهور بسیاری از فناوریهای مدرن
ویدئویی طراحی شده است؛ بنابراین از قابلیتهای
امروزی بهخوبی پشتیبانی نمیکند.
| محدودیت | اثر |
|---|---|
| Metadata محدود | امکانات کمتر |
| زیرنویس داخلی | پشتیبانی ضعیف |
| چندین Audio Track | محدود |
| مناسب نبودن Streaming | عملکرد ضعیف در وب |
| Codecهای جدید | سازگاری محدود |
مقایسه AVI با MP4 و MKV
| ویژگی | 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 باشد.
FLV Header
│
├── Metadata Tag
├── Audio Tag
├── Video Tag
├── Audio Tag
├── Video Tag
└── ...
Codecهای رایج در FLV
FLV در طول زمان از چند Codec تصویری و صوتی
پشتیبانی کرد، اما مجموعه قابلیتهای آن در
مقایسه با Containerهای مدرن محدودتر است.
| نوع | Codecهای رایج | کاربرد تاریخی |
|---|---|---|
| Video | Sorenson Spark، VP6، H.264 | ویدئوی وب و پخش زنده |
| Audio | MP3، AAC، Speex | صدا، گفتار و موسیقی |
ارتباط FLV با RTMP
FLV ارتباط نزدیکی با پروتکل
RTMP یا Real-Time Messaging Protocol
دارد.
در بسیاری از سیستمهای پخش زنده، دادههای صوتی
و تصویری با ساختاری مشابه Tagهای FLV داخل
اتصال RTMP منتقل میشوند.
به همین دلیل، حتی پس از کاهش استفاده مستقیم از
فایلهای FLV، ساختارهای مرتبط با آن برای ارسال
Stream زنده به بعضی سرورها و پلتفرمها همچنان
مورد استفاده قرار گرفتند.
Camera or Screen
│
▼
Live Encoder
│
▼
H.264 + AAC
│
▼
RTMP Stream
│
▼
Streaming Server
کاربردهای تاریخی FLV
| کاربرد | توضیح | وضعیت امروزی |
|---|---|---|
| پخش ویدئو در مرورگر | با افزونه Flash Player | منسوخ |
| ویدئوی آموزشی | سامانههای آموزش قدیمی | بیشتر جایگزین شده است |
| پخش زنده | همراه با RTMP | ساختار ارسال هنوز در برخی Workflowها دیده میشود |
| وبسایتهای اشتراک ویدئو | پخش اینترنتی اولیه | جایگزین با HTML5 |
| بازی و محتوای تعاملی | داخل پروژههای Flash | منسوخ |
مزایای تاریخی FLV
| مزیت | نتیجه |
|---|---|
| پخش داخل مرورگر | بدون نیاز به پلیر خارجی |
| شروع سریع پخش | مناسب ویدئوی آنلاین |
| ارتباط با RTMP | مناسب پخش زنده |
| اکوسیستم گسترده Flash | پشتیبانی وسیع در وب قدیمی |
محدودیتهای FLV
مهمترین ضعف FLV وابستگی تاریخی آن به Flash
Player و اکوسیستم منسوخ Flash است.
| محدودیت | پیامد |
|---|---|
| پایان پشتیبانی Flash | عدم پخش مستقیم در مرورگرهای جدید |
| Codecهای محدودتر | سازگاری ضعیف با فناوریهای جدید |
| امکانات کمتر از MKV و MP4 | Metadata و Trackهای محدودتر |
| پشتیبانی ضعیف از HDR و AV1 | نامناسب برای محتوای مدرن |
| وابستگی به نرمافزار قدیمی | ریسک امنیتی و ناسازگاری |
مقایسه FLV با MP4 و WebM
| ویژگی | FLV | MP4 | WebM |
|---|---|---|---|
| پخش HTML5 | ضعیف | بسیار گسترده | بسیار گسترده |
| H.264 | قابل استفاده | بسیار رایج | استاندارد اصلی WebM نیست |
| AV1 | نامناسب | قابل استفاده | بسیار مناسب |
| وضعیت امروزی | عمدتاً منسوخ | بسیار رایج | رایج در وب مدرن |
| پخش زنده | تاریخی با RTMP | مناسب در Workflowهای جدید | وابسته به پلتفرم و پروتکل |
تبدیل FLV به MP4 یا MKV
اگر Streamهای داخلی فایل FLV با Container مقصد
سازگار باشند، میتوان آنها را بدون Encode
مجدد به MP4 یا MKV منتقل کرد.
این عملیات Remux نام دارد و
معمولاً سریع انجام میشود و افت کیفیت ایجاد
نمیکند.
اگر Codec داخلی قدیمی یا ناسازگار باشد، لازم
است فایل Transcode شود که زمان بیشتری میبرد
و ممکن است کیفیت را تغییر دهد.
| روش | 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 شامل
بخشی از داده صوتی، تصویری یا اطلاعات کنترلی
است.
188-Byte TS Packet
┌──────────────┬───────────────────────────────┐
│ TS Header │ Payload │
│ 4 Bytes │ Up to 184 Bytes │
└──────────────┴───────────────────────────────┘
Sync Byte چیست؟
ابتدای هر Packet استاندارد MPEG-TS با یک
Sync Byte مشخص میشود.
گیرنده با پیدا کردن این مقدار میتواند مرز
Packetها را تشخیص دهد و در صورت از دست رفتن
همگامسازی، دوباره به Stream متصل شود.
PID در MPEG-TS چیست؟
هر نوع داده داخل Transport Stream با شناسهای
به نام
Packet Identifier یا PID
مشخص میشود.
گیرنده با استفاده از PID تشخیص میدهد هر Packet
به ویدئو، صدا، زیرنویس یا اطلاعات مدیریتی مربوط
است.
| 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 | Program Association Table | معرفی برنامهها و PID مربوط به PMT هر برنامه |
| PMT | Program Map Table | معرفی PIDهای ویدئو، صدا و دادههای هر برنامه |
PAT
│
└──► PMT for Program 1
│
├──► Video PID
├──► Audio PID
└──► Subtitle PID
حمل چند برنامه در یک Transport Stream
یک MPEG-TS میتواند یک یا چند برنامه مستقل را
همزمان حمل کند.
برای مثال، در پخش تلویزیون دیجیتال ممکن است
چند کانال تلویزیونی داخل یک Transport Stream
مشترک Multiplex شوند.
Program 1: Video + Audio ─┐
Program 2: Video + Audio ─┤
Program 3: Video + Audio ─┤
Data and Service Tables ──┘
│
▼
MPEG Transport Stream
مقاومت MPEG-TS در برابر خطا
MPEG-TS برای محیطهای انتقال طراحی شده است؛
بنابراین از Packetهای مستقل، شمارنده ترتیب و
اطلاعات همگامسازی استفاده میکند.
اگر بخشی از Stream خراب یا گم شود، معمولاً
تنها قسمت کوتاهی از تصویر یا صدا آسیب میبیند
و گیرنده میتواند با Packetهای بعدی پخش را
ادامه دهد.
| قابلیت | نقش |
|---|---|
| Packet ثابت | بازیابی سریع مرز داده |
| Sync Byte | حفظ و بازیابی همگامسازی |
| Continuity Counter | تشخیص Packet گمشده یا تکراری |
| ارسال تکراری PAT و PMT | امکان ورود گیرنده در میانه Stream |
PTS، DTS و PCR
برای هماهنگسازی صدا و تصویر و حفظ زمانبندی
پخش، MPEG-TS از Timestampهای مختلف استفاده
میکند.
| مقدار | نام کامل | وظیفه |
|---|---|---|
| PTS | Presentation Time Stamp | زمان نمایش یا پخش فریم |
| DTS | Decoding Time Stamp | زمان Decode فریم |
| PCR | Program Clock Reference | مرجع ساعت برای همگامسازی گیرنده |
Codecهای رایج در 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
| کاربرد | دلیل استفاده |
|---|---|
| تلویزیون دیجیتال | انتقال چند کانال و اطلاعات سرویس |
| ماهواره | مقاومت در برابر خطای انتقال |
| IPTV | ارسال Stream زنده در شبکه |
| HLS | استفاده تاریخی از قطعههای TS |
| دوربین و Capture | ذخیره پیوسته و مقاومتر در برابر قطع ناگهانی |
| Broadcast Studio | انتقال و توزیع برنامه زنده |
M2TS چیست؟
M2TS نسخهای از MPEG Transport Stream است که
بیشتر در Blu-ray Disc و دوربینهای مبتنی بر
AVCHD استفاده میشود.
Packetهای M2TS معمولاً یک بخش اضافه برای
Timestamp دارند و اندازه آنها نسبت به Packet
استاندارد TS بزرگتر است.
| قالب | اندازه Packet | کاربرد رایج |
|---|---|---|
| MPEG-TS | 188 بایت | Broadcast، IPTV و Streaming |
| M2TS | 192 بایت | Blu-ray و AVCHD |
M2TS در Blu-ray
دیسکهای Blu-ray معمولاً Streamهای اصلی فیلم،
صدا و زیرنویس را داخل فایلهای M2TS نگهداری
میکنند.
یک فایل M2TS میتواند شامل ویدئوی باکیفیت،
چند Track صوتی، زیرنویس تصویری و اطلاعات جانبی
باشد.
| نوع داده | نمونه |
|---|---|
| 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 |
|---|---|---|
| هدف اصلی | انتقال و پخش زنده | ذخیره و توزیع فایل |
| مقاومت در برابر خطا | بالا | کمتر |
| ورود از میانه Stream | مناسب | وابسته به ساختار فایل |
| سربار Container | بیشتر | کمتر |
| Metadata و آرشیو | محدودتر | مناسبتر |
| Broadcast | بسیار مناسب | کاربرد محدودتر |
مقایسه MPEG-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 موردنیاز باشد.
| عملیات | تغییر Codec | افت کیفیت | سرعت |
|---|---|---|---|
| Remux | خیر | ندارد | بسیار سریع |
| Transcode | بله | وابسته به تنظیمات | کندتر |
Remux، Transcode و Re-encode
یکی از رایجترین اشتباهات در دنیای ویدئو،
یکسان دانستن Remux و Transcode است.
این دو فرآیند کاملاً متفاوت هستند و اثر
مستقیمی بر زمان پردازش، کیفیت تصویر، حجم فایل
و مصرف CPU و GPU دارند.
چرا شناخت این سه فرآیند مهم است؟
هنگام تبدیل فایلهای ویدئویی ممکن است تنها
Container تغییر کند یا کل ویدئو دوباره Encode
شود.
تفاوت این دو حالت میتواند چند ثانیه یا چند
ساعت زمان پردازش و همچنین تفاوت قابل توجهی در
کیفیت خروجی ایجاد کند.
Remux چیست؟
در عملیات Remux، Streamهای صوتی، تصویری و
زیرنویس بدون Decode و Encode مجدد، فقط از یک
Container به Container دیگر منتقل میشوند.
Codec، Bitrate، Resolution و کیفیت تصویر
کاملاً بدون تغییر باقی میمانند.
MKV
│
│
▼
Extract Streams
│
▼
MP4
No Re-Encoding
Transcode چیست؟
در عملیات Transcode ابتدا فایل Decode شده و
سپس دوباره توسط یک Codec دیگر Encode میشود.
این فرآیند معمولاً برای کاهش حجم فایل،
تغییر Codec یا افزایش سازگاری انجام میشود.
Decode
│
Raw Frames
│
Encode
│
New 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 ویدئو
Camera / File / Network
│
▼
Capture
│
▼
Demux or Stream Parsing
│
▼
Decode
│
▼
Color Space Conversion
│
▼
Scaling / Deinterlacing
│
▼
Effects / Filtering / AI
│
▼
Encode
│
▼
Mux into Container
│
▼
File / Display / Streaming
وظیفه هر مرحله در 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 شبکه باشد.
| منبع | نوع داده | مرحله اول |
|---|---|---|
| دوربین | تصویر زنده یا 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
آماده میشوند.
Camera / HDMI / Desktop
│
▼
Capture API
│
▼
Frame Buffer
│
▼
Processing or Encoding
انواع 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 نمیشود و کیفیت
تصویر تغییری نمیکند.
MP4 / MKV / MOV
│
▼
Demuxer
┌────┼────────┐
│ │ │
▼ ▼ ▼
Video Audio Subtitle
Stream Stream Stream
تفاوت 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 Decode | Software Decode |
|---|---|---|
| واحد پردازش | موتور اختصاصی GPU | هستههای CPU |
| مصرف انرژی | کمتر | بیشتر |
| مصرف CPU | پایینتر | بالاتر |
| انعطاف Codec | محدود به قابلیت موتور | معمولاً گستردهتر |
| چند Stream همزمان | معمولاً بهتر | وابسته به قدرت CPU |
Frame Buffer در Pipeline
فریمهای Decodeشده باید در RAM یا VRAM نگهداری
شوند تا مراحل بعدی بتوانند آنها را بخوانند.
Codecهای Inter-frame علاوه بر فریم فعلی، چند
Reference Frame را نیز در حافظه نگهداری میکنند.
در پروژههای Multicam، تدوین چندلایه یا پردازش
AI، ممکن است تعداد زیادی 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 را کاهش میدهد.
Compressed Input
│
▼
Hardware Decode
│
▼
Frames in VRAM
│
├──► GPU Effects
│
├──► AI Processing
│
└──► Hardware Encode
No Unnecessary RAM Copy
هزینه انتقال فریم میان RAM و VRAM
اگر یک مرحله روی CPU و مرحله بعدی روی GPU اجرا
شود، ممکن است فریم چندینبار میان RAM و VRAM
جابهجا شود.
در Resolutionهای بالا و چند Stream همزمان،
این انتقال میتواند به گلوگاه مهمی تبدیل شود.
| پیامد | نتیجه |
|---|---|
| مصرف PCI Express | کاهش پهنای باند در دسترس |
| افزایش Latency | تأخیر بیشتر در استریم و Preview |
| مصرف CPU | افزایش مدیریت حافظه و کپی داده |
| افت Throughput | کاهش تعداد Streamهای قابل پردازش |
گلوگاههای مراحل ابتدایی Pipeline
| گلوگاه | نشانه | علت احتمالی |
|---|---|---|
| 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 / YCbCr | RGB |
|---|---|---|
| مؤلفهها | روشنایی و اطلاعات رنگ | قرمز، سبز و آبی |
| کاربرد اصلی | Codec، Broadcast و Video | نمایشگر، رابط کاربری و رندر |
| Chroma Subsampling | رایج | معمولاً وجود ندارد |
| حجم داده | قابل کاهش با 4:2:0 و 4:2:2 | معمولاً بیشتر |
| مناسب تدوین گرافیکی | وابسته به Workflow | بسیار رایج |
مسیر تبدیل YUV به RGB
هنگام پخش یک فایل ویدئویی، Decoder معمولاً فریم را
در قالب YUV تولید میکند. سپس Display Pipeline یا
GPU آن را به RGB مناسب نمایشگر تبدیل میکند.
Compressed Video
│
▼
Decoder
│
▼
YUV / YCbCr Frame
│
▼
Color Matrix Conversion
│
▼
RGB Frame
│
▼
Display Output
اگر ماتریس رنگ، 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 از دامنه گستردهتری استفاده
میکند.
| معیار | Limited Range | Full Range |
|---|---|---|
| کاربرد | Video و Broadcast | رایانه و Graphics |
| سیاه و سفید | در محدوده محدودتر | در کل دامنه قابل استفاده |
| خطر تنظیم اشتباه | سیاهی خاکستری یا تصویر کمکنتراست | ازبینرفتن جزئیات سایه و Highlight |
| استفاده رایج | تلویزیون و فایل ویدئویی | مانیتور و محتوای رایانهای |
خطای Range Mismatch
اگر فایل Limited Range بهعنوان Full Range تفسیر
شود، سایهها بیشازحد تیره و بخشهای روشن بریده
میشوند.
اگر فایل Full Range بهعنوان Limited Range نمایش
داده شود، تصویر خاکستری، کمکنتراست و شستهشده
به نظر میرسد.
| خطا | نشانه ظاهری | نتیجه |
|---|---|---|
| Limited بهعنوان Full | سایههای بسیار تیره | Black Crush و White Clipping |
| Full بهعنوان Limited | سیاهی خاکستری | کاهش Contrast |
Transfer Function چیست؟
Transfer Function رابطه میان مقدار عددی سیگنال
و روشنایی قابل نمایش را تعیین میکند.
محتوای SDR و HDR از منحنیهای متفاوتی استفاده
میکند. برای نمونه، PQ و HLG برای HDR طراحی
شدهاند.
| منحنی | کاربرد | ویژگی |
|---|---|---|
| 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 را که در منبع ثبت نشدهاند
ایجاد نمیکند.
HDR Source
│
▼
Decode HDR Metadata
│
▼
Tone Mapping
│
▼
Color Gamut Mapping
│
▼
SDR Output
Tone Mapping چیست؟
Tone Mapping دامنه روشنایی تصویر را با توان
نمایشگر یا قالب خروجی هماهنگ میکند.
برای مثال، ویدئوی HDR ممکن است نقاط بسیار روشنی
داشته باشد که نمایشگر SDR قادر به نمایش مستقیم
آنها نیست.
الگوریتم Tone Mapping تلاش میکند این اطلاعات را
به محدوده کوچکتر منتقل کند، بدون اینکه تصویر
بیشازحد تاریک یا Highlightها کاملاً سفید شوند.
| هدف | نتیجه |
|---|---|
| حفظ 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 را کاهش دهد.
این روش نویز بسیار کنترلشدهای به تصویر اضافه
میکند تا مرز میان سطوح رنگ کمتر قابل مشاهده باشد.
10-bit Gradient
│
▼
Reduce to 8-bit
│
┌───┴─────────┐
│ │
No Dither Dithering
│ │
▼ ▼
Banding Smoother Gradient
Scaling در Pipeline ویدئو
Scaling به معنی تغییر Resolution تصویر است.
کاهش وضوح Downscaling و افزایش وضوح Upscaling
نامیده میشود.
کیفیت Scaling به الگوریتم، Bit Depth، Chroma،
نوع محتوا و توان واحد پردازشی وابسته است.
Scaling ممکن است توسط Shaderهای GPU، واحد ثابت
Video Processor، نمایشگر یا CPU انجام شود.
| نوع | نمونه | کاربرد |
|---|---|---|
| Downscaling | 4K به 1080p | کاهش حجم و سازگاری |
| Upscaling | 1080p به 4K | تطبیق با نمایشگر یا خروجی |
| Aspect Ratio Scaling | 4:3 به 16:9 | تطبیق قاب تصویر |
| Adaptive Scaling | تولید چند Resolution | Streaming تطبیقی |
الگوریتمهای 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 استفاده میشد تا با پهنای باند محدود،
حرکت روانتری ایجاد شود.
Field 1: Odd Lines
1 ─────────────
3 ─────────────
5 ─────────────
Field 2: Even Lines
2 ─────────────
4 ─────────────
6 ─────────────
Deinterlacing چیست؟
نمایشگرهای جدید Progressive هستند و باید دو Field
ویدئوی Interlaced را به فریم کامل تبدیل کنند.
این عملیات Deinterlacing نام دارد و کیفیت آن
تأثیر مستقیمی بر وضوح و روانی حرکت دارد.
Deinterlacing میتواند توسط Display Engine،
Video Processor، Shaderهای GPU یا CPU انجام شود.
| روش | کیفیت | ویژگی |
|---|---|---|
| Weave | مناسب تصویر ثابت | ترکیب دو Field بدون تحلیل حرکت |
| Bob | متوسط | تبدیل هر Field به فریم مستقل |
| Motion Adaptive | خوب | انتخاب روش بر اساس حرکت |
| Motion Compensated | بسیار بالا | بازسازی بر اساس تخمین حرکت |
| AI Deinterlacing | بالقوه بسیار بالا | بازسازی Field با مدل یادگیری ماشین |
خطاهای رایج Deinterlacing
| خطا | ظاهر | علت |
|---|---|---|
| Combing | لبههای دندانهدار در حرکت | ترکیب Fieldهای متعلق به زمانهای متفاوت |
| Flicker | لرزش خطوط ریز | بازسازی ضعیف Field |
| کاهش وضوح | تصویر نرم یا تار | Bob یا فیلتر ساده |
| Ghosting | رد حرکت | تحلیل نادرست Motion |
کدام واحدها Color Conversion و Scaling را انجام میدهند؟
| عملیات | واحد احتمالی | نکته |
|---|---|---|
| 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 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
Decode
│
▼
Color Conversion
│
▼
Scaling
│
▼
Filtering & Effects
│
▼
AI Processing
│
▼
Encode
انواع 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 تلاش میکنند بدون از بین بردن
جزئیات مهم، نویز را کاهش دهند.
| روش | ویژگی | سرعت |
|---|---|---|
| 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 برای ایجاد حس بصری خاص استفاده
میکنند.
| معیار | Correction | Grading |
|---|---|---|
| هدف | اصلاح تصویر | خلق ظاهر هنری |
| زمان انجام | ابتدای تدوین | پس از اصلاح |
| نمونه | اصلاح White Balance | ظاهر سینمایی گرم یا سرد |
پردازش مبتنی بر هوش مصنوعی
در سالهای اخیر بسیاری از مراحل Pipeline توسط
مدلهای هوش مصنوعی انجام میشوند.
این مدلها میتوانند جزئیات ازدسترفته را بازسازی،
نویز را حذف، چهره را ترمیم یا Resolution را افزایش
دهند.
| عملیات | هدف |
|---|---|
| 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
Processed Frames
│
▼
Motion Estimation
│
▼
Prediction
│
▼
Transform
│
▼
Quantization
│
▼
Entropy Coding
│
▼
Compressed Bitstream
Encoder چه کارهایی انجام میدهد؟
| مرحله | توضیح |
|---|---|
| Motion Estimation | تشخیص حرکت میان Frameها |
| Prediction | پیشبینی بخشهای مشابه تصویر |
| Transform | تبدیل داده برای فشردهسازی |
| Quantization | کاهش دقت داده برای کمشدن حجم |
| Entropy Coding | تولید Bitstream نهایی |
Encode سختافزاری و نرمافزاری
| ویژگی | Hardware | Software |
|---|---|---|
| سرعت | بسیار زیاد | کمتر |
| مصرف CPU | پایین | زیاد |
| کیفیت در Bitrate پایین | معمولاً کمتر | معمولاً بهتر |
| تنظیمات قابل کنترل | محدودتر | بسیار گسترده |
| مناسب برای | Live Streaming | آرشیو و خروجی نهایی |
مرحله Multiplexing یا Mux
خروجی Encoder تنها Stream تصویری است. برای تولید
فایل نهایی باید این Stream همراه با صدا، زیرنویس،
Chapter و Metadata داخل یک Container قرار گیرد.
این عملیات Multiplexing یا به اختصار Mux نام
دارد.
Video Stream ─┐
Audio Stream ─┼──► Muxer ───► MP4 / MKV / MOV
Subtitle ─────┤
Metadata ─────┘
تفاوت Demux و Mux
| معیار | Demux | Mux |
|---|---|---|
| ورودی | Container | Streamهای جداگانه |
| خروجی | Streamها | Container |
| جهت عملیات | جداسازی | ترکیب |
| تغییر Codec | خیر | خیر |
خروجی نهایی Pipeline
پس از عملیات Mux، خروجی میتواند بهصورت فایل،
Stream زنده یا مستقیماً برای نمایش ارسال شود.
| خروجی | نمونه |
|---|---|
| File | MP4، MKV، MOV |
| Streaming | RTMP، HLS، DASH، WebRTC |
| Broadcast | MPEG-TS |
| Display | نمایش مستقیم روی مانیتور |
Pipeline هنگام پخش ویدئو
Storage / Network
│
▼
Demux
│
▼
Decoder
│
▼
Color Conversion
│
▼
Scaling
│
▼
Display Engine
│
▼
Monitor / TV
تفاوت Export و Playback
| معیار | Playback | Export |
|---|---|---|
| Encode | معمولاً ندارد | دارد |
| Mux | ندارد | دارد |
| سرعت | Real-Time | وابسته به پروژه |
| خروجی | نمایش تصویر | فایل یا Stream |
جمعبندی کامل Pipeline ویدئو
Input
│
▼
Capture
│
▼
Demux
│
▼
Decode
│
▼
Color Conversion
│
▼
Scaling
│
▼
Filtering / AI
│
▼
Encode
│
▼
Mux
│
▼
File / Stream / Display
گلوگاههای رایج 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
Compressed Video Bitstream
│
▼
Video Decode Engine
│
▼
Decoded Frames in VRAM
│
┌─────┼───────────────┐
│ │ │
▼ ▼ ▼
Shader Compute AI Units
Effects Processing Enhancement
│ │ │
└─────┴───────┬───────┘
▼
Processed Frame Buffer
│
┌─────────┴─────────┐
│ │
▼ ▼
Video Encode Engine Display Engine
│ │
▼ ▼
Compressed Output Monitor / TV
واحدهای اصلی در پردازش ویدئو
| واحد | وظیفه اصلی | نمونه عملیات |
|---|---|---|
| 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ها را ندارند، اما برای
وظیفه تخصصی خود معمولاً سریعتر و کممصرفتر
هستند.
| ویژگی | نتیجه |
|---|---|
| طراحی تخصصی | سرعت زیاد برای 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ها
نیز افزایش پیدا میکند.
| عملیات | توضیح | فشار سختافزاری |
|---|---|---|
| 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 وابسته هستند.
Previous Frame ─┐
Current Frame ──┼──► GPU Compute ───► Processed Frame
Next Frame ─────┘
Temporal Analysis
نقش 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
| معیار | 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 و همگامسازی نمایشگر را انجام دهد.
| وظیفه | توضیح |
|---|---|
| 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 کاهش مییابد.
Desktop Plane ───────┐
Video Overlay Plane ─┼──► Display Engine ───► Monitor
Cursor Plane ────────┘
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 کند.
Time ─────────────────────────────────────────►
Decode Engine: [Frame 3 Decode]
Shader Cores: [Frame 2 Effects]
Encode Engine: [Frame 1 Encode]
Display Engine: [Previous Frame Output]
پردازش 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 در ویدئو
| گلوگاه | نشانه | علت احتمالی |
|---|---|---|
| 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
ویدئویی را با مصرف انرژی پایین پردازش کند.
معماری عمومی موتورهای ویدئویی
Compressed Bitstream
│
▼
Decode Engine
│
▼
Frame Buffer (VRAM)
│
▼
Processing / Shader
│
▼
Encode Engine
│
▼
Compressed Bitstream
NVIDIA Video Engine
NVIDIA برای Decode از موتور
NVDEC
و برای Encode از
NVENC
استفاده میکند.
این دو موتور از Shaderها مستقل هستند و حتی
هنگام اجرای بازی یا رندر سهبعدی نیز میتوانند
فعال باقی بمانند.
| واحد | وظیفه |
|---|---|
| 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های بیشتری را اضافه کرده است.
| واحد | وظیفه |
|---|---|
| Decode | بازکردن Stream |
| Encode | تولید Stream فشرده |
| Memory Interface | ارتباط با VRAM |
Intel Media Engine و Quick Sync Video
اینتل سالهاست از فناوری
Quick Sync Video
برای Encode و Decode سختافزاری استفاده میکند.
در معماریهای جدید Xe، این قابلیت بخشی از
Media Engine محسوب میشود و در کنار واحدهای
XMX برای پردازش AI فعالیت میکند.
| بخش | وظیفه |
|---|---|
| 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های مدرن، اجرای
موازی چند موتور مستقل است.
Decode Engine
│
▼
Frame Buffer
│
├────────► Shader Effects
│
├────────► AI Processing
│
▼
Encode Engine
│
▼
Output File
(Display Engine works independently)
گلوگاههای موتورهای ویدئویی
| گلوگاه | پیامد |
|---|---|
| ظرفیت 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 معرفی کرده است.
| معماری 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های بیشتری را فراهم کرده است.
| نسل | ویژگی شاخص |
|---|---|
| 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های همزمان و امکانات
پردازشی نیز معمولاً بهبود پیدا میکنند.
New Generation
│
├── Better Quality
├── New Codec
├── Higher Resolution
├── Lower Power
├── More Streams
└── Better HDR Support
نقش 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
Compressed Video
│
▼
Decode Engine
│
▼
Decoded Frames in VRAM
│
┌────┼───────────┐
│ │ │
▼ ▼ ▼
Effects AI Color Processing
│ │ │
└────┴─────┬─────┘
▼
Processed Frames in VRAM
│
┌──────┴──────┐
│ │
▼ ▼
Encode Engine Display Engine
چه دادههایی در 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 را نیز بزرگتر میسازد.
| عامل | اثر |
|---|---|
| Resolution | افزایش تعداد کل پیکسلها |
| Bit Depth | افزایش داده هر مؤلفه رنگ |
| Chroma Sampling | تعیین مقدار اطلاعات رنگی ذخیرهشده |
| Alpha Channel | افزودن مؤلفه شفافیت |
| Internal Format | امکان استفاده از Integer یا Float |
| Alignment | ایجاد Padding برای دسترسی سریعتر |
اثر Resolution بر مصرف VRAM
با دو برابر شدن عرض و ارتفاع تصویر، تعداد کل
پیکسلها تقریباً چهار برابر میشود.
به همین دلیل عبور از 1080p به 4K میتواند
مصرف حافظه Frame Buffer و بسیاری از افکتهای
وابسته را چند برابر کند.
| 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 باید همزمان
در حافظه باقی بمانند.
Video Layer 1 ─┐
Video Layer 2 ─┤
Graphics Layer ┤
Adjustment ────┤
Mask Buffer ───┘
│
▼
Compositing in VRAM
│
▼
Final Frame
مصرف VRAM در پروژههای Multicam
در تدوین Multicam چند Stream باید همزمان
Decode شوند و Frameهای آنها برای Preview،
Switching یا ساخت Proxy در حافظه باقی بمانند.
تعداد دوربینها، Resolution، Codec، Bit Depth
و افکتهای هر زاویه، مصرف VRAM را تعیین میکنند.
| عامل | اثر |
|---|---|
| تعداد 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 نگهداری
کنند.
| افکت | داده موردنیاز | فشار حافظه |
|---|---|---|
| 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های همزمان میتواند مصرف حافظه
را بهسرعت افزایش دهد.
| عامل | اثر |
|---|---|
| Model Size | نگهداری وزنهای بیشتر |
| Input Resolution | افزایش Tensorهای ورودی و میانی |
| Batch Size | پردازش چند Frame بهصورت همزمان |
| Precision | تفاوت میان FP32، FP16 و INT8 |
| Temporal Context | نگهداری چند Frame برای تحلیل زمانی |
تفاوت ظرفیت VRAM و سرعت VRAM
ظرفیت VRAM مشخص میکند چه مقدار داده میتواند
همزمان در حافظه GPU باقی بماند.
پهنای باند حافظه مشخص میکند این دادهها با چه
سرعتی میان GPU و VRAM منتقل شوند.
یک کارت ممکن است VRAM زیادی داشته باشد اما
پهنای باند آن برای پردازش سنگین محدود باشد؛
یا برعکس، حافظه سریعی داشته باشد اما ظرفیت آن
برای پروژه بزرگ کافی نباشد.
| معیار | ظرفیت VRAM | پهنای باند VRAM |
|---|---|---|
| واحد اندازهگیری | GB | GB/s |
| نقش | مقدار داده قابل نگهداری | سرعت انتقال داده |
| کمبود | Eviction و انتقال به RAM | انتظار واحدهای پردازشی |
| کاربرد حساس | 8K، AI و پروژه چندلایه | Filtering، Color و Frameهای بزرگ |
هنگام پرشدن VRAM چه اتفاقی میافتد؟
وقتی دادههای پروژه از ظرفیت VRAM بیشتر شوند،
نرمافزار یا درایور ممکن است بخشی از Bufferها
را به RAM سیستم منتقل کند یا آنها را دوباره
ایجاد نماید.
این فرآیند باعث افزایش Latency و استفاده از
PCI Express میشود و میتواند Timeline را
ناپایدار کند.
VRAM Full
│
▼
Evict Buffers
│
▼
System RAM
│
▼
PCIe Transfer When Needed
│
▼
Higher Latency / Stutter
نشانههای کمبود VRAM
| نشانه | علت احتمالی |
|---|---|
| Stutter ناگهانی Timeline | انتقال Buffer میان VRAM و RAM |
| افت شدید سرعت با فعالشدن افکت | ایجاد Bufferهای موقت بزرگ |
| خطای Out of Memory | نبود فضای کافی برای Allocation جدید |
| کرش نرمافزار یا درایور | شکست مدیریت حافظه یا Allocation |
| کاهش ناگهانی Resolution Preview | تلاش نرمافزار برای کاهش مصرف حافظه |
| افزایش استفاده از RAM | Shared یا Evicted GPU Memory |
Unified Memory در GPUهای مجتمع
در معماریهای مجتمع، CPU و GPU ممکن است از
حافظه فیزیکی مشترک استفاده کنند.
این طراحی میتواند انتقال جداگانه میان RAM و
VRAM را کاهش دهد، اما CPU و GPU برای ظرفیت و
پهنای باند یک حافظه مشترک رقابت میکنند.
| ویژگی | نتیجه |
|---|---|
| فضای آدرس مشترک | کاهش بعضی عملیات Copy |
| ظرفیت مشترک | امکان استفاده انعطافپذیرتر از RAM |
| پهنای باند مشترک | رقابت CPU و GPU برای حافظه |
| نبود VRAM مجزا | وابستگی بیشتر به سرعت RAM |
چه عواملی 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
بیان میشود.
مسیر انتقال داده
VRAM
│
▼
Memory Controller
│
▼
Memory Bus
│
▼
Shader / Compute / AI
│
▼
VRAM
چرا پهنای باند اهمیت دارد؟
هر افکت، هر Shader، هر عملیات AI و حتی Decode
و Encode برای پردازش باید داده را از VRAM
بخوانند و نتیجه را دوباره در VRAM بنویسند.
اگر انتقال داده کند باشد، واحدهای پردازشی
منتظر دریافت اطلاعات میمانند؛ حتی اگر قدرت
محاسباتی بالایی داشته باشند.
چه بخشهایی از پهنای باند استفاده میکنند؟
| بخش | نوع دسترسی | شدت مصرف |
|---|---|---|
| Shader | خواندن و نوشتن Frame | زیاد |
| Compute | دسترسی تصادفی | زیاد |
| AI | Tensor و Buffer | بسیار زیاد |
| Decode | Frame Buffer | متوسط |
| Encode | Encode Surface | متوسط |
| Display Engine | Scanout | کم تا متوسط |
چه عواملی پهنای باند را تعیین میکنند؟
| عامل | اثر |
|---|---|
| Memory Clock | افزایش نرخ انتقال داده |
| Bus Width | افزایش حجم داده در هر سیکل |
| نوع حافظه | GDDR6، GDDR6X، HBM و … |
| تعداد کانال حافظه | افزایش مسیرهای انتقال |
| Compression | کاهش نیاز واقعی به انتقال |
Bus Width چیست؟
Bus Width تعداد بیتهایی است که در هر سیکل
ساعت میان GPU و حافظه منتقل میشود.
هرچه Bus Width بیشتر باشد، در صورت ثابت بودن
سرعت حافظه، پهنای باند نیز افزایش پیدا میکند.
| Bus Width | کاربرد معمول |
|---|---|
| 64-bit | کارتهای اقتصادی |
| 128-bit | رده میانرده |
| 192-bit | میانرده قدرتمند |
| 256-bit | حرفهای |
| 320-bit | رده بالا |
| 384-bit | پرچمدار |
نوع حافظه و اثر آن بر پهنای باند
| نوع | ویژگی | کاربرد |
|---|---|---|
| GDDR5 | نسل قدیمی | کارتهای قدیمی |
| GDDR6 | پهنای باند بالا | اکثر GPUهای امروزی |
| GDDR6X | نرخ انتقال بسیار بالا | کارتهای پرچمدار |
| HBM | پهنای باند بسیار زیاد | HPC و AI |
گلوگاههای ناشی از پهنای باند کم
| وضعیت | نتیجه |
|---|---|
| 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 و سایر واحدها را
دریافت کرده و آنها را به دستورات قابل اجرا
برای تراشههای حافظه تبدیل میکند.
مسیر انتقال داده
Shader / Compute
│
▼
Memory Controller
│
▼
Memory Bus
│
▼
Memory Channels
│
▼
GDDR / HBM Chips
وظایف اصلی Memory Controller
| وظیفه | توضیح |
|---|---|
| Memory Scheduling | زمانبندی درخواستها |
| Read / Write Control | کنترل عملیات خواندن و نوشتن |
| Address Translation | تبدیل آدرس حافظه |
| Channel Distribution | تقسیم بار میان کانالها |
| Error Handling | مدیریت خطاهای حافظه |
| Priority Control | اولویتبندی درخواستها |
Memory Channel چیست؟
حافظه گرافیکی معمولاً از چند کانال مستقل تشکیل
میشود. هر کانال به یک یا چند تراشه حافظه
متصل است و میتواند همزمان با سایر کانالها
انتقال داده انجام دهد.
افزایش تعداد کانالها باعث افزایش پهنای باند
کل سیستم حافظه میشود.
GPU
│
├──── Channel 0 ───► Memory Chip
├──── Channel 1 ───► Memory Chip
├──── Channel 2 ───► Memory Chip
└──── Channel 3 ───► Memory Chip
Bus Width چگونه تشکیل میشود؟
هر کانال حافظه معمولاً عرض ثابتی دارد. مجموع
عرض تمام کانالها Bus Width نهایی GPU را
تشکیل میدهد.
| تعداد کانال | عرض هر کانال | 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 |
جریان درخواستهای حافظه
Shader Request
│
▼
Memory Controller
│
├── Queue
├── Scheduler
├── Arbitration
▼
Memory Channel
│
▼
VRAM
درخواست همزمان چند واحد
در یک 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 و کاهش کارایی شود.
Shader ──────┐
Compute ─────┤
Decode ──────┤
Display ─────┤
▼
Memory Controller
│
▼
VRAM
چرا دو کارت با 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
Shader / Compute Core
│
▼
Register File
│
▼
L0 Cache
│
▼
L1 Cache
│
▼
L2 Cache
│
▼
Memory Controller
│
▼
VRAM
نام و ترتیب دقیق Cacheها در معماریهای مختلف
یکسان نیست، اما هدف کلی آنها کاهش دسترسی
مستقیم به VRAM است.
سطوح اصلی Cache در GPU
| سطح | محل تقریبی | سرعت | ظرفیت |
|---|---|---|---|
| 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 افت میکند.
| ویژگی | نتیجه |
|---|---|
| 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 ارتباط نزدیک دارد
یا منابع آنها بهصورت مشترک مدیریت میشود.
| داده | کاربرد |
|---|---|
| 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 را کاهش دهد و پهنای باند مؤثر
سیستم حافظه را بهتر کند.
Shader Cluster 1 ─┐
Shader Cluster 2 ─┤
Compute Engine ───┤
Copy Engine ──────┤
Video Processing ─┘
│
▼
L2 Cache
│
▼
Memory Controller
│
▼
VRAM
Cache Hit و Cache Miss
اگر داده موردنیاز داخل Cache پیدا شود،
Cache Hit رخ میدهد.
اگر داده در Cache وجود نداشته باشد، GPU باید
آن را از سطح پایینتر یا VRAM دریافت کند که
به آن Cache Miss گفته میشود.
| وضعیت | منبع داده | نتیجه |
|---|---|---|
| Cache Hit | Cache داخلی | Latency کمتر و مصرف پهنای باند پایینتر |
| Cache Miss | Cache پایینتر یا VRAM | انتظار بیشتر و ترافیک حافظه بالاتر |
Locality در پردازش ویدئو
عملکرد Cache به الگوی دسترسی داده وابسته است.
اگر Shader چند بار به دادههای نزدیک یا مشابه
مراجعه کند، احتمال Cache Hit افزایش مییابد.
Spatial Locality به استفاده از دادههای نزدیک
به یکدیگر و Temporal 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 انجام شود.
| عملیات | نوع دسترسی |
|---|---|
| Bilinear Scaling | خواندن چند پیکسل مجاور |
| Bicubic Scaling | Sampling گستردهتر همسایگی |
| LUT | مراجعه مکرر به جدول رنگ |
| Warp و Stabilization | Sampling مختصات غیرخطی |
| Chroma Upsampling | بازسازی مؤلفههای رنگ |
Constant Cache
Constant Cache برای دادههای کوچک و ثابتی
مناسب است که تعداد زیادی Thread به مقدار
یکسان آنها نیاز دارند.
ضرایب Color Matrix، پارامترهای افکت، مقدار
Gamma یا تنظیمات Kernel میتوانند در چنین
حافظهای نگهداری شوند.
اثر Cache بر Filterهای ویدئویی
| 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 وابسته است.
| اثر | نتیجه احتمالی |
|---|---|
| Cache Hit بیشتر | کاهش دسترسی به VRAM |
| ترافیک کمتر حافظه | آزادشدن پهنای باند برای واحدهای دیگر |
| Latency پایینتر | تحویل سریعتر دادههای تکراری |
| Dataset بزرگتر از Cache | ادامه وابستگی به VRAM |
| دسترسی پراکنده | سود محدودتر از Cache |
Cacheهای داخلی Video Engine
موتورهای Decode و Encode ممکن است Bufferها،
SRAMها یا Cacheهای داخلی مخصوص خود داشته
باشند.
این فضاها برای نگهداری دادههای موقت Codec،
Reference Data، Context و نتایج میانی استفاده
میشوند.
جزئیات این Cacheها معمولاً بهصورت کامل در
مشخصات عمومی GPU منتشر نمیشود و میان نسلها
تفاوت دارد.
| داده | کاربرد |
|---|---|
| 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
| عملیات | وظیفه |
|---|---|
| Flush | نوشتن داده تغییرکرده Cache در سطح پایینتر |
| Invalidate | بیاعتبارکردن نسخه قدیمی داده در Cache |
| Barrier | کنترل ترتیب مشاهده عملیات حافظه |
| Fence | اعلام تکمیل عملیات یک Queue یا Engine |
مقایسه Cache و VRAM
| معیار | Cache | VRAM |
|---|---|---|
| ظرفیت | کم | زیاد |
| سرعت | بسیار زیاد | کمتر |
| Latency | پایین | بالاتر |
| وظیفه | نگهداری موقت داده پرتکرار | نگهداری اصلی Frame و Asset |
| مدیریت | بیشتر توسط سختافزار یا Kernel | توسط درایور و نرمافزار |
| جایگزینی یکدیگر | نمیتواند جای VRAM را بگیرد | نمیتواند سرعت Cache را فراهم کند |
گلوگاههای مرتبط با Cache
| مشکل | نشانه | پیامد |
|---|---|---|
| Cache Miss زیاد | افزایش ترافیک VRAM | افت عملکرد |
| Dataset بزرگ | خارجشدن مکرر داده از Cache | کاهش بهرهوری Cache |
| دسترسی پراکنده | Locality ضعیف | استفاده ناکامل از Cache Line |
| Synchronization زیاد | Flush و Barrier مکرر | توقف Pipeline |
| Register Pressure | Spill به حافظه پایینتر | افزایش Latency |
| Cache Thrashing | جایگزینی سریع و مداوم دادهها | Cache Hit پایین |
بهینهسازی استفاده از 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 نگهداری میکند.
هر زمان دادهای در محل مناسب قرار نداشته باشد،
باید میان این دو حافظه منتقل شود.
CPU
│
▼
System RAM
│
│ PCI Express
▼
Discrete GPU
│
▼
VRAM
Upload و Download داده در GPU
انتقال داده از RAM سیستم به VRAM معمولاً
Upload و انتقال از VRAM به RAM معمولاً
Download یا Readback نامیده میشود.
| عملیات | مسیر | نمونه کاربرد |
|---|---|---|
| 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 x1 | 1 | کارتهای جانبی سبک |
| PCIe x4 | 4 | SSD و بعضی GPUهای اقتصادی |
| PCIe x8 | 8 | GPU، Capture و Accelerator |
| PCIe x16 | 16 | کارت گرافیک اصلی |
نسلهای PCI Express
در هر نسل PCIe، نرخ انتقال هر Lane افزایش
پیدا میکند. بنابراین یک اتصال x8 نسل جدید
ممکن است پهنای باندی مشابه یا بیشتر از x16
یک نسل قدیمی داشته باشد.
| نسل | وضعیت نسبی پهنای باند | کاربرد رایج |
|---|---|---|
| PCIe 3.0 | مبنای سیستمهای قدیمیتر | GPU و SSD نسل قبل |
| PCIe 4.0 | تقریباً دو برابر نسل قبل | سیستمهای مدرن |
| PCIe 5.0 | تقریباً دو برابر PCIe 4.0 | Workstation و Storage سریع |
| PCIe 6.0 و جدیدتر | پهنای باند بسیار بالاتر | Server، AI و زیرساخت حرفهای |
سرعت واقعی اتصال چگونه تعیین میشود؟
سرعت نهایی PCIe بر اساس پایینترین قابلیت
مشترک میان CPU، مادربرد، اسلات و کارت گرافیک
تعیین میشود.
برای مثال، قرار دادن کارت PCIe 4.0 در اسلات
PCIe 3.0 باعث میشود لینک با سرعت نسل سوم
فعالیت کند.
| عامل | اثر |
|---|---|
| نسل CPU | تعیین بیشترین استاندارد پشتیبانیشده |
| طراحی مادربرد | تعیین نسل و تعداد Lane اسلات |
| نوع GPU | تعیین حداکثر سرعت و Lane قابل استفاده |
| تقسیم Laneها | امکان کاهش x16 به x8 |
| Riser یا Extender | امکان کاهش پایداری یا نسل لینک |
تفاوت پهنای باند PCIe و VRAM
پهنای باند داخلی میان GPU و VRAM معمولاً بسیار
بیشتر از پهنای باند PCIe است.
به همین دلیل نرمافزارها تلاش میکنند Frameها
و دادههای فعال را تا حد امکان داخل VRAM
نگهداری کنند.
| مسیر | وظیفه | سرعت نسبی |
|---|---|---|
| PCI Express | ارتباط CPU، RAM و GPU | کمتر |
| Memory Bus | ارتباط GPU با VRAM | بسیار بیشتر |
| Cache Fabric | ارتباط داخلی Cacheها و Coreها | بسیار سریع |
DMA چیست؟
DMA مخفف
Direct Memory Access
است و به یک دستگاه اجازه میدهد بدون دخالت
مستقیم CPU در انتقال تکتک دادهها، اطلاعات
را میان حافظهها جابهجا کند.
GPU و کارتهای Capture میتوانند با استفاده
از DMA داده را به Bufferهای حافظه منتقل کنند
و CPU تنها عملیات را تنظیم و کنترل کند.
CPU
│
└──► Configure Transfer
│
▼
DMA / Copy Engine
┌────┴────┐
│ │
▼ ▼
System RAM VRAM
نقش Copy Engine در انتقال داده
Copy Engine واحدی در GPU است که عملیات انتقال
Buffer را مستقل از Shader Coreها انجام میدهد.
این واحد میتواند همزمان با Compute، Decode
یا Encode فعالیت کند؛ البته همه این عملیات
همچنان برای دسترسی به حافظه و PCIe رقابت
میکنند.
| عملیات | مسیر |
|---|---|
| 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 میتواند
حافظه در دسترس سیستمعامل و برنامههای دیگر
را کاهش دهد.
| معیار | Pageable Memory | Pinned Memory |
|---|---|---|
| جابهجایی توسط سیستمعامل | امکانپذیر | محدود یا غیرفعال |
| مناسب DMA | نیازمند مرحله اضافی احتمالی | مناسبتر |
| سرعت انتقال GPU | معمولاً کمتر | معمولاً بیشتر |
| هزینه تخصیص | کمتر | بیشتر |
Staging Buffer چیست؟
گاهی داده نمیتواند مستقیماً از حافظه برنامه
به VRAM منتقل شود و ابتدا در یک Buffer میانی
قرار میگیرد.
این Buffer میانی Staging Buffer نام دارد و
برای تطبیق فرمت حافظه، Alignment یا نوع دسترسی
استفاده میشود.
Application Memory
│
▼
Staging Buffer
│
▼
DMA Transfer
│
▼
VRAM
وجود Staging Buffer ممکن است یک کپی اضافی
ایجاد کند، اما در بسیاری از APIها برای انتقال
ایمن و سازگار ضروری است.
انتقال Synchronous
در انتقال Synchronous، برنامه تا پایان عملیات
کپی منتظر میماند.
این روش ساده است، اما میتواند CPU یا GPU را
بدون انجام کار مفید متوقف نگه دارد.
CPU Submit Copy
│
▼
Wait for Transfer
│
▼
Continue Processing
انتقال Asynchronous
در انتقال Asynchronous، Copy Engine داده را
جابهجا میکند و CPU یا سایر موتورهای GPU
میتوانند همزمان کار دیگری انجام دهند.
این روش برای Pipelineهای Real-Time و چند
Stream بسیار مهم است.
Time ───────────────────────────────────────►
Copy Engine: [Upload Frame 2]
GPU Compute: [Process Frame 1]
CPU: [Prepare Frame 3]
Double Buffering و Pipeline انتقال
با استفاده از چند Buffer میتوان همزمان یک
Frame را منتقل، Frame قبلی را پردازش و Frame
بعدی را آماده کرد.
این روش باعث کاهش زمان انتظار میان مراحل
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 را
استفاده کنند.
Compressed Input
│
▼
Hardware Decoder
│
▼
GPU Video Surface
│
┌────┼───────────┐
│ │ │
▼ ▼ ▼
Color Effects AI Processing
│ │ │
└────┴─────┬─────┘
▼
Hardware Encoder
│
▼
Compressed Output
Pipeline دارای Copyهای غیرضروری
اگر Decode روی CPU، افکت روی GPU و Encode
دوباره روی CPU انجام شود، Frame ممکن است
چند بار میان RAM و VRAM جابهجا شود.
CPU Decode
│
▼
System RAM
│
▼
Upload through PCIe
│
▼
GPU Effects in VRAM
│
▼
Download through PCIe
│
▼
System RAM
│
▼
CPU Encode
این مسیر Latency، مصرف حافظه و ترافیک PCIe
بیشتری ایجاد میکند.
Interop میان APIها
مراحل مختلف Pipeline ممکن است از APIهای
متفاوت مانند CUDA، OpenCL، Vulkan، Direct3D،
OpenGL، VA-API یا VideoToolbox استفاده کنند.
Interop اجازه میدهد یک Buffer یا Surface
بدون کپی کامل میان این APIها به اشتراک گذاشته
شود.
| مرحله اول | مرحله دوم | هدف |
|---|---|---|
| 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 است.
Capture Card / NIC / Storage
│
▼
Direct DMA Path
│
▼
VRAM
│
▼
GPU Processing
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 | VRAM مستقل | RAM مشترک |
| انتقال CPU به GPU | معمولاً از طریق PCIe | ممکن است بدون انتقال فیزیکی مجزا |
| پهنای باند | معمولاً بالاتر در VRAM | مشترک با CPU |
| ظرفیت حافظه | محدود به VRAM کارت | وابسته به RAM سیستم |
| رقابت حافظه | کمتر با CPU | بیشتر میان CPU و GPU |
Latency انتقال داده
پهنای باند تنها معیار عملکرد انتقال نیست.
شروع هر عملیات Copy نیز هزینه زمانی دارد.
انتقال تعداد زیادی Buffer کوچک ممکن است حتی
با حجم کل پایین، به دلیل Overhead و
Synchronization کندتر از انتقال یک Buffer بزرگ
باشد.
| عامل | اثر |
|---|---|
| اندازه Buffer | Buffer کوچکتر معمولاً سربار نسبی بیشتری دارد |
| تعداد Transfer | افزایش Command و Synchronization |
| نوع حافظه میزبان | Pinned یا Pageable بودن |
| وضعیت PCIe | نسل، Lane و اشتراک مسیر |
| Queue Synchronization | انتظار میان Copy و Compute |
| NUMA Placement | فاصله CPU و دستگاه در Workstation و Server |
رقابت برای پهنای باند PCIe
ممکن است چند دستگاه یا چند موتور همزمان از
مسیر PCIe استفاده کنند.
کارت Capture، SSD، GPU دوم و تجهیزات شبکه
میتوانند برای Laneها یا مسیرهای مشترک چیپست
رقابت ایجاد کنند.
GPU ──────────┐
Capture Card ─┤
NVMe SSD ─────┤
Network Card ─┘
│
▼
PCIe Root Complex / Chipset
│
▼
CPU and System Memory
نشانههای گلوگاه انتقال CPU و GPU
| نشانه | علت احتمالی |
|---|---|
| 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 بالای استریم | کپیهای متوالی میان مراحل |
روشهای بهینهسازی انتقال داده
| روش | نتیجه |
|---|---|
| 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
Compressed Video
│
▼
Video Decoder
│
▼
Video Surface
│
▼
Compute / Shader
│
▼
AI Processing
│
▼
Color Processing
│
▼
Video Encoder
│
▼
Compressed Output
مراحل اصلی Pipeline
| مرحله | وظیفه | خروجی |
|---|---|---|
| Decode | تبدیل Bitstream به Frame | Surface |
| Color Convert | تبدیل فضای رنگ | RGB / YUV |
| Compute | اجرای افکتها | Frame جدید |
| AI | Denoise، Upscale و… | Frame بهبود یافته |
| Encode | فشردهسازی خروجی | Bitstream |
اجرای همزمان مراحل Pipeline
در GPU مدرن، مراحل مختلف میتوانند بهصورت
همزمان روی Frameهای متفاوت اجرا شوند.
Time ─────────────────────────────►
Frame 1 : Decode → Compute → Encode
Frame 2 : Decode → Compute → Encode
Frame 3 : Decode → Compute → Encode
همگامسازی (Synchronization) در GPU
GPU دهها یا حتی صدها واحد پردازشی دارد که
همزمان روی دادههای مختلف کار میکنند. برای
جلوگیری از خواندن داده ناقص، نوشتن همزمان روی
یک Buffer یا اجرای نادرست مراحل Pipeline،
لازم است ترتیب اجرای عملیات کنترل شود. این
وظیفه را مکانیزمهای Synchronization بر عهده
دارند.
Synchronization چیست؟
Synchronization مجموعهای از مکانیزمها برای
هماهنگکردن ترتیب اجرای عملیات میان CPU،
موتورهای مختلف GPU و Threadهای پردازشی است.
هدف اصلی آن جلوگیری از استفاده از دادهای است
که هنوز تولید نشده یا هنوز در حافظه نوشته
نشده است.
چرا Synchronization لازم است؟
فرض کنید Decode هنوز در حال تولید Frame است،
اما Shader بخواهد همان Frame را پردازش کند.
اگر هماهنگی وجود نداشته باشد، Shader داده
ناقص یا نامعتبر دریافت خواهد کرد.
Decoder
│
│ (Writing Frame)
▼
Video Surface
▲
│
Shader
(Read Too Early)
انواع همگامسازی
| نوع | هدف | مثال |
|---|---|---|
| CPU ↔ GPU | هماهنگی پردازنده و GPU | پایان Render |
| GPU ↔ GPU | هماهنگی Engineها | Decode → Compute |
| Thread | هماهنگی Threadها | Shared Memory |
| Memory | ترتیب مشاهده داده | Barrier |
Fence
Fence شیئی برای اطلاع از پایان یک عملیات
پردازشی است.
CPU یا Queue دیگر میتواند منتظر بماند تا Fence
سیگنال پایان عملیات را دریافت کند.
GPU Queue
│
▼
Execute Commands
│
▼
Signal Fence
│
▼
CPU Continues
Barrier
Barrier ترتیب دسترسی به حافظه را کنترل میکند.
قبل از اینکه مرحله بعدی داده را بخواند،
Barrier اطمینان حاصل میکند که تمام عملیات
نوشتن قبلی کامل شدهاند.
| وضعیت | نقش Barrier |
|---|---|
| Compute → Compute | تکمیل نوشتن Buffer |
| Compute → Encode | آماده بودن Frame |
| Copy → Shader | پایان انتقال داده |
| Render → Display | جلوگیری از نمایش Frame ناقص |
Semaphore
Semaphore برای هماهنگی میان Queueها یا Engineهای
مختلف GPU استفاده میشود.
یک Queue میتواند تا زمان دریافت سیگنال از
Queue دیگر منتظر بماند.
Queue A
│
Finish Compute
│
Signal Semaphore
│
──────────────►
Queue B
│
Wait Semaphore
│
▼
Start Encode
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های موازی است.
Queue A
Wait Queue B
Queue B
Wait Queue A
Result:
Deadlock
هزینه Synchronization
همگامسازی برای صحت اجرای برنامه ضروری است،
اما استفاده بیشازحد از آن میتواند باعث
توقف Pipeline و کاهش کارایی شود.
| علت | نتیجه |
|---|---|
| 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
ارسال میشوند.
مسیر حرکت دستورات
Application
│
▼
Graphics / Compute API
│
▼
Command Buffer
│
▼
Command Queue
│
▼
GPU Scheduler
│
▼
GPU Engines
Command Buffer چیست؟
Command Buffer مجموعهای از فرمانهایی است
که CPU یا Driver برای GPU آماده میکند.
این فرمانها میتوانند شامل اجرای Shader،
انتقال Buffer، Decode، Encode، رسم تصویر،
تغییر وضعیت Pipeline یا عملیات دیگر باشند.
| فرمان | وظیفه |
|---|---|
| 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
| ویژگی | Command Buffer | Command Queue |
|---|---|---|
| وظیفه | نگهداری فرمانها | صف اجرای فرمانها |
| ایجاد توسط | CPU یا Driver | Driver یا Runtime |
| قابلیت اجرا | خیر | بله |
| ترتیب | مجموعه دستور | ترتیب اجرای Bufferها |
چند Command Queue
بسیاری از GPUهای مدرن چند Queue مستقل دارند
تا عملیات مختلف بتوانند بهصورت همزمان اجرا
شوند.
Graphics Queue
│
Compute Queue
│
Copy Queue
│
Video Queue
│
▼
GPU Scheduler
انواع Queue
| Queue | کاربرد |
|---|---|
| Graphics | Render |
| Compute | Compute Shader |
| Copy | انتقال Buffer |
| Video Decode | Decode Engine |
| Video Encode | Encode Engine |
Recording Command Buffer
برنامه ابتدا Command Buffer را ضبط یا Record
میکند.
در این مرحله هیچ پردازشی انجام نمیشود و فقط
فهرست دستورات آماده میشود.
Record Commands
│
▼
Command Buffer
│
Submit
▼
Command Queue
│
Execute
▼
GPU
Submit چیست؟
پس از آماده شدن Command Buffer، برنامه آن را
به Queue ارسال میکند. این عملیات Submit
نام دارد.
Submit به معنی اجرای فوری نیست؛ بلکه Buffer
وارد صف انتظار میشود.
ترتیب اجرای فرمانها
Scheduler معمولاً ترتیب داخل هر Command Buffer
را حفظ میکند، اما ممکن است اجرای Queueهای
مختلف را بر اساس منابع موجود مدیریت کند.
وابستگی میان فرمانها
بعضی فرمانها تنها پس از پایان فرمان قبلی
قابل اجرا هستند.
Copy Buffer
│
▼
Decode
│
▼
Compute
│
▼
Encode
Queue خالی
اگر Queue هیچ فرمانی نداشته باشد، بخشی از GPU
بیکار خواهد ماند.
طراحی مناسب Pipeline تلاش میکند Queueها تا
حد امکان پر باقی بمانند تا استفاده از GPU
افزایش یابد.
چرخه عمر Command Buffer
Create
│
Record
│
Submit
│
Execute
│
Complete
│
Reset / Destroy
مزایای 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 مناسب ارسال
شود.
مسیر زمانبندی دستورات
Application
│
▼
Graphics / Compute API
│
▼
Driver Queue
│
▼
GPU Scheduler
│
├──► Graphics Engine
├──► Compute Engine
├──► Copy Engine
├──► Video Decode Engine
└──► Video 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 اجازه میدهد
چند نوع عملیات را با استقلال بیشتری مدیریت
و اجرا کند.
Graphics Hardware Queue ──► Graphics Engine
Compute Hardware Queue ───► Compute Engine
Copy Hardware Queue ───────► Copy Engine
Decode Hardware Queue ─────► Video Decoder
Encode Hardware Queue ─────► Video Encoder
تفاوت Software Queue و Hardware 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
دیگری را آغاز کند.
در این فرآیند، بخشی از وضعیت قبلی باید ذخیره
و وضعیت جدید بارگذاری شود.
Application A
│
▼
Save GPU Context A
│
▼
Load GPU Context B
│
▼
Application B
Context Switch برای اجرای چند برنامه ضروری
است، اما اگر بیشازحد تکرار شود میتواند
Latency و سربار ایجاد کند.
Preemption چیست؟
Preemption به Scheduler اجازه میدهد اجرای
یک Workload را موقتاً متوقف کند تا وظیفهای
با اولویت بالاتر اجرا شود.
برای مثال، سیستم ممکن است پردازش طولانی
Compute را متوقف کند تا رابط کاربری یا Frame
نمایشگر با تأخیر مواجه نشود.
| وضعیت | 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
سریعتر میتواند میان وظایف جابهجا شود؛ اما
پیادهسازی و ذخیره وضعیت پیچیدهتر خواهد بود.
| سطح | محل توقف | Latency واکنش |
|---|---|---|
| Command Level | پایان یک Command | زیاد |
| Draw / Dispatch Level | پایان Draw یا Dispatch | متوسط |
| Thread Group Level | پایان یک Work Group | کمتر |
| Instruction Level | نزدیک سطح دستور | بسیار کم |
اولویت Queueها
Queueها میتوانند اولویتهای متفاوتی داشته
باشند.
عملیات Real-Time مانند پخش ویدئو، Capture،
رابط کاربری یا پردازش صدا ممکن است نسبت به
Export پسزمینه اولویت بیشتری دریافت کنند.
| 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های پراولویت، زمان
اجرای کافی دریافت نکند.
High Priority Queue ─► Execute
High Priority Queue ─► Execute
High Priority Queue ─► Execute
Low Priority Queue ─► Waiting...
Schedulerهای مناسب معمولاً از مکانیزمهایی
برای جلوگیری از Starvation استفاده میکنند.
Round-Robin Scheduling
در روش Round-Robin، هر Queue یا Context برای
مدت محدودی فرصت اجرا دریافت میکند و سپس نوبت
به Queue بعدی میرسد.
این روش Fairness مناسبی ایجاد میکند، اما ممکن
است برای Workloadهای Real-Time نیاز به Priority
اضافی داشته باشد.
Queue A ─► Time Slice
Queue B ─► Time Slice
Queue C ─► Time Slice
Queue A ─► Time Slice
...
Time Slice چیست؟
Time Slice بازه زمانی مشخصی است که Scheduler
برای اجرای یک Context یا Queue در نظر میگیرد.
Time Slice بسیار کوتاه باعث افزایش Context
Switch میشود و Time Slice بسیار بلند ممکن
است Latency برنامههای دیگر را افزایش دهد.
| Time Slice | مزیت | محدودیت |
|---|---|---|
| کوتاه | پاسخگویی بهتر | Context Switch بیشتر |
| متوسط | تعادل Latency و Throughput | نیازمند تنظیم مناسب |
| بلند | Throughput بیشتر برای یک Workload | تأخیر Queueهای دیگر |
Queue Depth
Queue Depth تعداد Work Itemها یا Command
Bufferهایی است که در صف انتظار قرار دارند.
Queue بسیار خالی باعث بیکار ماندن Engine میشود،
اما Queue بسیار عمیق میتواند Latency را افزایش
دهد.
| وضعیت | نتیجه |
|---|---|
| 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های سازگار را
همزمان روی آنها اجرا کند.
Time ───────────────────────────────────────►
Decode Engine : [Decode Frame 4]
Copy Engine : [Upload LUT]
Compute Engine: [Process Frame 3]
Encode Engine : [Encode Frame 2]
Display Engine: [Show Frame 1]
زمانبندی وابسته به Dependency
Scheduler نمیتواند فقط بر اساس خالیبودن
Engine تصمیم بگیرد؛ وابستگی دادهها نیز باید
رعایت شود.
برای مثال، Encode یک Frame تنها زمانی آغاز
میشود که پردازش Compute همان Frame کامل شده
باشد.
Decode Frame
│
▼
Signal Semaphore
│
▼
Compute Frame
│
▼
Signal Semaphore
│
▼
Encode Frame
گلوگاههای مربوط به Scheduler
| مشکل | نشانه | پیامد |
|---|---|---|
| Queue خالی | Utilization پایین | بیکارشدن Engine |
| Queue بسیار عمیق | تأخیر زیاد | افزایش Latency |
| Context Switch زیاد | نوسان عملکرد | سربار Scheduler |
| Priority نامناسب | افت Frame یا کندی رابط | اجرای دیرهنگام کار حیاتی |
| Starvation | پیشرفتنکردن Queue | توقف Workload کماولویت |
| Dependency زیاد | Engineهای منتظر | کاهش Parallelism |
| Preemption ضعیف | تأخیر رابط کاربری | واکنش کند سیستم |
بهینهسازی زمانبندی GPU
| راهکار | نتیجه |
|---|---|
| پر نگهداشتن 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، عملیات مستقل یا
بخشهایی از آنها میتوانند در بازههای زمانی
مشترک اجرا شوند.
Serial Execution
Graphics : [ Graphics Work ]
Compute : [ Compute Work ]
Copy : [ Copy Work ]
Asynchronous Execution
Graphics : [ Graphics Work ]
Compute : [ Compute Work ]
Copy : [ Copy Work ]
چه زمانی اجرای واقعاً موازی رخ میدهد؟
قرارگرفتن چند Command در Queueهای متفاوت
بهتنهایی تضمین نمیکند که آنها واقعاً
همزمان اجرا شوند.
اجرای واقعی موازی به وجود Engineهای مستقل،
منابع آزاد، نبود وابستگی مستقیم و پشتیبانی
Scheduler و Driver بستگی دارد.
| شرط | دلیل |
|---|---|
| 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.
Video Decode Engine ───► Decode Frame 4
Copy Engine ───────────► Upload LUT
Compute Engine ────────► Process Frame 3
Video Encode Engine ───► Encode Frame 2
Display Engine ────────► Display Frame 1
استقلال Engineها
برخی Engineها مدارهای کاملاً جداگانهای دارند،
اما همچنان ممکن است از منابع مشترکی مانند
VRAM، L2 Cache، Memory Controller و PCIe
استفاده کنند.
بنابراین مستقلبودن Engine به معنی مستقلبودن
کامل همه منابع سیستم نیست.
| منبع | وضعیت معمول | پیامد |
|---|---|---|
| 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 فضای
کافی برای اجرای همزمان نخواهد داشت.
Shader Resources
┌──────────────────────────────────┐
│ Graphics Work │ Compute Work │
│ Graphics Work │ Compute Work │
│ Graphics Work │ Available Space │
└──────────────────────────────────┘
مزایای Asynchronous Compute
| مزیت | نتیجه |
|---|---|
| استفاده از منابع آزاد | افزایش GPU Utilization |
| پنهانکردن Latency | انجام کار دیگر هنگام انتظار یک مرحله |
| افزایش Throughput | پردازش Frameهای بیشتر در زمان یکسان |
| کاهش زمان بیکاری Engine | استفاده بهتر از سختافزار |
| مناسب Pipeline ویدئو | همزمانی Decode، Effect و Encode |
محدودیتهای Asynchronous Compute
اجرای همزمان همیشه باعث افزایش سرعت نمیشود.
اگر Workloadها برای یک منبع مشترک رقابت کنند،
ممکن است عملکرد هر دو کاهش یابد.
| محدودیت | اثر |
|---|---|
| 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 مستقل منتظر خواهد ماند.
| منبع | اثر مصرف زیاد |
|---|---|
| Register | کاهش Threadها و Kernelهای Resident |
| Shared Memory | کاهش Work Groupهای همزمان |
| Wave / Warp Slot | محدودشدن Workload دوم |
| Cache | افزایش Cache Thrashing |
| Memory Bandwidth | کاهش Throughput هر دو Workload |
مثال اجرای Asynchronous در Pipeline ویدئو
در یک Transcode سختافزاری، چند Frame میتوانند
همزمان در مراحل مختلف Pipeline قرار داشته
باشند.
Time ─────────────────────────────────────────────►
Frame 1 : Decode → Color → Denoise → Encode
Frame 2 : Decode → Color → Denoise → Encode
Frame 3 : Decode → Color → Denoise → Encode
Frame 4 : Decode → Color → Denoise
همپوشانی Copy و Compute
Copy Engine میتواند Frame بعدی را Upload کند،
در حالی که Compute Engine Frame فعلی را
پردازش میکند.
برای این کار معمولاً از چند Buffer و انتقال
Asynchronous استفاده میشود.
Time ───────────────────────────────────────►
Copy Engine : [Upload Frame 2] [Upload Frame 3]
Compute : [Process Frame 1] [Process Frame 2]
Encode : [Encode Frame 1]
Double Buffering و Triple Buffering
استفاده از چند Buffer اجازه میدهد یک Buffer
در حال انتقال، Buffer دیگر در حال پردازش و
Buffer سوم در حال آمادهسازی یا نمایش باشد.
| Buffer | وضعیت نمونه |
|---|---|
| Buffer A | در حال پردازش Compute |
| Buffer B | در حال Upload یا Decode |
| Buffer C | در حال Encode یا Display |
Pipeline Bubble چیست؟
Pipeline Bubble بازهای است که یک یا چند Engine
به دلیل نبود Workload آماده یا انتظار برای
داده بیکار میمانند.
Decode : [Frame 1] [Frame 2] [Frame 3]
Compute : [Frame 1] [Wait] [Frame 2]
Encode : [Frame 1]
▲
Pipeline Bubble
Queue خالی، Synchronization، انتقال کند و
Dependency میتوانند Pipeline Bubble ایجاد
کنند.
موازیسازی ظاهری
ممکن است ابزار Profiler چند Queue فعال نشان
دهد، اما Workloadها عملاً بهصورت نوبتی اجرا
شوند.
این حالت زمانی رخ میدهد که Queueها از Engine
مشترک استفاده کنند یا برای یک منبع اشباعشده
رقابت داشته باشند.
| علت | نتیجه |
|---|---|
| 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 را افزایش دهند.
| کاربرد | هدف اصلی | تنظیم مناسب |
|---|---|---|
| Live Streaming | Latency پایین | Queue کوتاه و Buffer محدود |
| Offline Export | Throughput بالا | Queue عمیقتر و Parallelism بیشتر |
| Interactive Preview | پاسخگویی | Priority بالا و Preemption مناسب |
| Batch Transcode | بیشترین تعداد Frame در ثانیه | چند Stream و Buffer موازی |
گلوگاههای اجرای Asynchronous
| گلوگاه | نشانه | پیامد |
|---|---|---|
| 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ها کار میکنند.
Decoder
│
▼
Video Surface
│
▼
AI / Compute
│
▼
Encoder
Texture چیست؟
Texture نوعی ساختار حافظه است که برای دسترسی سریع
دوبعدی یا سهبعدی به دادهها طراحی شده است.
Texture تنها برای تصاویر رنگی نیست و میتواند شامل
دادههای عمق، حجم، نویز، LUT یا هر آرایه دوبعدی
دیگری باشد.
Render Target چیست؟
Render Target حافظهای است که خروجی عملیات Render
مستقیماً در آن نوشته میشود.
پس از پایان Render، همین تصویر میتواند به Texture،
Frame Buffer یا تصویر نهایی نمایشگر تبدیل شود.
مسیر حرکت Frame
Compressed Video
│
▼
Video Decoder
│
▼
Video Surface
│
▼
Texture
│
▼
Render Target
│
▼
Frame Buffer
│
▼
Display
مقایسه ساختارهای حافظه
| ساختار | کاربرد | خواندن | نوشتن |
|---|---|---|---|
| Video Surface | پردازش ویدئو | بله | بله |
| Texture | Sampling | بسیار سریع | محدود |
| Render Target | خروجی Render | گاهی | بله |
| Frame Buffer | تصویر نهایی | بله | بله |
چند Frame Buffer
برای جلوگیری از توقف Pipeline معمولاً بیش از یک
Frame Buffer وجود دارد.
Buffer A → Display
Buffer B → Rendering
در سیستمهای Real-Time معمولاً از Double Buffering یا
Triple Buffering استفاده میشود.
Layout حافظه تصویر
دادههای تصویر همیشه به صورت خطی ذخیره نمیشوند.
بسیاری از GPUها از Tile Layout یا Block Layout
استفاده میکنند تا دسترسی Cache سریعتر شود.
Linear
□□□□□□□□□□□□
Tiled
■■ ■■ ■■
■■ ■■ ■■
■■ ■■ ■■
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 | کاربرد |
|---|---|
| Linear | CPU ،DMA ،فایلها |
| Pitched | Alignment سطرها |
| Tiled | Render و Texture |
| Block Linear | GPUهای مدرن NVIDIA |
| Swizzled | Texture Cache |
| Morton (Z-order) | Locality بالا |
تصویر و حافظه
Image
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 M N O P
Linear Layout
در این Layout تمام Pixelها دقیقاً پشت سر هم
ذخیره میشوند.
سادهترین Layout است و معمولاً توسط CPU، فایلهای
تصویری و انتقال DMA استفاده میشود.
Row 0
A B C D
↓
Row 1
E F G H
↓
Memory
A B C D E F G H
مزایا و محدودیتهای Linear Layout
| ویژگی | وضعیت |
|---|---|
| سادگی | بسیار زیاد |
| مناسب CPU | بله |
| مناسب Cache GPU | معمولاً خیر |
| سرعت Texture Sampling | کمتر از Layoutهای Tiled |
پیشنیازهای فصل
- آشنایی با Pixel و Byte
- شناخت Linear Layout
- درک مقدماتی حافظه و Alignment
در این فصل یاد میگیرید
- Pitch و Stride چه تفاوتی دارند
- چرا میان سطرهای تصویر Padding ایجاد میشود
- چگونه آدرس یک Pixel در حافظه محاسبه میشود
- چرا فرض فشردهبودن سطرها خطرناک است
Pitch چیست؟
Pitch تعداد Byteهایی است که از ابتدای یک سطر تصویر تا
ابتدای سطر بعدی در حافظه فاصله وجود دارد.
این مقدار ممکن است دقیقاً برابر اندازه واقعی دادههای
یک سطر باشد، اما در بسیاری از Bufferهای GPU بزرگتر است.
Stride چیست؟
Stride نیز معمولاً به فاصله میان دو عنصر متوالی در حافظه
اشاره دارد.
در پردازش تصویر، اصطلاح Row Stride اغلب همان مفهومی را
بیان میکند که Pitch بیان میکند؛ یعنی فاصله میان شروع
دو سطر متوالی.
بااینحال، Stride میتواند برای فاصله میان Pixelها،
Channelها، Planeها یا عناصر یک Tensor نیز استفاده شود.
تفاوت Pitch و Stride
| معیار | Pitch | Stride |
|---|---|---|
| کاربرد رایج | فاصله میان سطرهای تصویر | فاصله میان عناصر یا سطرها |
| واحد | معمولاً Byte | Byte یا تعداد عنصر |
| حوزه استفاده | APIهای گرافیکی و ویدئویی | تصویر، Tensor و آرایه |
| هممعنی بودن | در بسیاری از APIها بله | وابسته به Context |
اندازه واقعی داده یک سطر
در یک تصویر Packed، اندازه خام یک سطر از حاصلضرب عرض
تصویر در تعداد Byteهای هر Pixel بهدست میآید.
Raw Row Size = Width × Bytes Per Pixel
برای نمونه، در تصویر RGBA هشتبیتی هر Pixel چهار Byte
دارد.
Width = 1920 Pixels
Bytes Per Pixel = 4
Raw Row Size = 1920 × 4
= 7680 Bytes
Padding میان سطرها
GPU یا Driver ممکن است چند Byte اضافی در انتهای هر سطر
قرار دهد تا ابتدای سطر بعدی با مرز حافظه مناسب همتراز
شود.
این Byteهای اضافی Padding نام دارند و بخشی از داده
قابلمشاهده تصویر نیستند.
Row 0
[ Pixel Data ][ Padding ]
Row 1
[ Pixel Data ][ Padding ]
Row 2
[ Pixel Data ][ Padding ]
Row Alignment چیست؟
Alignment مشخص میکند شروع یک سطر باید روی مضربی از چه
تعداد Byte قرار گیرد.
برای مثال، اگر Alignment برابر 256 Byte باشد، Pitch باید
مضربی از 256 باشد.
| 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 گرد میشود.
Pitch = AlignUp(Raw Row Size, Alignment)
فرض کنید اندازه خام سطر 1000 Byte و Alignment برابر
256 Byte باشد.
Raw Row Size = 1000 Bytes
Alignment = 256 Bytes
Multiples of 256:
768
1024
1280
Pitch = 1024 Bytes
Padding = 24 Bytes
نمایش حافظهای Pitch
Address 0
┌───────────────────────────────┬─────────┐
│ Row 0 Pixel Data │ Padding │
└───────────────────────────────┴─────────┘
Address = Pitch
┌───────────────────────────────┬─────────┐
│ Row 1 Pixel Data │ Padding │
└───────────────────────────────┴─────────┘
Address = Pitch × 2
┌───────────────────────────────┬─────────┐
│ Row 2 Pixel Data │ Padding │
└───────────────────────────────┴─────────┘
محاسبه آدرس یک Pixel
برای یافتن آدرس Pixel با مختصات x و y، باید Pitch واقعی
Buffer استفاده شود، نه صرفاً عرض تصویر.
Pixel Address =
Base Address
+ (y × Pitch)
+ (x × Bytes Per Pixel)
بخش y × Pitch آدرس ابتدای سطر و بخش x × Bytes Per Pixel
محل Pixel در همان سطر را مشخص میکند.
اندازه واقعی Buffer
اندازه حافظه موردنیاز تصویر دارای Pitch معمولاً از
حاصلضرب Pitch در ارتفاع بهدست میآید.
Buffer Size = Pitch × Height
بنابراین مقدار واقعی حافظه میتواند از اندازه منطقی
Pixelهای تصویر بیشتر باشد.
اندازه منطقی و اندازه فیزیکی تصویر
| مفهوم | فرمول | شامل Padding |
|---|---|---|
| Logical Size | Width × Height × Bpp | خیر |
| Physical Buffer Size | Pitch × Height | بله |
Negative Stride
در بعضی فرمتها یا APIها، Stride میتواند منفی باشد.
Stride منفی معمولاً نشان میدهد سطرها در حافظه از پایین
به بالا ذخیره یا پیمایش میشوند.
Positive Stride
Top Row
│
▼
Bottom Row
Negative Stride
Bottom Row
│
▼
Top Row
این حالت در بعضی Bitmapهای قدیمی یا ساختارهای خاص
سیستمعامل دیده میشود.
Pitch در تصاویر چند Plane
فرمتهای YUV Planar یا Semi-Planar ممکن است برای هر Plane
دارای Pitch مستقل باشند.
برای مثال، Plane روشنایی و Plane رنگ ممکن است عرض،
ارتفاع و Alignment متفاوتی داشته باشند.
| 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 نیاز دارد؟
| دلیل | نتیجه |
|---|---|
| دسترسی حافظه منظم | کاهش عملیات حافظه شکسته |
| سازگاری با Cache Line | استفاده بهتر از Cache |
| انتقال DMA | افزایش کارایی Copy |
| محدودیت سختافزار | دسترسی سادهتر Memory Controller |
| Texture Sampling | خواندن منظم Blockها |
کپی تصویر دارای Pitch
هنگام کپی یک تصویر دارای Pitch، معمولاً نباید کل Buffer
را بهعنوان یک آرایه فشرده از Pixelها در نظر گرفت.
Copy باید سطربهسطر انجام شود یا از API مخصوص کپی
دوبعدی استفاده شود.
for each row y:
Source Address = Source Base + y × Source Pitch
Destination Address = Destination Base + y × Destination Pitch
Copy Raw Row Size Bytes
تفاوت Source Pitch و Destination Pitch
هنگام انتقال تصویر میان CPU و GPU یا میان دو Buffer،
Pitch مبدأ و مقصد ممکن است متفاوت باشند.
تنها بخش واقعی Pixel Data هر سطر کپی میشود و Padding
مبدأ لزوماً به مقصد منتقل نمیشود.
Source Pitch = 2048 Bytes
Raw Row Size = 1920 Bytes
Destination Pitch = 2304 Bytes
Copy Per Row = 1920 Bytes
PERFORMANCE IMPACT
اثر Pitch و Alignment بر عملکرد
Memory Access
زیاد
Copy Performance
زیاد
VRAM Usage
کم تا متوسط
Correctness
بسیار زیاد
خطاهای رایج مرتبط با 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 است.
واژهنامه فصل
پیشنیازهای فصل
- شناخت فضای رنگ RGB و YUV
- آشنایی با Chroma Subsampling
- درک Pitch، Stride و Row Alignment
در این فصل یاد میگیرید
- Plane و Channel چه تفاوتی دارند
- Packed و Planar چگونه داده را ذخیره میکنند
- NV12 و P010 چرا Semi-Planar هستند
- آدرس هر مؤلفه رنگ چگونه محاسبه میشود
Pixel Format چیست؟
Pixel Format مشخص میکند اطلاعات رنگ هر Pixel از چه
مؤلفههایی تشکیل شده، هر مؤلفه چند Bit دارد و این
مؤلفهها با چه ترتیبی در حافظه ذخیره میشوند.
دو تصویر با Resolution و محتوای کاملاً یکسان میتوانند
به دلیل تفاوت Pixel Format، اندازه، Layout و روش دسترسی
متفاوتی در حافظه داشته باشند.
تفاوت Channel و Plane
Channel یک مؤلفه معنایی تصویر مانند Red، Green، Blue،
Alpha، Y، U یا V است.
Plane یک ناحیه یا Buffer حافظهای است که یک یا چند
Channel را نگهداری میکند.
| مفهوم | تعریف | نمونه |
|---|---|---|
| Channel | یک مؤلفه رنگ یا داده | R، G، B، A، Y، U، V |
| Plane | یک ناحیه مستقل حافظه | Y Plane یا UV Plane |
Packed Format
در فرمت Packed، مؤلفههای مربوط به یک Pixel یا گروهی از
Pixelها پشت سر هم در یک Plane حافظه ذخیره میشوند.
فرمتهای RGB، RGBA و BGRA از نمونههای رایج Packed
هستند.
Pixel 0 Pixel 1 Pixel 2
R G B A | R G B A | R G B A
Memory:
R0 G0 B0 A0 R1 G1 B1 A1 R2 G2 B2 A2
ویژگیهای Packed Format
| ویژگی | نتیجه |
|---|---|
| یک Plane | مدیریت سادهتر Buffer |
| مؤلفههای مجاور | دسترسی آسان به تمام Channelهای Pixel |
| مناسب Rendering | سازگار با Texture و Render Target |
| استخراج یک Channel | نیازمند عبور از دادههای Interleaved |
| اندازه هر Pixel | معمولاً ثابت و قابل محاسبه مستقیم |
ترتیب Channelها در فرمت Packed
نام فرمت معمولاً ترتیب منطقی Channelها را بیان میکند،
اما نمایش Byteها در حافظه ممکن است به Endianness،
تعریف API و اندازه عنصر ذخیرهسازی وابسته باشد.
| فرمت | 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 مشترک
قرار میگیرند.
YUY2 / YUYV
Pixel Pair 0 Pixel Pair 1
Y0 U0 Y1 V0 | Y2 U1 Y3 V1
Each U and V sample is shared by two horizontal pixels.
| فرمت | ترتیب حافظه | 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 سوم قرار میگیرد.
Plane 0: Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
Plane 1: U
U U
U U
Plane 2: V
V V
V V
سازماندهی حافظه در فرمت Planar
Planeها ممکن است در Allocationهای کاملاً جداگانه باشند
یا بهصورت متوالی داخل یک Buffer بزرگ قرار گیرند.
Buffer Start
┌──────────────────────────────┐
│ Y Plane │
├──────────────────────────────┤
│ U Plane │
├──────────────────────────────┤
│ V Plane │
└──────────────────────────────┘
Buffer End
برای دسترسی صحیح، آدرس پایه، Pitch، ارتفاع و Offset هر
Plane باید جداگانه شناخته شود.
ویژگیهای Planar Format
| ویژگی | نتیجه |
|---|---|
| Plane مستقل | پردازش جداگانه هر مؤلفه |
| Chroma Subsampling | ذخیره U و V با ابعاد کوچکتر |
| مناسب Codec | سازگار با ساختار طبیعی بسیاری از Codecها |
| مدیریت پیچیدهتر | نیاز به Pitch و Offset جداگانه |
| تبدیل به RGB | نیازمند Sampling از چند Plane |
ساختار YUV420P
در YUV420P برای هر Pixel یک Sample روشنایی وجود دارد،
اما هر Sample از U و V میان یک بلوک ۲×۲ از Pixelها
مشترک است.
| Plane | عرض | ارتفاع |
|---|---|---|
| Y | Width | Height |
| U | Width ÷ 2 | Height ÷ 2 |
| V | Width ÷ 2 | Height ÷ 2 |
تفاوت I420 و YV12
هر دو فرمت Planar و 4:2:0 هستند، اما ترتیب Planeهای
رنگی آنها متفاوت است.
I420 / IYUV
Y Plane → U Plane → V Plane
YV12
Y Plane → V Plane → U Plane
Semi-Planar Format
در فرمت Semi-Planar، روشنایی در یک Plane مستقل قرار دارد،
اما مؤلفههای U و V بهصورت Interleaved در Plane دوم
ذخیره میشوند.
NV12 یکی از رایجترین نمونههای این ساختار است.
Plane 0: Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
Plane 1: Interleaved UV
U V U V
U V U V
NV12
NV12 یک فرمت YUV 4:2:0 هشتبیتی و دو Plane است.
| 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 رنگی متفاوت است.
NV12 Chroma Plane:
U V U V U V ...
NV21 Chroma Plane:
V U V U V U ...
P010
P010 یک فرمت Semi-Planar از خانواده YUV 4:2:0 است که
معمولاً برای ویدئوی دهبیتی و HDR استفاده میشود.
هر Sample معمولاً داخل یک Container شانزدهبیتی نگهداری
میشود؛ بنابراین نام دهبیتی فرمت به معنی مصرف دقیق ده
Bit فیزیکی برای هر Sample در حافظه نیست.
Plane 0:
Y16 Y16 Y16 Y16 ...
Plane 1:
U16 V16 U16 V16 ...
Valid precision: 10 bits per component
Storage unit: commonly 16 bits
P016
P016 از نظر ساختار Plane مشابه P010 است، اما Container
شانزدهبیتی میتواند Precision بیشتری را نمایش دهد.
تفسیر دقیق Bitهای معتبر باید از تعریف API، Codec یا
Metadata منبع مشخص شود.
مقایسه Packed، Planar و Semi-Planar
| معیار | 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 Address =
Base
+ (y × Row Pitch)
+ (x × Bytes Per Pixel)
پس از یافتن آدرس Pixel، Offset هر Channel بر اساس ترتیب
تعریفشده فرمت محاسبه میشود.
محاسبه آدرس در فرمت Planar
در فرمت Planar، هر Plane دارای Base Address و Pitch
مخصوص خود است.
Y Address =
Y Base
+ (y × Y Pitch)
+ x
U Address =
U Base
+ ((y / 2) × U Pitch)
+ (x / 2)
V Address =
V Base
+ ((y / 2) × V Pitch)
+ (x / 2)
تقسیم مختصات بر دو به دلیل Subsampling افقی و عمودی
مؤلفههای رنگ در 4:2:0 است.
محاسبه آدرس Chroma در NV12
Y Address =
Y Base
+ (y × Y Pitch)
+ x
UV Pair Address =
UV Base
+ ((y / 2) × UV Pitch)
+ ((x / 2) × 2)
U = UV Pair Address + 0
V = UV Pair Address + 1
در NV21، Offset مؤلفههای U و V در Pair برعکس میشود.
Pitch مستقل هر Plane
نباید فرض کرد Pitch تمام Planeها با یکدیگر برابر است.
Driver یا API میتواند هر Plane را بر اساس نیاز سختافزار
بهطور جداگانه Align کند.
| ویژگی | وظیفه |
|---|---|
| Base Address | آدرس شروع Plane |
| Row Pitch | فاصله میان سطرها |
| Width | تعداد Sampleهای افقی |
| Height | تعداد سطرهای Plane |
| Sample Size | اندازه هر عنصر حافظه |
محاسبه اندازه تقریبی Buffer
در Buffer فشرده و بدون Padding، فرمتهای هشتبیتی YUV
4:2:0 معمولاً به ازای هر Pixel منطقی حدود ۱٫۵ Byte داده
ذخیره میکنند.
Y Samples = Width × Height
U Samples = Width × Height / 4
V Samples = Width × Height / 4
Total =
Width × Height × 1.5 Bytes
اندازه Allocation واقعی میتواند به دلیل Pitch، Alignment،
Metadata یا Layout سختافزاری بیشتر باشد.
تبدیل میان Pixel Formatها
تبدیل Pixel Format تنها جابهجایی Byteها نیست. در بسیاری
از موارد باید Chroma بازسازی، Matrix رنگ اعمال، Range
تبدیل یا Bit Depth تغییر داده شود.
NV12
│
▼
Read Y and UV Planes
│
▼
Chroma Upsampling
│
▼
YUV to RGB Matrix
│
▼
Range / Transfer Processing
│
▼
RGBA Output
Pixel Format و Zero-Copy
Zero-Copy تنها زمانی مؤثر است که تمام مراحل Pipeline
بتوانند Surface را با Format و Layout موجود مصرف کنند.
اگر Decoder خروجی NV12 تولید کند ولی فیلتر فقط RGBA را
بپذیرد، مرحله تبدیل Format و احتمالاً Buffer جدید لازم
خواهد بود.
خطاهای رایج Pixel Format
| خطا | نشانه | علت |
|---|---|---|
| جابهجایی 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 بر عملکرد
زیاد
بسیار زیاد
زیاد
بسیار زیاد
API MAPPING
Pixel Format در APIهای مختلف
AVPixelFormat، data و linesize
VkFormat و Multi-Planar Image Format
DXGI_FORMAT_NV12، P010 و BGRA
Linear Memory، Array، Surface و Texture View
Surface Format و Image Format
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 و ابعاد مستقل داشته باشد.
واژهنامه فصل
پیشنیازهای فصل
- شناخت Linear Layout
- آشنایی با Pitch و Alignment
- درک Cache Line و Spatial Locality
در این فصل یاد میگیرید
- Tile چیست و چگونه در حافظه قرار میگیرد
- چرا GPU چیدمان دوبعدی را ترجیح میدهد
- Tile Size چگونه بر Cache اثر میگذارد
- چرا دسترسی CPU به Tiled Image دشوارتر است
Tiled Layout چیست؟
در Tiled Layout تصویر به بلوکهای کوچک دوبعدی تقسیم
میشود و Pixelهای هر Tile نزدیک یکدیگر در حافظه قرار
میگیرند.
پس از ذخیره کامل یک Tile، دادههای Tile بعدی در حافظه
نوشته میشوند.
تفاوت Linear و Tiled Layout
Image: 8 × 4 Pixels
Linear Layout
A B C D E F G H
I J K L M N O P
Q R S T U V W X
Y Z 1 2 3 4 5 6
Memory:
A B C D E F G H I J K L M N O P
Q R S T U V W X Y Z 1 2 3 4 5 6
Tiled Layout: 4 × 2 Tiles
Tile 0:
A B C D
I J K L
Tile 1:
E F G H
M N O P
Tile 2:
Q R S T
Y Z 1 2
Tile 3:
U V W X
3 4 5 6
در Layout خطی، مجاورت حافظه عمدتاً افقی است؛ اما در
Tiled Layout، همسایگی افقی و عمودی داخل Tile بهتر حفظ
میشود.
چرا GPU از Tile استفاده میکند؟
بسیاری از عملیات تصویری به Pixelهای همسایه نیاز دارند.
Sampling، Blur، Scaling، Depth Test و Rendering معمولاً
تنها یک Pixel منفرد را نمیخوانند.
اگر همسایههای دوبعدی در حافظه نزدیک باشند، GPU میتواند
با تعداد Cache Line و Transaction کمتر به آنها دسترسی
پیدا کند.
| مزیت | نتیجه |
|---|---|
| Locality دوبعدی | دسترسی سریعتر به Pixelهای مجاور |
| Cache Hit بیشتر | کاهش مراجعه مستقیم به VRAM |
| Transaction منظمتر | استفاده بهتر از Memory Bus |
| مناسب Rendering | پردازش Blockهای کوچک تصویر |
| مناسب Sampling | دسترسی مؤثر به همسایگی دوبعدی |
ساختار یک Tile
Tile معمولاً یک ناحیه مستطیلی از Pixelهاست. اندازه دقیق
آن به معماری GPU، Format، نوع Resource و Layout بستگی
دارد.
4 × 4 Tile
┌────┬────┬────┬────┐
│ P0 │ P1 │ P2 │ P3 │
├────┼────┼────┼────┤
│ P4 │ P5 │ P6 │ P7 │
├────┼────┼────┼────┤
│ P8 │ P9 │P10 │P11 │
├────┼────┼────┼────┤
│P12 │P13 │P14 │P15 │
└────┴────┴────┴────┘
این Pixelها ممکن است در حافظه به ترتیب خطی داخل همان
Tile قرار گیرند یا از Swizzle داخلی استفاده کنند.
Tile Size
Tile Size ممکن است برحسب Pixel، Sample، Byte یا Block
تعریف شود.
اندازه Tile ثابت و عمومی نیست. یک GPU ممکن است برای
Color Buffer، Depth Buffer و Video Surface از 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 مشخص شود.
1. Find Tile X
Tile X = x / Tile Width
2. Find Tile Y
Tile Y = y / Tile Height
3. Find Local Coordinates
Local X = x % Tile Width
Local Y = y % Tile Height
4. Find Tile Address
Tile Address =
Base
+ Tile Index × Tile Size
5. Find Pixel Offset Inside Tile
مرحله پنجم ممکن است ساده، Block-Linear، Swizzled یا
وابسته به معماری باشد.
محاسبه Tile Index
در سادهترین مدل، Tileها بهصورت ردیفی شمارهگذاری
میشوند.
Tile Grid
┌───────┬───────┬───────┐
│ 0 │ 1 │ 2 │
├───────┼───────┼───────┤
│ 3 │ 4 │ 5 │
├───────┼───────┼───────┤
│ 6 │ 7 │ 8 │
└───────┴───────┴───────┘
Tile Index =
Tile Y × Tiles Per Row
+ Tile X
اثر Tile بر Cache Locality
فرض کنید یک فیلتر برای هر Pixel، همسایه بالا، پایین،
چپ و راست را بخواند.
در Linear Layout، همسایه عمودی ممکن است یک Pitch کامل
دورتر باشد؛ اما در Tiled Layout احتمال بیشتری دارد که
داخل همان Tile یا Cache Line نزدیک قرار گیرد.
| نوع دسترسی | Linear | Tiled |
|---|---|---|
| همسایه افقی | معمولاً نزدیک | نزدیک |
| همسایه عمودی | ممکن است دور باشد | اغلب داخل Tile نزدیک است |
| بلوک دوبعدی | Cache Lineهای بیشتر | Cache Lineهای کمتر |
| دسترسی سطر کامل | بسیار مناسب | ممکن است پیچیدهتر باشد |
مثال فیلتر همسایگی
3 × 3 Neighborhood
┌────┬────┬────┐
│ NW │ N │ NE │
├────┼────┼────┤
│ W │ P │ E │
├────┼────┼────┤
│ SW │ S │ SE │
└────┴────┴────┘
Blur، Sharpen، Edge Detection و بسیاری از عملیات Spatial
چنین الگویی دارند و از Locality دوبعدی سود میبرند.
Tiled Layout و Texture Sampling
Bilinear Sampling برای تولید یک Sample معمولاً چند Pixel
مجاور را میخواند.
Bicubic و Anisotropic Sampling ممکن است ناحیه بزرگتری
را بررسی کنند. چیدمان Tiled دسترسی به این همسایهها را
برای Texture Unit مؤثرتر میکند.
Bilinear Sampling
P00 ───── P10
│ │
│ X │
│ │
P01 ───── P11
X is calculated from four neighboring samples.
Tiled Layout در Render Target
هنگام Rendering، Pixelهای نزدیک صفحه معمولاً در بازه
زمانی مشابه تولید یا بهروزرسانی میشوند.
نگهداری آنها در Tileهای مشترک باعث میشود عملیات Blend،
Depth Test، Color Write و Resolve با ترافیک حافظه کمتری
انجام شوند.
Depth و Stencil Tiling
Depth Buffer و Stencil Buffer نیز معمولاً از Layoutهای
Tiled استفاده میکنند.
دلیل آن این است که تست عمق برای بلوکهای نزدیک Pixelها
انجام میشود و دسترسی دوبعدی منظم اهمیت زیادی دارد.
| مزیت | نتیجه |
|---|---|
| دسترسی Block-Based | تست سریعتر نواحی نزدیک |
| Compression بهتر | کاهش ترافیک Depth Buffer |
| Early-Z | ردکردن Pixelهای پنهان زودتر |
| Cache Reuse | استفاده دوباره از داده همان Tile |
Tile Boundary
وقتی یک عملیات به Pixelهایی در دو Tile متفاوت نیاز داشته
باشد، GPU ممکن است مجبور شود Cache Line یا Tile دیگری
را نیز بارگذاری کند.
Tile A Tile B
┌───────────┐┌───────────┐
│ X X ││ X X │
│ X P ││ X │
│ X X ││ X X │
└───────────┘└───────────┘
Neighborhood crosses a tile boundary.
طراحی Tile Size و Cache تلاش میکند هزینه این مرزها را
محدود کند، اما آن را کاملاً حذف نمیکند.
Partial Tile
اگر عرض یا ارتفاع تصویر مضرب اندازه Tile نباشد، Tileهای
لبه تصویر کامل پر نمیشوند.
Driver یا سختافزار ممکن است فضای اضافی برای تکمیل
Alignment Tile رزرو کند.
Full Tiles Partial Tile
┌─────┬─────┬─────┬───┐
│█████│█████│█████│██ │
│█████│█████│█████│██ │
├─────┼─────┼─────┼───┤
│█████│█████│█████│██ │
│█████│█████│█████│██ │
└─────┴─────┴─────┴───┘
اندازه Allocation در Tiled Layout
اندازه واقعی Resource ممکن است از حاصلضرب ساده Width،
Height و Bytes Per Pixel بیشتر باشد.
Padding سطر، Padding Tile، Metadata، Compression Surface
و Alignment کلی 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 شود.
Tiled GPU Image
│
▼
Copy / Resolve
│
▼
Linear Staging Buffer
│
▼
CPU Mapping
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 فشردهتری ذخیره
شود.
Uncompressed Tile
R R R R
R R R R
R R R R
R R R R
Compressed Representation
Color = R
Pattern = Uniform
Metadata = Valid
Layout Modifier چیست؟
در بعضی APIها و سیستمعاملها، Pixel Format بهتنهایی
برای توصیف Resource کافی نیست.
Modifier اطلاعاتی مانند Tiling، Compression و سازماندهی
اختصاصی حافظه را مشخص میکند.
| ویژگی | Format | Modifier |
|---|---|---|
| مؤلفههای رنگ | مشخص میکند | معمولاً خیر |
| Bit Depth | مشخص میکند | خیر |
| Tiling | همیشه کافی نیست | مشخص میکند |
| Compression | معمولاً مشخص نمیکند | ممکن است مشخص کند |
| Vendor Layout | خیر | بله |
اشتباهات رایج
| اشتباه | پیامد | علت |
|---|---|---|
| تفسیر مستقیم بهعنوان Linear | تصویر کاملاً خراب | نادیدهگرفتن Tile Addressing |
| محاسبه اندازه با Width × Height | Allocation ناکافی | نادیدهگرفتن Padding و Metadata |
| یکسان فرضکردن Layout سازندگان | ناسازگاری Resource | وابستگی Tiling به معماری |
| اشتراک فقط بر اساس Format | خطای Import یا نمایش نادرست | نادیدهگرفتن Modifier |
| CPU Mapping مستقیم | داده غیرقابل تفسیر | نبود Staging یا Detiling |
PERFORMANCE IMPACT
اثر Tiled Layout بر عملکرد
بسیار زیاد
بسیار زیاد
زیاد
کمتر
API MAPPING
Tiled Layout در APIهای مختلف
Optimal Tiling و Linear Tiling
Texture Layout و Tiled Resources
Layout داخلی مدیریتشده توسط Driver
Private Texture و Storage Mode
Format Modifier و DMA-BUF
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 دارند.
واژهنامه فصل
پیشنیازهای فصل
- شناخت Linear و Tiled Layout
- آشنایی با Pitch و Alignment
- درک Cache Line و Locality دوبعدی
- شناخت Planeهای فرمتهای ویدئویی
در این فصل یاد میگیرید
- Block Linear چه تفاوتی با Tiled ساده دارد
- GOB و Block Height چه نقشی دارند
- چرا آدرسدهی آن سلسلهمراتبی است
- چرا Layout دقیق نباید از روی Format حدس زده شود
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 به واحدهای کوچکتر تقسیم میشود.
Image
│
▼
Block Rows
│
▼
Block
│
▼
Groups of Bytes
│
▼
Internal Pixel / Sample Order
نام، اندازه و ترتیب دقیق این لایهها به معماری، نسل GPU،
Pixel Format و نوع Resource وابسته است.
GOB یا Group of Bytes
در برخی مستندات معماری NVIDIA، واحدهای داخلی Block Linear
با عنوان
Group of Bytes یا GOB
توصیف میشوند.
GOB را میتوان یک واحد کوچک سازماندهی حافظه دانست که
چندین Sample یا Pixel را در یک ساختار دوبعدی داخلی
گروهبندی میکند.
نمایش مفهومی GOB
Block
┌──────────────────────────────────┐
│ GOB 0 │
├──────────────────────────────────┤
│ GOB 1 │
├──────────────────────────────────┤
│ GOB 2 │
├──────────────────────────────────┤
│ GOB 3 │
└──────────────────────────────────┘
Each GOB contains an internal 2D byte arrangement.
Block Height چیست؟
Block Height مشخص میکند چند واحد داخلی مانند GOB در
جهت عمودی برای تشکیل یک Block بزرگتر گروهبندی شوند.
افزایش Block Height باعث بلندترشدن ناحیه دوبعدی هر Block
میشود و نحوه حرکت از یک Block به Block بعدی را تغییر
میدهد.
Block Height = 1
┌──────────────┐
│ GOB 0 │
└──────────────┘
Block Height = 2
┌──────────────┐
│ GOB 0 │
├──────────────┤
│ GOB 1 │
└──────────────┘
Block Height = 4
┌──────────────┐
│ GOB 0 │
├──────────────┤
│ GOB 1 │
├──────────────┤
│ GOB 2 │
├──────────────┤
│ GOB 3 │
└──────────────┘
اثر Block Height
| ویژگی | Block کوتاهتر | Block بلندتر |
|---|---|---|
| ناحیه دوبعدی Block | کوچکتر | بزرگتر |
| تعداد Blockهای عمودی | بیشتر | کمتر |
| Padding لبه | ممکن است کمتر باشد | ممکن است بیشتر شود |
| Locality | مناسب نواحی کوچکتر | مناسب دسترسی عمودی گستردهتر |
| آدرسدهی | وابسته به Blockهای بیشتر | وابسته به زیرواحدهای بیشتر در هر Block |
آدرسدهی در Block Linear
برای یافتن آدرس یک Pixel، تنها استفاده از Row Pitch
کافی نیست. ابتدا باید Block شامل Pixel، سپس واحد داخلی
Block و در نهایت Offset محلی Sample تعیین شود.
Pixel Coordinates (x, y)
│
▼
Find Block Coordinates
│
▼
Find Block Base Address
│
▼
Find Internal Group
│
▼
Find Local Byte Position
│
▼
Final Memory Address
فرمول دقیق آدرسدهی باید از API، Driver یا مستندات
همان پلتفرم دریافت شود.
مدل مفهومی محاسبه آدرس
Address =
Surface Base
+ Block Row Offset
+ Block Column Offset
+ Internal Group Offset
+ Sample Offset
این رابطه فقط ساختار منطقی محاسبه را نشان میدهد و
جایگزین فرمول اختصاصی سختافزار نیست.
مفهوم Pitch در Block Linear
در Block Linear ممکن است مقداری با عنوان Pitch یا
Stride وجود داشته باشد، اما این مقدار الزاماً فاصله
مستقیم میان دو سطر Pixel نیست.
Pitch میتواند فاصله میان ردیفهای Block، پهنای
Allocation همتراز یا پارامتری برای محاسبه آدرس داخلی
باشد.
Layout مستقل Planeها
در Surfaceهای چند Plane مانند NV12 یا P010، هر Plane
میتواند ابعاد، Offset، Pitch، Alignment و Block Height
مستقل داشته باشد.
| ویژگی | 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 را مصرف میکنند.
Compressed Stream
│
▼
Hardware Decoder
│
▼
Block-Linear Video Surface
│
┌────┼─────────────┐
│ │ │
▼ ▼ ▼
Color Compute Video Process
│ │ │
└────┴──────┬──────┘
▼
Hardware Encoder
این مسیر زمانی Zero-Copy باقی میماند که تمام واحدها
Format و Layout واقعی Surface را پشتیبانی کنند.
تبدیل Block Linear و Pitch Linear
برای دسترسی مستقیم CPU، ذخیره فایل یا استفاده در
نرمافزاری که Layout اختصاصی GPU را نمیشناسد، معمولاً
باید Surface به Layout خطی تبدیل شود.
Block-Linear Surface
│
▼
Copy / Blit / Transform Engine
│
▼
Pitch-Linear Surface
│
▼
CPU Mapping or File Output
این تبدیل ممکن است Detiling، تغییر Alignment یا
تبدیل Pixel Format را نیز شامل شود.
Block Linear و Zero-Copy
اشتراک یک Buffer تنها با انتقال Handle حافظه کامل
نمیشود. مصرفکننده باید اطلاعات Layout، Planeها،
Offsetها، Pitchها و Modifierهای Resource را نیز دریافت
کند.
دسترسی CPU
Block Linear برای الگوی دسترسی GPU طراحی شده و معمولاً
برای پیمایش مستقیم سطربهسطر توسط CPU مناسب نیست.
حتی اگر CPU بتواند Allocation را Map کند، داده خام
الزاماً شکل قابلمشاهده تصویر را ندارد.
| روش | وضعیت |
|---|---|
| Map مستقیم | تنها در صورت پشتیبانی و شناخت Layout |
| Copy به Staging Buffer | روش رایج و قابلاعتماد |
| GPU Detiling | تبدیل سریعتر با Engine یا Shader |
| Software Detiling | پیچیده و وابسته به جزئیات معماری |
اندازه واقعی Allocation
اندازه Block Linear Resource از اندازه منطقی تصویر
بیشتر است؛ زیرا عرض، ارتفاع، Planeها و Blockها باید
بر اساس محدودیتهای سختافزار Align شوند.
| عامل | اثر |
|---|---|
| Block Padding | تکمیل Blockهای لبه تصویر |
| Plane Alignment | همترازی شروع هر Plane |
| Block Height | گردکردن ارتفاع Plane |
| Metadata | اطلاعات Compression یا Surface |
| Allocation Alignment | همترازی کل حافظه |
اشتباهات رایج
| اشتباه | پیامد | راه صحیح |
|---|---|---|
| تفسیر بهعنوان Linear | تصویر کاملاً درهمریخته | استفاده از Copy یا Layout Metadata |
| حدس Block Height | آدرسدهی نادرست | دریافت مقدار از API یا Driver |
| یکسانفرضکردن Planeها | خرابی Chroma | بررسی مستقل هر Plane |
| اشتراک تنها با Pixel Format | ناسازگاری Interop | انتقال Modifier و Layout |
| محاسبه ساده اندازه Buffer | Allocation ناکافی | استفاده از اندازه اعلامشده API |
PERFORMANCE IMPACT
اثر Block Linear بر عملکرد
بسیار زیاد
زیاد
بسیار زیاد
کم
API MAPPING
Block Linear در APIها و Frameworkها
Surface Layout و Video Surface
Image Attributes و Plane Layout
Array، Surface و External Memory Interop
Image Interoperability میان Engineها
Format Modifier و Buffer Sharing
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 وابسته است.
واژهنامه فصل
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 را محاسبه میکند.
Texture Coordinates
│
▼
Coordinate Conversion
│
▼
Mip Level Selection
│
▼
Tile / Block Selection
│
▼
Swizzle Address Generation
│
▼
Cache Lookup
│
▼
VRAM Request
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 حافظه دریافت
کند.
| الگوی دسترسی | هدف 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 کامل نیست.
پیشنیازهای فصل
- شناخت 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 چیست؟
Frame Buffer Compression روشی برای کاهش مقدار دادهای
است که میان GPU، Cache و VRAM جابهجا میشود.
GPU بهجای نوشتن و خواندن تمام Byteهای یک Tile، تلاش
میکند الگوی آن Tile را با داده کمتر و Metadata مناسب
نمایش دهد.
تفاوت Frame Buffer Compression و Video Codec
| معیار | Frame Buffer Compression | Video Codec |
|---|---|---|
| هدف | کاهش ترافیک داخلی حافظه | کاهش حجم فایل یا Bitstream |
| محل استفاده | داخل GPU و VRAM | ذخیرهسازی و انتقال ویدئو |
| Latency | بسیار پایین | بیشتر و وابسته به Codec |
| نوع فشردهسازی | معمولاً Lossless | اغلب Lossy یا ترکیبی |
| خروجی قابل حمل | معمولاً خیر | بله |
| وابستگی به GPU | زیاد | مبتنی بر استاندارد Codec |
مسیر داده در یک Surface فشرده
Shader / Render Engine
│
▼
Compression Unit
│
├──► Pixel Data
│
└──► Compression Metadata
│
▼
VRAM
هنگام خواندن Resource، سختافزار Metadata را بررسی
میکند تا مشخص شود Tile بهصورت فشرده، یکنواخت یا کامل
ذخیره شده است.
Compression Block
فشردهسازی معمولاً روی گروهی از Pixelها یا Sampleها
انجام میشود، نه روی کل تصویر بهصورت یکجا.
این گروه میتواند با Tile، Cache Block یا واحد داخلی
Memory Controller هماهنگ باشد.
Surface
┌────────┬────────┬────────┐
│Block 0 │Block 1 │Block 2 │
├────────┼────────┼────────┤
│Block 3 │Block 4 │Block 5 │
├────────┼────────┼────────┤
│Block 6 │Block 7 │Block 8 │
└────────┴────────┴────────┘
Color Compression
Color Compression برای Render Targetها، Textureها و
Frame Bufferهای رنگی استفاده میشود.
اگر Pixelهای یک Block مشابه یا قابل پیشبینی باشند،
GPU میتواند آنها را با Base Color، Deltaها یا یک حالت
خاص مانند Uniform Block نمایش دهد.
Original Block
100 101 100 102
100 100 101 101
99 100 100 101
100 101 100 100
Compressed Model
Base = 100
Delta = 0, +1, 0, +2, ...
Delta Color Compression
در Delta Color Compression، سختافزار یک مقدار پایه
برای Block انتخاب میکند و تفاوت Pixelهای دیگر نسبت به
آن را ذخیره میکند.
اگر Deltaها کوچک باشند، تعداد Bit کمتری برای ذخیره
Block لازم خواهد بود.
Fast Clear و Clear Color
هنگام پاککردن یک Render Target، GPU ممکن است بهجای
نوشتن رنگ جدید در تمام Pixelها، تنها Metadata آن Surface
را بهروزرسانی کند.
Traditional Clear
Write Color to Every Pixel
Fast Clear
Store Clear Color in Metadata
Mark Blocks as Cleared
در خواندن بعدی، سختافزار میداند که آن Block باید مانند
یک ناحیه یکنواخت با Clear Color تفسیر شود.
Depth و Stencil Compression
Depth Bufferها نیز معمولاً فشرده میشوند، زیرا مقادیر
عمق در نواحی مجاور اغلب رابطه قابل پیشبینی دارند.
| اثر | نتیجه |
|---|---|
| ترافیک کمتر | کاهش خواندن و نوشتن Depth |
| Early-Z مؤثرتر | رد سریعتر Geometry پنهان |
| Cache Hit بیشتر | نگهداری Blockهای بیشتری در Cache |
| Fast Clear | پاکسازی سریع Depth Buffer |
Metadata Surface چیست؟
Metadata Surface ناحیهای جدا یا همراه Resource است که
وضعیت فشردهسازی Blockها را نگهداری میکند.
| اطلاعات | کاربرد |
|---|---|
| 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 نامیده شود.
Compressed Surface
│
▼
Resolve / Decompress
│
▼
Uncompressed Surface
│
├──► CPU Mapping
├──► Unsupported Engine
└──► External Device
چه زمانی Resolve لازم میشود؟
| وضعیت | علت |
|---|---|
| CPU Readback | CPU Layout فشرده را نمیشناسد |
| API Interop | مصرفکننده Modifier را پشتیبانی نمیکند |
| Display Scanout | Display Engine Layout را نمیپذیرد |
| Video Encode | Encoder به Surface سازگار دیگری نیاز دارد |
| Copy خاص | Copy Engine قادر به حفظ Compression نیست |
| Partial Update | تغییر Block با حالت فشرده فعلی ناسازگار است |
تغییر وضعیت Compression
Undefined
│
▼
Fast Cleared
│
▼
Compressed
│
├──► Partially Compressed
│
▼
Resolved / Expanded
│
▼
Compressed Again
Driver و Command Processor باید این تغییر وضعیتها را
با Barrier و Metadata Update مناسب مدیریت کنند.
Compression و Zero-Copy
یک Surface فشرده تنها زمانی میتواند بدون Copy میان
Engineها یا APIها به اشتراک گذاشته شود که تمام طرفها
Format، Modifier، Compression State و Metadata آن را
پشتیبانی کنند.
PERFORMANCE IMPACT
اثر Frame Buffer Compression بر عملکرد
بسیار زیاد
زیاد
زیاد
بسیار زیاد
API MAPPING
Compression Surface در APIها
Image Tiling، Layout Transition و Modifier
Resource State، Render Target و Resolve
Format Modifier و اشتراک Layout
Private Texture و مدیریت داخلی Compression
External Memory و Array-Compatible Resource
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 را روی سختافزار واقعی آزمایش کنید.
اشتباهات رایج
| اشتباه | پیامد | راه صحیح |
|---|---|---|
| فرض 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.
پیشنیازهای این مرور
- شناخت Linear و Pitch-Linear Layout
- درک Plane، Pixel Format و Row Pitch
- آشنایی با Tile، Block و Swizzle
- شناخت Compression Metadata و Resolve
پس از این فصل میتوانید
- Layout مناسب هر Workload را انتخاب کنید
- Copy و Resolve پنهان را بهتر تشخیص دهید
- شرایط واقعی Zero-Copy را ارزیابی کنید
- مشکلات ناشی از Format و Layout ناسازگار را تحلیل کنید
چرا انتخاب 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
Row 0 ─────────────────────►
Row 1 ─────────────────────►
Pitch-Linear
[ Row Data ][ Padding ]
[ Row Data ][ Padding ]
Tiled
┌────┬────┬────┐
│ T0 │ T1 │ T2 │
├────┼────┼────┤
│ T3 │ T4 │ T5 │
└────┴────┴────┘
Block Linear
Block
├── Internal Group 0
├── Internal Group 1
└── Internal Group 2
Swizzled
2D Coordinates
│
▼
Bit / Block Mapping
│
▼
Memory Address
Compressed
Pixel Data + Compression Metadata
چه زمانی Linear یا Pitch-Linear انتخاب میشود؟
Linear Layout زمانی مناسب است که سادگی آدرسدهی، دسترسی
مستقیم CPU یا انتقال سطربهسطر مهمتر از Locality
دوبعدی GPU باشد.
| سناریو | مناسب بودن | دلیل |
|---|---|---|
| CPU Readback | بسیار مناسب | پیمایش ساده سطرها |
| Staging Buffer | بسیار مناسب | انتقال منظم و قابل پیشبینی |
| File Encoding | مناسب | سازگار با Bufferهای نرمافزاری |
| Texture Sampling سنگین | معمولاً نامناسب | Locality عمودی ضعیفتر |
| Render Target پرترافیک | معمولاً نامناسب | ترافیک حافظه بیشتر |
چه زمانی Tiled یا Swizzled مناسبتر است؟
زمانی که Workload مرتباً به ناحیههای دوبعدی، همسایههای
Pixel یا Sampleهای مجاور دسترسی دارد، Layoutهای Tiled و
Swizzled معمولاً عملکرد بهتری دارند.
| 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 را
پشتیبانی کنند.
Decoder Output
│
▼
Is Layout Accepted by Compute?
│
├── No ─► Convert / Copy
│
└── Yes
│
▼
Is Layout Accepted by Encoder?
│
├── No ─► Resolve / Convert
│
└── Yes ─► Zero-Copy Path
ماتریس Format و Layout
Pixel Format و Memory 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
است. همه موارد زیر باید بررسی شوند.
| شرط | پرسش کنترلی |
|---|---|
| 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
Do you need frequent CPU access?
│
├── Yes
│ └── Linear / Pitch-Linear
│
└── No
│
▼
Is the resource used for rendering or sampling?
│
├── Yes
│ └── Tiled / Swizzled / Compressed
│
└── No
│
▼
Is it a hardware video surface?
│
├── Yes
│ └── Supported Block-Based Layout
│
└── No
└── Choose based on API and workload
PERFORMANCE TRADE-OFFS
مقایسه اثر Layout بر سیستم
Linear
Swizzled
Block-Based
Compressed
الگوهای رایج خطا
| نشانه | علت احتمالی | بررسی لازم |
|---|---|---|
| تصویر مورب | 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های مختلف
Linear Tiling، Optimal Tiling، Subresource Layout
و External Memory
RowPitch، Texture Resource، Resource State و Resolve
Linear Memory، Pitched Memory، Array و Surface Object
data، linesize و Hardware Frame Context
FourCC، Modifier، Plane Offset و Buffer Sharing
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 میپذیرند.
پیشنیازهای فصل
- شناخت Tiled و Swizzled Layout
- آشنایی با Cache Line و Spatial Locality
- درک Texture، Pixel و Sample
- شناخت مختصات دوبعدی و سهبعدی
در این فصل یاد میگیرید
- Texture Unit چگونه آدرس تولید میکند
- Texture Cache چه تفاوتی با Cache عمومی دارد
- Bilinear و Trilinear چه دادههایی میخوانند
- Address Mode چگونه مختصات خارج از محدوده را مدیریت میکند
- چه الگوهایی باعث Cache Thrashing میشوند
مسیر خواندن Texture
هنگام اجرای Shader، برنامه معمولاً آدرس Byteای Texture
را مستقیماً محاسبه نمیکند. Shader مختصات Texture را به
واحد Sampling میدهد و سختافزار مراحل آدرسدهی، انتخاب
Mipmap، Filtering و Cache Lookup را انجام میدهد.
Shader
│
▼
Texture Coordinates
│
▼
Texture Unit
│
├── Address Mode
├── Mip Selection
├── Sample Position
└── Filtering
│
▼
Texture Cache
│
├── Cache Hit ─► Return Samples
│
└── Cache Miss ─► L2 Cache / VRAM
│
▼
Filtered Result
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 در سلسلهمراتب حافظه
Texture Unit
│
▼
Texture / Read-Only Cache
│
▼
Shared L1 or Unified Cache
│
▼
L2 Cache
│
▼
VRAM / System Memory
ساختار دقیق Cache به معماری GPU بستگی دارد. در بعضی
معماریها Texture Cache و L1 Cache مسیرهای جداگانه دارند
و در بعضی دیگر بخشی از ساختار Unified Cache هستند.
مختصات Normalized
بسیاری از APIهای گرافیکی Texture را با مختصات Normalized
نمونهبرداری میکنند؛ یعنی معمولاً بازه صفر تا یک به عرض
و ارتفاع کامل Texture نگاشت میشود.
Normalized Coordinates
u = 0.0 ───────────────► u = 1.0
v = 0.0
│
│ Texture
│
▼
v = 1.0
Texture Unit این مختصات را با توجه به ابعاد Mip Level
انتخابشده به مختصات Sample یا Texel تبدیل میکند.
مختصات Integer و Texel Fetch
در بعضی عملیات، Shader بهجای Sampling فیلترشده، یک
Texel مشخص را با مختصات صحیح میخواند.
این نوع دسترسی معمولاً برای جدولها، Bufferهای دوبعدی،
دادههای محاسباتی و خواندن دقیق بدون Filtering مناسب است.
| ویژگی | Texture Sample | Texel Fetch |
|---|---|---|
| مختصات | اغلب Normalized | معمولاً Integer |
| Filtering | ممکن است اعمال شود | معمولاً خیر |
| Mip Selection | خودکار یا صریح | اغلب صریح |
| کاربرد | Rendering و Sampling | دسترسی دقیق داده |
Texture Address Mode
Address Mode مشخص میکند مختصاتی که خارج از محدوده
Texture قرار میگیرد چگونه تفسیر شود.
| Mode | رفتار | کاربرد |
|---|---|---|
| Clamp | استفاده از نزدیکترین لبه | تصویر و Render Result |
| Repeat / Wrap | تکرار Texture | Material و Pattern |
| Mirrored Repeat | تکرار آینهای | کاهش Seam در Pattern |
| Border Color | بازگرداندن رنگ ثابت | Shadow و Sampling کنترلشده |
| Clamp to Zero | Sample خارج از محدوده برابر صفر | پردازش داده و Mask |
Clamp Addressing
Input Coordinate
-0.2 ───────────────► 1.3
Clamped Coordinate
0.0 ───────────────► 1.0
مختصات کوچکتر از حداقل به لبه اول و مختصات بزرگتر از
حداکثر به لبه آخر نگاشت میشوند.
Repeat و Wrap
در حالت Repeat، بخش کسری مختصات برای تکرار Texture
استفاده میشود.
Coordinate
0.2 → 0.2
1.2 → 0.2
2.2 → 0.2
-0.8 → 0.2
این روش برای Materialهای تکرارشونده مانند سنگ، پارچه،
خاک و الگوهای سطحی کاربرد زیادی دارد.
Nearest Filtering
در Nearest Filtering تنها نزدیکترین Texel به مختصات
Sampling خوانده میشود.
Texel Grid
A ───── B
X
C ───── D
Nearest Sample = B
این روش سریع و دقیق است، اما هنگام بزرگنمایی یا
کوچکنمایی ممکن است تصویر Blocky یا Aliased دیده شود.
Bilinear Filtering
Bilinear Filtering چهار Texel مجاور را میخواند و نتیجه
را بر اساس فاصله Sample از هر Texel ترکیب میکند.
P00 ───────── P10
│ │
│ X │
│ │
P01 ───────── P11
X = weighted combination of
P00, P10, P01 and P11
به همین دلیل Locality دوبعدی و Tiled Layout برای
Texture Sampling اهمیت زیادی دارند.
Trilinear Filtering
Trilinear Filtering از Bilinear Sampling روی دو Mip
Level مجاور استفاده میکند و سپس نتایج آنها را با
یکدیگر ترکیب میکند.
Mip Level N
│
└── Bilinear Sample A
Mip Level N + 1
│
└── Bilinear Sample B
Final Sample =
Interpolate(A, B)
بنابراین یک Sample منطقی میتواند به چندین Fetch حافظه
در دو سطح مختلف Texture نیاز داشته باشد.
Anisotropic Filtering
وقتی Texture با زاویه شدید روی سطح نمایش داده میشود،
Footprint یک Pixel در فضای Texture دیگر تقریباً مربع
نیست و میتواند ناحیهای کشیده را پوشش دهد.
Anisotropic Filtering چند Sample را در امتداد این ناحیه
کشیده میخواند تا جزئیات بهتر حفظ شوند.
Isotropic Footprint
┌──────┐
│ │
└──────┘
Anisotropic Footprint
┌──────────────────────────┐
│ │
└──────────────────────────┘
این روش کیفیت بالاتری دارد، اما تعداد Fetchها و فشار
روی Texture Cache را افزایش میدهد.
Sample Footprint
Sample Footprint ناحیهای از Texture است که برای تولید
یک Sample نهایی باید خوانده شود.
| Filtering | حداقل Sampleهای پایه | ویژگی |
|---|---|---|
| Nearest | یک Texel | کمترین دسترسی حافظه |
| Bilinear | چهار Texel | Locality دوبعدی |
| Trilinear | دو مجموعه Bilinear | دو Mip Level |
| Anisotropic | چندین Sample | Footprint کشیده و متغیر |
Mipmap و Texture Cache
Mipmap مجموعهای از نسخههای کوچکتر Texture است که هر
سطح معمولاً نصف عرض و نصف ارتفاع سطح قبلی را دارد.
Level 0 : 1024 × 1024
Level 1 : 512 × 512
Level 2 : 256 × 256
Level 3 : 128 × 128
Level 4 : 64 × 64
...
استفاده از Mip Level متناسب با اندازه نمایش، Footprint
حافظه و Cache Miss را کاهش میدهد.
Level of Detail یا LOD
Texture Unit بر اساس تغییرات مختصات Texture میان Pixelهای
مجاور، اندازه تقریبی Footprint را محاسبه و Mip Level مناسب
را انتخاب میکند.
Small Screen Footprint
│
▼
Use Smaller Mip Level
Large Screen Footprint
│
▼
Use Higher-Resolution Mip Level
Texture Cache Hit
Cache Hit زمانی رخ میدهد که Sampleهای موردنیاز از قبل
در Texture Cache موجود باشند.
| عامل | اثر |
|---|---|
| مختصات نزدیک Threadها | استفاده مشترک از Cache Line |
| Tiled یا Swizzled Layout | Locality دوبعدی بهتر |
| Mip Level مناسب | کاهش Footprint غیرضروری |
| Texture کوچکتر | احتمال Resident ماندن بیشتر |
| Reuse زمانی | استفاده مجدد از دادههای تازهخواندهشده |
Texture Cache Miss
Cache Miss زمانی رخ میدهد که داده موردنیاز در Cache
موجود نباشد و باید از سطح پایینتر حافظه خوانده شود.
| علت | نتیجه |
|---|---|
| دسترسی تصادفی | Cache Lineهای پراکنده |
| Texture بسیار بزرگ | Working Set بزرگتر از Cache |
| Mip Level نامناسب | خواندن Resolution بیشازحد |
| چند Texture همزمان | رقابت برای ظرفیت Cache |
| Anisotropy بالا | Fetchهای بیشتر و پراکندهتر |
| Layout نامناسب | Locality پایینتر |
Texture Cache Thrashing
Cache Thrashing زمانی رخ میدهد که Working Set یا الگوی
دسترسی باعث شود دادهها پیش از استفاده مجدد مرتباً از
Cache خارج شوند.
Read Region A
│
▼
Cache contains A
Read Region B
│
▼
A is evicted
Read Region A again
│
▼
A must be loaded again
این وضعیت باعث افزایش شدید ترافیک L2 و VRAM میشود،
حتی اگر GPU از نظر توان محاسباتی اشباع نشده باشد.
Coherence میان Threadها
اگر Threadهای یک Warp یا Wavefront مختصات نزدیک را
Sample کنند، درخواستهای آنها میتوانند به Cache Lineها
و Transactionهای مشترک تبدیل شوند.
Coherent Access
Thread 0 → Texel 100
Thread 1 → Texel 101
Thread 2 → Texel 102
Thread 3 → Texel 103
Scattered Access
Thread 0 → Texel 100
Thread 1 → Texel 9000
Thread 2 → Texel 240
Thread 3 → Texel 70000
Divergent Texture Sampling
اگر Threadهای یک گروه از Textureهای متفاوت یا نواحی
بسیار دور Sample کنند، امکان اشتراک Cache Line کاهش
مییابد.
این حالت میتواند تعداد درخواستهای مستقل حافظه را
افزایش دهد و Latency را دشوارتر پنهان کند.
تبدیل Format در Texture Unit
Texture Unit میتواند برخی Formatهای ذخیرهشده را هنگام
خواندن به نمایش قابل استفاده Shader تبدیل کند.
| عملیات | نمونه |
|---|---|
| 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 Resource
│
├── View A: RGBA Sampling
├── View B: Single Channel
├── View C: Selected Mip Range
└── View D: Array Layer Subset
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های جداگانه استفاده کند.
Y Plane ──────────┐
│
UV Plane ─────────┼──► Multi-Planar Sampling
│
Sampler State ────┘
│
▼
YUV to RGB Result
پشتیبانی دقیق این مسیر به API، Format و قابلیت سختافزار
وابسته است.
الگوهای دسترسی و اثر آنها بر Cache
| الگو | رفتار 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
| راهکار | نتیجه |
|---|---|
| استفاده از 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 بر عملکرد
بسیار زیاد
بسیار زیاد
زیاد
وابسته به Filtering
API MAPPING
Texture Sampling در APIهای مختلف
VkImageView، VkSampler، Address Mode و LOD
Shader Resource View و Sampler Descriptor
Texture Object، Sampler Object و Texture Parameters
MTLTexture و MTLSamplerState
Texture Object، CUDA Array و Address Mode
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 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 پیش از استفاده مجدد.
پیشنیازهای این فصل
- Texture Cache
- Texture Sampling
- Bilinear Filtering
- Address Modes
در پایان این فصل
- دلیل ایجاد Mipmap را درک خواهید کرد.
- خواهید دانست GPU چگونه Level مناسب را انتخاب میکند.
- مفهوم LOD را به صورت مهندسی خواهید شناخت.
- ارتباط Mipmap با Cache و Bandwidth را تحلیل خواهید کرد.
MIPMAP
چرا 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 باشد.
|
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 0 1024 × 1024
Level 1 512 × 512
Level 2 256 × 256
Level 3 128 × 128
Level 4 64 × 64
Level 5 32 × 32
Level 6 16 × 16
Level 7 8 × 8
Level 8 4 × 4
Level 9 2 × 2
Level 10 1 × 1
آخرین Level معمولاً به یک Texel با ابعاد
1 × 1
میرسد و میانگین کلی رنگ Texture را تقریب میزند.
Level 0
Level 0 همان Texture اصلی با بیشترین وضوح است و تمام
جزئیات منبع را نگهداری میکند.
هنگام Magnification یا زمانی که Texture نزدیک به اندازه
واقعی خود روی صفحه نمایش داده میشود، GPU معمولاً از
Level 0 یا Levelهای نزدیک به آن استفاده میکند.
Highest Detail
Mip Level 0
┌──────────────────────────────────┐
│ │
│ Full Resolution Texture │
│ │
└──────────────────────────────────┘
Levelهای کوچکتر
Levelهای کوچکتر نسخههایی از Texture هستند که جزئیات
فرکانس بالای آنها از قبل حذف یا میانگینگیری شده است.
بنابراین زمانی که Texture در فاصله دور نمایش داده میشود،
GPU بهجای نمونهبرداری مستقیم از Level 0، از Level
متناسب با اندازه نمایش استفاده میکند.
Level 0 Level 1 Level 2 Level 3
┌────────┐ ┌──────┐ ┌────┐ ┌──┐
│ │ │ │ │ │ │ │
│ Detail │ → │ Less │ → │Low │ → │ │
│ │ │Detail│ │ │ │ │
└────────┘ └──────┘ └────┘ └──┘
چرا هر Level نصف میشود؟
نصفکردن عرض و ارتفاع باعث میشود مساحت هر Level تقریباً
یکچهارم Level قبلی شود.
این نسبت هم ساده است، هم با محاسبات دودویی GPU سازگار
است و هم امکان انتخاب پیوسته Resolution را با تعداد
Levelهای محدود فراهم میکند.
Width → Width / 2
Height → Height / 2
Area:
W × H
↓
(W / 2) × (H / 2)
↓
W × H / 4
Textureهای غیرمربعی
Mipmap محدود به Textureهای مربعی نیست. در Textureهای
مستطیلی نیز هر بُعد تا رسیدن به مقدار یک کاهش مییابد.
Level 0 1024 × 256
Level 1 512 × 128
Level 2 256 × 64
Level 3 128 × 32
Level 4 64 × 16
Level 5 32 × 8
Level 6 16 × 4
Level 7 8 × 2
Level 8 4 × 1
Level 9 2 × 1
Level 10 1 × 1
زمانی که یکی از ابعاد به یک میرسد، بُعد دیگر همچنان تا
رسیدن به یک کاهش پیدا میکند.
ابعاد فرد
اگر عرض یا ارتفاع Texture عددی فرد باشد، اندازه Level
بعدی بر اساس قواعد API یا پیادهسازی به مقدار صحیح مناسب
کاهش مییابد.
Level 0 1000 × 750
Level 1 500 × 375
Level 2 250 × 187
Level 3 125 × 93
Level 4 62 × 46
...
تعداد Levelهای Mipmap
تعداد کامل Levelها بر اساس بزرگترین بُعد Texture محاسبه
میشود.
Mip Level Count =
floor(log2(max(Width, Height))) + 1
مقدار یک اضافه میشود، زیرا Level 0 نیز بخشی از زنجیره
محسوب میشود.
مثال محاسبه تعداد Level
| ابعاد Texture | بزرگترین بُعد | تعداد Level |
|---|---|---|
| 256 × 256 | 256 | 9 |
| 1024 × 1024 | 1024 | 11 |
| 1920 × 1080 | 1920 | 11 |
| 4096 × 2048 | 4096 | 13 |
زنجیره کامل و زنجیره ناقص
Resource ممکن است تمام Levelهای ممکن را داشته باشد یا
تنها بخشی از آنها را ذخیره کند.
| نوع | ساختار | کاربرد |
|---|---|---|
| Full Chain | از Level 0 تا 1×1 | Sampling در تمام فاصلهها |
| Partial Chain | فقط بخشی از Levelها | کاهش مصرف حافظه یا Streaming |
در زنجیره ناقص باید Sampler و LOD Range طوری تنظیم شوند
که GPU به Levelهای موجود دسترسی پیدا کند.
هزینه حافظه Mipmap
تصور اولیه ممکن است این باشد که ذخیره چند نسخه Texture
مصرف حافظه را چند برابر میکند، اما هر Level تنها یکچهارم
Level قبلی مساحت دارد.
Level 0 = 1
Level 1 = 1 / 4
Level 2 = 1 / 16
Level 3 = 1 / 64
...
Total =
1 + 1/4 + 1/16 + 1/64 + ...
Total approaches 4 / 3
بنابراین یک زنجیره کامل دوبعدی تقریباً
۳۳ درصد
بیشتر از Level 0 حافظه مصرف میکند.
مثال مصرف حافظه
فرض کنید Texture فرمت RGBA8 و ابعاد
4096 × 4096
دارد. هر Texel چهار Byte مصرف میکند.
Base Level Size
4096 × 4096 × 4 Bytes
= 67,108,864 Bytes
≈ 64 MiB
Complete Mip Chain
≈ 64 MiB × 4/3
≈ 85.33 MiB
Mip Levelها چگونه در حافظه قرار میگیرند؟
از دید منطقی هر Level یک تصویر مستقل با ابعاد کوچکتر
است، اما از دید فیزیکی ممکن است تمام Levelها داخل یک
Allocation مشترک ذخیره شوند.
Texture Allocation
┌─────────────────────────────────────┐
│ Mip Level 0 │
├─────────────────────────────────────┤
│ Mip Level 1 │
├───────────────────────┐ │
│ Mip Level 2 │ │
├──────────────┐ │ │
│ Level 3 ... │ │ │
└──────────────┴────────┴─────────────┘
Offset، Pitch، Alignment و Tiling هر Level ممکن است با
Level دیگر متفاوت باشد.
Mip Tail چیست؟
Levelهای بسیار کوچک ممکن است از نظر Allocation مستقل
ناکارآمد باشند؛ زیرا اندازه آنها از حداقل Tile یا Page
حافظه بسیار کوچکتر است.
برخی سیستمها چند Level کوچک انتهایی را در یک ناحیه
مشترک با عنوان
Mip Tail
گروهبندی میکنند.
Large Levels
Level 0
Level 1
Level 2
Level 3
Mip Tail
┌──────────────────────┐
│ L4 │ L5 │ L6 │ L7... │
└──────────────────────┘
Mipmap در Texture Array و Cubemap
هر Layer در Texture Array و هر Face در Cubemap معمولاً
زنجیره Mipmap مخصوص خود را دارد.
Array Layer 0
├── Mip 0
├── Mip 1
└── Mip 2 ...
Array Layer 1
├── Mip 0
├── Mip 1
└── Mip 2 ...
Array Layer 2
├── Mip 0
├── Mip 1
└── Mip 2 ...
View میتواند تنها بخشی از Layerها یا بازهای مشخص از
Mip Levelها را در اختیار Shader قرار دهد.
Mipmap در Texture سهبعدی
در Texture سهبعدی معمولاً عرض، ارتفاع و عمق همزمان
کاهش پیدا میکنند.
Level 0 256 × 256 × 128
Level 1 128 × 128 × 64
Level 2 64 × 64 × 32
Level 3 32 × 32 × 16
...
به همین دلیل هزینه کامل Mipmap در Texture سهبعدی با
Texture دوبعدی متفاوت است و باید جداگانه محاسبه شود.
Mipmap تولیدشده یا آماده؟
Levelهای Mipmap میتوانند بهصورت Offline توسط ابزار
Asset Pipeline ساخته شوند یا در Runtime توسط GPU تولید
شوند.
| روش | مزیت | محدودیت |
|---|---|---|
| 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 ایجاد کنند.
| روش | رفتار | نتیجه |
|---|---|---|
| Nearest Resize | انتخاب یک Texel | Aliasing و ازبینرفتن اطلاعات |
| Average Downsampling | ترکیب چند Texel | نمایش بهتر میانگین ناحیه |
| Filtered Prefiltering | کاهش فرکانسهای نامناسب | کیفیت پایدارتر هنگام Minification |
مدل ساده Downsampling دو در دو
در سادهترین حالت، هر چهار Texel مجاور از Level قبلی برای
تولید یک Texel در Level بعدی میانگینگیری میشوند.
Source Level
A B
C D
Destination Texel
M = (A + B + C + D) / 4
این روش سریع و ساده است، اما همیشه بهترین کیفیت را تولید
نمیکند؛ بهخصوص برای Textureهایی با لبههای تیز، Alpha،
Normal Map یا دادههای غیررنگی.
Box Filter
Box Filter تمام Sampleهای داخل ناحیه فیلتر را با وزن برابر
ترکیب میکند.
2 × 2 Box Kernel
┌─────┬─────┐
│ 1/4 │ 1/4 │
├─────┼─────┤
│ 1/4 │ 1/4 │
└─────┴─────┘
| ویژگی | نتیجه |
|---|---|
| پیادهسازی ساده | مناسب تولید سریع Mipmap |
| وزن برابر | میانگین یکنواخت Sampleها |
| هزینه پایین | مناسب Runtime Generation |
| پاسخ فرکانسی محدود | امکان باقیماندن Aliasing |
| Blur احتمالی | کاهش جزئیات نازک |
Gaussian Filter
Gaussian Filter به Sampleهای نزدیک مرکز وزن بیشتری و به
Sampleهای دورتر وزن کمتری میدهد.
Example 3 × 3 Gaussian Kernel
1 2 1
2 4 2
1 2 1
Normalize by total weight: 16
Gaussian میتواند فرکانسهای بالا را نرمتر از Box Filter
کاهش دهد، اما ممکن است Texture را کمی Blur کند.
Lanczos Filter
Lanczos یک فیلتر بازنمونهبرداری با کیفیت بالاتر است که تلاش
میکند جزئیات و وضوح لبهها را بهتر حفظ کند.
این فیلتر معمولاً برای تولید Offline Asset مناسبتر است؛
زیرا هزینه محاسباتی و تعداد Sampleهای بیشتری نسبت به Box
Filter دارد.
| Filter | کیفیت | هزینه | کاربرد |
|---|---|---|---|
| Box | متوسط | کم | Runtime و مسیرهای سریع |
| Gaussian | نرم و پایدار | متوسط | کاهش نویز و Aliasing |
| Lanczos | زیاد | زیاد | Asset Pipeline آفلاین |
Filter Footprint
Filter Footprint محدودهای از Level مبدأ است که برای تولید
یک Texel در Level مقصد خوانده میشود.
Small Footprint
┌─────┬─────┐
│ X │ X │
├─────┼─────┤
│ X │ X │
└─────┴─────┘
Larger Footprint
┌────┬────┬────┬────┐
│ X │ X │ X │ X │
├────┼────┼────┼────┤
│ X │ X │ X │ X │
├────┼────┼────┼────┤
│ X │ X │ X │ X │
├────┼────┼────┼────┤
│ X │ X │ X │ X │
└────┴────┴────┴────┘
Footprint بزرگتر میتواند Aliasing را بهتر کاهش دهد، اما
هزینه تولید Mipmap و احتمال Blur را افزایش میدهد.
مشکل Gamma در تولید Mipmap
بسیاری از Textureهای رنگی بهصورت sRGB ذخیره میشوند.
مقادیر ذخیرهشده در sRGB با شدت واقعی نور رابطه خطی ندارند.
اگر میانگینگیری مستقیماً روی مقادیر sRGB انجام شود، نتیجه
میتواند از نظر روشنایی نادرست و معمولاً تیرهتر از مقدار
فیزیکی مناسب باشد.
مسیر صحیح Gamma-Correct Downsampling
sRGB Samples
│
▼
Decode to Linear Light
│
▼
Apply Downsampling Filter
│
▼
Linear Result
│
▼
Encode to sRGB
│
▼
Store Destination Mip
این قاعده برای Textureهای رنگی اهمیت دارد، اما برای دادههایی
مانند Normal Map، Roughness، Mask یا Depth نباید بهطور
خودکار sRGB Decode اعمال شود.
Texture رنگی و Texture دادهای
| نوع 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 داشته
باشند.
Opaque Red Pixel
RGB = (1, 0, 0)
Alpha = 1
Transparent Black Pixel
RGB = (0, 0, 0)
Alpha = 0
میانگین مستقیم این دو Pixel میتواند رنگ لبه را تیره کند،
حتی اگر Pixel شفاف نباید در نتیجه بصری سهم رنگی مستقلی داشته
باشد.
Premultiplied Alpha
در Premultiplied Alpha، مقادیر RGB پیش از ذخیره در Alpha
ضرب میشوند.
Stored RGB = Original RGB × Alpha
این نمایش در بسیاری از عملیات Filtering و Compositing رفتار
مناسبتری دارد؛ زیرا Pixel کاملاً شفاف سهم رنگی صفر خواهد
داشت.
Halo Artifact
Halo زمانی ایجاد میشود که رنگ Pixelهای شفاف یا پسزمینه
هنگام Downsampling وارد لبه جسم شود.
Opaque Object Edge
████████░░░░
Hidden RGB in Transparent Pixels
████████BBBB
After Incorrect Filtering
██████▒▒▒▒▒▒
↑
Dark / Colored Halo
استفاده از Premultiplied Alpha، Edge Color Dilation یا
Padding مناسب میتواند این مشکل را کاهش دهد.
Alpha Coverage در Textureهای Cutout
در Textureهایی مانند برگ درخت، حصار یا مو، Alpha اغلب با
Threshold برای نگهداشتن یا حذف Pixel استفاده میشود.
میانگینگیری ساده Alpha میتواند باعث شود بخش زیادی از
Texture در Mipهای کوچکتر از Threshold پایینتر برود و ناپدید
شود.
High-Resolution Alpha
1 0 1 0
0 1 0 1
1 0 1 0
0 1 0 1
Average Downsample
0.5 0.5
0.5 0.5
Alpha Test Threshold = 0.6
All destination pixels disappear.
حفظ Alpha Coverage
برای Textureهای Alpha-Test میتوان مقادیر Alpha هر Mip را
طوری Scale یا تنظیم کرد که نسبت تقریبی Pixelهای عبورکننده از
Threshold حفظ شود.
| راهکار | هدف |
|---|---|
| Coverage Preservation | حفظ مساحت قابل مشاهده |
| Alpha Scaling | جبران افت مقدار Alpha |
| Alpha-to-Coverage | نمایش نرمتر مرز Cutout |
| Signed Distance Field | حفظ بهتر لبه در Scaleهای مختلف |
جزئیات نازک و خطوط باریک
سیم، نرده، خطوط شبکه، نوشتههای ریز و جزئیات باریک ممکن است
در Mipهای کوچکتر کاملاً از بین بروند.
Source
0 0 1 0
0 0 1 0
0 0 1 0
0 0 1 0
Downsampled
0.0 0.5
0.0 0.5
اگر Threshold یا Contrast بالا باشد، خط نازک ممکن است دیگر
قابل مشاهده نباشد.
حفظ جزئیات مهم
برخی Asset Pipelineها پس از Downsampling از Sharpening محدود
یا فیلترهای Detail-Preserving استفاده میکنند.
Sharpening بیشازحد میتواند Ringing، Overshoot یا Aliasing
جدید ایجاد کند؛ بنابراین باید بر اساس نوع Texture تنظیم شود.
| تنظیم | مزیت | خطر |
|---|---|---|
| Blur بیشتر | Aliasing کمتر | ازبینرفتن وضوح |
| Sharpen بیشتر | جزئیات واضحتر | Shimmering و Ringing |
| Filter متعادل | کیفیت پایدار | نیازمند تنظیم Asset |
تولید Mipmap برای Normal Map
Normal Map رنگ معمولی نیست. کانالهای آن معمولاً مؤلفههای
یک Vector جهت را نمایش میدهند.
میانگینگیری Vectorها میتواند طول Normal را کاهش دهد؛
بنابراین نتیجه باید بر اساس کاربرد، Normalize یا با روش
مناسبتری پردازش شود.
N0 ─┐
N1 ─┼──► Average Vector ─► Normalize ─► Destination Normal
N2 ─┤
N3 ─┘
Mipmap برای Roughness
Roughness پارامتری از مدل Material است و میانگین ساده آن
همیشه معادل میانگین رفتار بازتابی سطح نیست.
جزئیات ریز Normal Map نیز در فاصله دور میتوانند به
Roughness ظاهری تبدیل شوند. Asset Pipelineهای پیشرفته ممکن
است این اثر را هنگام تولید Mip در نظر بگیرند.
Mipmap برای Height Map
بسته به الگوریتم مصرفکننده، Height Map ممکن است به میانگین،
کمینه، بیشینه یا اطلاعات آماری دیگری نیاز داشته باشد.
| روش | کاربرد احتمالی |
|---|---|
| Average | نمایش ارتفاع متوسط |
| Minimum | حفظ پایینترین سطح |
| Maximum | حفظ برجستهترین ویژگی |
| Min-Max Pair | حفظ دامنه ارتفاع در هر Block |
Seam در Cubemap
اگر Faceهای Cubemap بهصورت کاملاً مستقل فیلتر شوند، Pixelهای
نزدیک مرز Faceها ممکن است اطلاعات Face مجاور را در نظر نگیرند.
نتیجه میتواند ایجاد خط یا ناپیوستگی در مرز Cubemap باشد،
بهخصوص در Mip Levelهای کوچکتر.
Cube Face A │ Cube Face B
│
Samples near the edge should consider
the neighboring cube direction.
Prefiltering در Environment Map
Mipهای Environment Map ممکن است فقط نسخه کوچکشده تصویر
نباشند. در Rendering مبتنی بر فیزیک، هر Level میتواند
نمایش ازپیشفیلترشدهای از نور محیط برای Roughness متفاوت
باشد.
Low Mip Level
│
└── Sharp Reflection
Higher Mip Level
│
└── Blurrier Reflection
Very High Mip Level
│
└── Broad Diffuse-Like Response
در چنین Resourceهایی، Mip Level علاوه بر Resolution میتواند
معنای فیزیکی خاصی نیز داشته باشد.
Pipeline پیشنهادی تولید Offline
Source Asset
│
▼
Determine Texture Semantics
│
├── Color
├── Normal
├── Roughness
├── Alpha Mask
└── Height / Data
│
▼
Convert to Processing Representation
│
▼
Apply Semantic-Aware Filter
│
▼
Preserve Alpha / Coverage / Vector Rules
│
▼
Generate Complete or Partial Mip Chain
│
▼
Compress and Package Asset
تولید Mipmap در Runtime
Render Targetهای پویا، Procedural Textureها، Video Frameها
یا Textureهای تولیدشده توسط Compute ممکن است به تولید Mipmap
در زمان اجرا نیاز داشته باشند.
Write Mip Level 0
│
▼
Memory Barrier / Transition
│
▼
Downsample Level 0 → Level 1
│
▼
Barrier
│
▼
Downsample Level 1 → Level 2
│
▼
Continue Until Required Level
این عملیات میتواند با Blit Engine، Render Pass، Compute
Shader یا دستور اختصاصی API انجام شود.
روشهای تولید Runtime
| روش | مزیت | محدودیت |
|---|---|---|
| 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 ممکن است مستقیماً از منبع اصلی
محاسبه شود.
| راهبرد | مزیت | محدودیت |
|---|---|---|
| Recursive | ساده و کمهزینه | تجمع خطای Filter |
| From Base Level | کنترل بهتر Footprint | هزینه Sample بیشتر |
چگونه کیفیت 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 ثابت نیست.
Magnification
1 Texel
│
▼
Many Screen Pixels
Approximate 1:1 Mapping
1 Texel
│
▼
1 Screen Pixel
Minification
Many Texels
│
▼
1 Screen Pixel
Mipmap بیشترین اهمیت را در حالت سوم دارد؛ زیرا GPU باید
نماینده مناسبی از یک ناحیه بزرگ Texture برای یک Pixel نهایی
پیدا کند.
Spatial Frequency چیست؟
Spatial Frequency میزان سرعت تغییر رنگ یا مقدار داده در
طول تصویر را توصیف میکند.
Textureهایی با نواحی بزرگ و یکنواخت دارای فرکانس فضایی
پایین هستند، درحالیکه خطوط باریک، Checkerboard، نوشتههای
ریز و نویز دارای فرکانس فضایی بالا هستند.
Low Spatial Frequency
████████ ████████
High Spatial Frequency
█ █ █ █ █ █ █ █ █ █ █ █
مثالهای فرکانس فضایی
| محتوا | فرکانس تقریبی | ریسک Minification |
|---|---|---|
| Gradient نرم | پایین | کم |
| سطح رنگی یکنواخت | بسیار پایین | بسیار کم |
| نوشته ریز | بالا | زیاد |
| Checkerboard | بسیار بالا | بسیار زیاد |
| نویز تصادفی | گسترده | بسیار زیاد |
Sampling Rate
Sampling Rate مشخص میکند در یک فاصله فضایی معین چند Sample
گرفته میشود.
وقتی Texture کوچک میشود، تعداد Pixelهای صفحه که آن را
نمایش میدهند کاهش پیدا میکند و در نتیجه نرخ Sampling
نسبت به جزئیات Texture کمتر میشود.
Texture Detail
A B C D E F G H
Dense Sampling
A B C D E F G H
Sparse Sampling
A D G
Undersampling
اگر Sampling Rate کمتر از مقدار لازم برای نمایش جزئیات
Texture باشد، سیستم وارد حالت
Undersampling
میشود.
در این شرایط، چند Pattern متفاوت میتوانند Sampleهای
مشابهی تولید کنند و GPU دیگر قادر نیست شکل اصلی Texture را
از دادههای محدود بازسازی کند.
Nyquist Limit
بر اساس اصل Nyquist، برای بازسازی یک فرکانس، نرخ Sampling
باید حداقل دو برابر آن فرکانس باشد.
Sampling Frequency ≥ 2 × Signal Frequency
در Texture Sampling، اگر جزئیات Texture سریعتر از توان
تفکیک Pixelهای صفحه تغییر کنند، آن جزئیات باید پیش از
Sampling کاهش یا حذف شوند.
Band-Limiting
Band-Limiting یعنی حذف فرکانسهایی که سیستم مقصد توان نمایش
آنها را ندارد.
هنگام ساخت Mipmap، Prefiltering تلاش میکند Texture را برای
Sampling در Resolution جدید Band-Limited کند.
Original Signal
│
▼
Low-Pass Filter
│
▼
Reduced High Frequencies
│
▼
Downsampling
اگر Downsampling پیش از Low-Pass Filtering انجام شود،
فرکانسهای بالا به فرکانسهای پایین کاذب تبدیل میشوند.
Frequency Folding
هنگام Undersampling، فرکانسهای بالا ممکن است بهصورت
Patternهای کمفرکانس اشتباه دیده شوند.
این پدیده یکی از دلایل ایجاد Moiré و الگوهای موجی روی
Textureهای ریز است.
Original High-Frequency Pattern
||||||||||||||||||||||||||||
Observed After Sparse Sampling
| | | | |
مثال Checkerboard
Checkerboard یکی از بهترین مثالها برای مشاهده Aliasing است؛
زیرا تغییرات رنگی سریع و منظم دارد.
█ ░ █ ░ █ ░ █ ░
░ █ ░ █ ░ █ ░ █
█ ░ █ ░ █ ░ █ ░
░ █ ░ █ ░ █ ░ █
اگر Sampleها همواره روی خانههای روشن یا تیره قرار بگیرند،
خروجی ممکن است کاملاً سفید، کاملاً سیاه یا دارای Pattern
نادرست شود.
Sample Phase
نتیجه Sampling فقط به فاصله Sampleها وابسته نیست؛ محل شروع
Sampleها نسبت به Pattern نیز اهمیت دارد.
Pattern
█ ░ █ ░ █ ░ █ ░
Sample Phase A
↑ ↑ ↑ ↑
All samples hit bright regions.
Sample Phase B
↑ ↑ ↑ ↑
All samples hit dark regions.
هنگام حرکت دوربین، Sample Phase تغییر میکند و همین موضوع
میتواند باعث Shimmering شود.
Shimmering
Shimmering نوعی ناپایداری زمانی است که در آن جزئیات Texture
هنگام حرکت دوربین روشن و خاموش یا جابهجا به نظر میرسند.
علت اصلی آن تغییر Sample Position نسبت به جزئیات
فرکانس بالاست.
Frame N
Sample → Bright Texel
Frame N + 1
Sample → Dark Texel
Visible Result
Bright → Dark → Bright → Dark
ناپایداری زمانی
یک تصویر ثابت ممکن است در یک Frame قابلقبول به نظر برسد،
اما هنگام حرکت دوربین مشکلات Sampling آشکار شوند.
به همین دلیل ارزیابی Mipmap تنها با Screenshot کافی نیست و
باید Texture در حرکت و زوایای مختلف بررسی شود.
Moiré Pattern
Moiré زمانی ظاهر میشود که دو الگوی منظم با فرکانس یا زاویه
نزدیک روی یکدیگر اثر بگذارند.
در Rendering، الگوی Texture و شبکه Pixelهای صفحه میتوانند
چنین تداخلی ایجاد کنند.
Fine Texture Pattern
+
Screen Sampling Grid
│
▼
Large False Wave Pattern
Moiré بیشتر کجا دیده میشود؟
| محتوا | علت |
|---|---|
| پارچه ریزبافت | Pattern متراکم و منظم |
| توری و حصار | خطوط باریک تکرارشونده |
| سقف سفالی یا آجر | جزئیات تکراری در فاصله دور |
| Grid و Checkerboard | فرکانس بالا در دو محور |
| خطوط مورب | تداخل زاویه Pattern و Pixel Grid |
LOD Popping
اگر GPU تنها یک Mip Level را انتخاب کند و ناگهان به Level
بعدی سوئیچ شود، ممکن است تغییر قابل مشاهدهای در وضوح یا
روشنایی Texture ایجاد شود.
Distance Increases
Mip 2 Mip 2 Mip 2 │ Mip 3 Mip 3
↑
Visible Transition
Trilinear Filtering با ترکیب دو Level مجاور تلاش میکند این
گذار را نرمتر کند.
Mipmap بهعنوان نمایش ازپیشفیلترشده
هر Mip Level را میتوان پاسخ تقریبی Texture برای یک محدوده
خاص از اندازه Sampling دانست.
Small Footprint
│
└── Use High-Resolution Mip
Medium Footprint
│
└── Use Mid-Resolution Mip
Large Footprint
│
└── Use Low-Resolution Mip
GPU بهجای فیلترکردن تعداد زیادی Texel از Level 0 در هر
Frame، از نتیجه Prefiltering ذخیرهشده در Level مناسب
استفاده میکند.
چرا Bilinear روی Level 0 کافی نیست؟
Bilinear Filtering تنها چهار Texel نزدیک را ترکیب میکند.
اگر Footprint واقعی Pixel صدها Texel را پوشش دهد، چهار Sample
نمیتوانند نماینده صحیح آن ناحیه باشند.
Actual Pixel Footprint
┌────────────────────────────┐
│ │
│ Many Texels │
│ │
└────────────────────────────┘
Bilinear Fetch
X X
X X
انتخاب Mip مناسب باعث میشود همان Footprint بزرگ به چند
Texel از Level کوچکتر نگاشت شود.
Mipmap چه مشکلاتی را کاملاً حل نمیکند؟
Mipmap یک تقریب مؤثر برای Footprintهای تقریباً مربعی است،
اما برای Footprintهای بسیار کشیده یا زاویهدار ممکن است کافی
نباشد.
| وضعیت | محدودیت | راهکار تکمیلی |
|---|---|---|
| سطح با زاویه شدید | 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 باقی
میمانند.
More Blur More Aliasing
Smooth ───────── Balanced ───────── Sharp
Stable Detailed
but soft but unstable
تنظیم مناسب به نوع Asset، فاصله مشاهده، حرکت دوربین و سبک
بصری پروژه بستگی دارد.
آزمایش عملی Aliasing
| آزمایش | هدف |
|---|---|
| حرکت آرام دوربین | تشخیص 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
پاسخ سه سؤال را پیدا کند.
|
سؤال |
اهمیت |
|---|---|
|
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 چه کمکی میکند؟
|
قابلیت |
دلیل |
|---|---|
|
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 است.
|
مرحله |
خروجی |
|---|---|
|
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 |
|---|---|---|
|
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 انتخاب کند،
باید بین دو حالت یکی را انتخاب کند.
|
انتخاب |
نتیجه |
|---|---|
|
Mip بزرگتر |
Aliasing |
|
Mip کوچکتر |
Blur شدید |
مثال باند فرودگاه
مشهورترین مثال،
Texture آسفالت باند فرودگاه است.
نزدیک دوربین،
خطوط بسیار واضح هستند.
اما هرچه دورتر میشوند،
Texture تقریباً به یک نوار بسیار باریک تبدیل میشود.
Near Camera
██████████████████████
Far Away
====================
دقیقاً همینجا Trilinear شکست میخورد.
آثار بصری
|
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
مقادیر رایج
|
تنظیم |
بیشترین نسبت |
|---|---|
|
2× |
2:1 |
|
4× |
4:1 |
|
8× |
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 تقریبی |
|---|---|
|
1× |
Bilinear |
|
2× |
2 Sample |
|
4× |
4 Sample |
|
8× |
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 |
کیفیت |
هزینه |
|---|---|---|
|
2× |
متوسط |
کم |
|
4× |
خوب |
متوسط |
|
8× |
بسیار خوب |
زیاد |
|
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 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 |
|---|---|
|
داده تصویری |
قوانین خواندن داده |
|
Texelها |
Filtering |
|
Mipmapها |
Address Mode |
|
در حافظه ذخیره میشود |
مجموعه تنظیمات Sampling |
یک تشبیه ساده
Texture را مانند یک کتاب در نظر بگیرید.
Sampler تعیین میکند که این کتاب
چگونه خوانده شود.
Texture
↓
Image Data
Sampler
↓
Reading Rules
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
|
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
مقایسه حالتها
|
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 |
زمان استفاده |
|---|---|
|
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
مستقل از هم هستند.
|
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 چگونه دیده میشوند؟
|
نام |
توضیح |
|---|---|
|
Point |
بدون Interpolation |
|
Linear |
Bilinear |
|
Linear + Linear Mip |
Trilinear |
|
Anisotropic |
سختافزاری |
مقایسه کیفیت
|
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 |
جلوگیری از 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
|
ویژگی |
نتیجه |
|---|---|
|
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های مشترک
خواهند داشت.
نتیجه نهایی
|
ویژگی |
نتیجه |
|---|---|
|
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 را خراب میکنند؟
|
عامل |
اثر |
|---|---|
|
Noise شدید |
پرش زیاد بین Texelها |
|
Random UV |
کاهش Locality |
|
Procedural Sampling |
Hit Rate پایین |
|
Textureهای بسیار بزرگ |
جابجایی مداوم Cache |
چه چیزهایی 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 تقریباً همیشه تصمیم اشتباهی است.
|
فعال |
نتیجه |
|---|---|
|
✔ |
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
اشتباهات رایج
|
اشتباه |
نتیجه |
|---|---|
|
بدون 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
-
Texture فقط یک تصویر نیست؛ یک منبع داده ساختاریافته در حافظه GPU است.
-
Texture Sampling یک عملیات سختافزاری پیچیده است، نه یک خواندن ساده از حافظه.
-
LOD از مشتقهای ddx و ddy محاسبه میشود، نه صرفاً از فاصله دوربین.
-
Bilinear، Trilinear و Anisotropic هر کدام مشکل متفاوتی را حل میکنند.
-
Sampler State قوانین Sampling را کنترل میکند، نه خود Texture را.
-
Texture Cache مهمترین عامل سرعت بالای Sampling است.
-
Swizzled Layout باعث افزایش چشمگیر Cache Hit میشود.
-
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 ذخیره میشوند.
|
نوع داده |
نمونه |
|---|---|
|
متغیرهای محلی |
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 جلوگیری کنیم؟
|
روش |
تأثیر |
|---|---|
|
کاهش 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 را همزمان تحلیل میکنند، نه بهصورت جداگانه.
اول یک مثال واقعی
فرض کنید ۳۲ کارگر
در حال ساخت یک دیوار هستند.
اگر هر کارگر
آجرهای خودش را از انبار اصلی بردارد،
زمان زیادی صرف رفتوآمد میشود.
اما اگر یک پالت آجر
کنار همه آنها قرار بگیرد،
همه میتوانند
از همان پالت استفاده کنند.
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 نیز وجود دارد که در صورت نادیده گرفتن، میتواند بخش زیادی از این مزیت را از بین ببرد.
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
فقط یک حالت ندارد.
|
تعداد درخواست |
نوع 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
هیچ سودی ندارد.
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 استفاده نکنیم؟
|
شرایط |
دلیل |
|---|---|
|
داده فقط یک بار استفاده میشود |
هزینه کپی بیهوده است |
|
حجم داده بسیار زیاد است |
کاهش 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 |
|---|---|---|
|
مدیریت |
برنامهنویس / کامپایلر |
سختافزار |
|
بارگذاری داده |
دستی |
خودکار |
|
کنترل کامل |
بله |
خیر |
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
است.
|
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
|
مزیت |
دلیل |
|---|---|
|
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 میشود. به همین دلیل، الگوهای دسترسی متوالی تقریباً همیشه نسبت به دسترسیهای کاملاً تصادفی عملکرد بهتری دارند.



