گران‌ترین پاس‌های رندر خود را شناسایی کنید، گران‌ترین پاس‌های رندر خود را شناسایی کنید، گران‌ترین پاس‌های رندر خود را شناسایی کنید، گران‌ترین پاس‌های رندر خود را شناسایی کنید

AGI Frame Profiler به شما امکان می دهد تا پاس های رندر جداگانه ای را که برای ایجاد یک فریم از برنامه شما استفاده می شود، بررسی کنید. این کار را با رهگیری و ضبط تمام حالت های لازم برای اجرای هر تماس API گرافیکی انجام می دهد. در Vulkan این به صورت بومی با استفاده از سیستم لایه بندی Vulkan انجام می شود. در OpenGL، دستورات با استفاده از ANGLE رهگیری می شوند، که دستورات OpenGL را به فراخوانی Vulkan تبدیل می کند تا بتوانند روی سخت افزار اجرا شوند.

دستگاه های آدرنو

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

نمای قاب تایم لاین
شکل 1. نمای جدول زمانی قاب

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

شناسایی طولانی ترین پاس رندر در نمای Frame Timeline
شکل 2. شناسایی طولانی ترین پاس رندر در نمای Frame Timeline

برش GPU مربوط به مجوز رندر مربوطه اطلاعاتی را در مورد آنچه در رندر پاس اتفاق می افتد ارائه می دهد:

  1. Binning: جایی که رئوس بر اساس جایی که روی صفحه قرار می گیرند در سطل ها قرار می گیرند
  2. رندر: جایی که پیکسل ها یا قطعات سایه می زنند
  3. بارگیری/ذخیره GMEM: زمانی که محتویات یک فریم بافر از حافظه داخلی GPU به حافظه اصلی بارگیری یا ذخیره می شود.

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

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

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

شناسایی بارها و ذخیره‌های GMEM
شکل 3. شناسایی بارها و ذخایر GMEM

بررسی پاس رندر بزرگ

برای مشاهده تمام دستورات ترسیم فردی صادر شده در طول رندر پاس:

  1. روی رندر پاس در تایم لاین کلیک کنید. با این کار پاس رندر در سلسله مراتبی که در پنجره فرمان های Frame Profiler وجود دارد باز می شود.

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

پنجره دستورات
شکل 4. پنجره دستورات

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

انتخاب فراخوان‌های قرعه‌کشی منفرد در قسمت Commands
شکل 5. انتخاب فراخوان‌های انفرادی در قسمت Commands

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

صفحه خط لوله
شکل 6. صفحه خط لوله

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

بخش Input Assembler در قسمت Pipeline
شکل 7. بخش Input Assembler در صفحه Pipeline

بخش Vertex Shader اطلاعاتی در مورد سایه زن راس که در طول این قرعه کشی استفاده کردید ارائه می دهد و همچنین می تواند مکان خوبی برای بررسی اینکه آیا binning به عنوان یک مشکل شناسایی شده است. می توانید SPIR-V و GLSL دیکامپایل شده سایه زن مورد استفاده را ببینید و بافرهای یکنواخت محدود شده را برای این فراخوانی بررسی کنید. برای جزئیات بیشتر به تحلیل عملکرد سایه زن رجوع کنید.

بخش Vertex Shader در قسمت Pipeline
شکل 8. بخش Vertex Shader در قسمت Pipeline

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

بخش Rasterizer در پنجره Pipeline
شکل 9. بخش Rasterizer در پنجره Pipeline

بخش Fragment Shader اطلاعات زیادی را ارائه می دهد که در بخش Vertex Shader یافت می شود، اما مختص به Fragment Shader است. در این حالت، می توانید در واقع مشاهده کنید که کدام بافت ها در حال بسته شدن هستند و با کلیک روی دسته، آنها را بررسی کنید.

بخش Fragment Shader در پنجره Pipeline
شکل 10. بخش Fragment Shader در پنجره Pipeline

بررسی پاس رندر کوچکتر

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

پاس های رندر کوچکتر برای نمونه برداری از بافر وضوح بومی استفاده می شود
شکل 11. پاس های رندر کوچکتر که برای نمونه برداری از بافر وضوح بومی استفاده می شود
،

AGI Frame Profiler به شما امکان می دهد تا پاس های رندر جداگانه ای را که برای ایجاد یک فریم از برنامه شما استفاده می شود، بررسی کنید. این کار را با رهگیری و ضبط تمام حالت های لازم برای اجرای هر تماس API گرافیکی انجام می دهد. در Vulkan این به صورت بومی با استفاده از سیستم لایه بندی Vulkan انجام می شود. در OpenGL، دستورات با استفاده از ANGLE رهگیری می شوند، که دستورات OpenGL را به فراخوانی Vulkan تبدیل می کند تا بتوانند روی سخت افزار اجرا شوند.

دستگاه های آدرنو

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

نمای قاب تایم لاین
شکل 1. نمای جدول زمانی قاب

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

شناسایی طولانی ترین پاس رندر در نمای Frame Timeline
شکل 2. شناسایی طولانی ترین پاس رندر در نمای Frame Timeline

برش GPU مربوط به مجوز رندر مربوطه اطلاعاتی را در مورد آنچه در رندر پاس اتفاق می افتد ارائه می دهد:

  1. Binning: جایی که رئوس بر اساس جایی که روی صفحه قرار می گیرند در سطل ها قرار می گیرند
  2. رندر: جایی که پیکسل ها یا قطعات سایه می زنند
  3. بارگیری/ذخیره GMEM: زمانی که محتویات یک فریم بافر از حافظه داخلی GPU به حافظه اصلی بارگیری یا ذخیره می شود.

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

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

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

شناسایی بارها و ذخیره‌های GMEM
شکل 3. شناسایی بارها و ذخایر GMEM

بررسی پاس رندر بزرگ

برای مشاهده تمام دستورات ترسیم فردی صادر شده در طول رندر پاس:

  1. روی رندر پاس در تایم لاین کلیک کنید. با این کار پاس رندر در سلسله مراتبی که در پنجره فرمان های Frame Profiler وجود دارد باز می شود.

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

پنجره دستورات
شکل 4. پنجره دستورات

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

انتخاب فراخوان‌های قرعه‌کشی منفرد در قسمت Commands
شکل 5. انتخاب فراخوان‌های انفرادی در قسمت Commands

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

صفحه خط لوله
شکل 6. صفحه خط لوله

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

بخش Input Assembler در قسمت Pipeline
شکل 7. بخش Input Assembler در صفحه Pipeline

بخش Vertex Shader اطلاعاتی در مورد سایه زن راس که در طول این قرعه کشی استفاده کردید ارائه می دهد و همچنین می تواند مکان خوبی برای بررسی اینکه آیا binning به عنوان یک مشکل شناسایی شده است. می توانید SPIR-V و GLSL دیکامپایل شده سایه زن مورد استفاده را ببینید و بافرهای یکنواخت محدود شده را برای این فراخوانی بررسی کنید. برای جزئیات بیشتر به تحلیل عملکرد سایه زن رجوع کنید.

بخش Vertex Shader در قسمت Pipeline
شکل 8. بخش Vertex Shader در قسمت Pipeline

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

بخش Rasterizer در پنجره Pipeline
شکل 9. بخش Rasterizer در پنجره Pipeline

بخش Fragment Shader اطلاعات زیادی را ارائه می دهد که در بخش Vertex Shader یافت می شود، اما مختص به Fragment Shader است. در این حالت، می توانید در واقع مشاهده کنید که کدام بافت ها در حال بسته شدن هستند و با کلیک روی دسته، آنها را بررسی کنید.

بخش Fragment Shader در پنجره Pipeline
شکل 10. بخش Fragment Shader در پنجره Pipeline

بررسی پاس رندر کوچکتر

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

پاس های رندر کوچکتر برای نمونه برداری از بافر وضوح بومی استفاده می شود
شکل 11. پاس های رندر کوچکتر که برای نمونه برداری از بافر وضوح بومی استفاده می شود
،

AGI Frame Profiler به شما امکان می دهد تا پاس های رندر جداگانه ای را که برای ایجاد یک فریم از برنامه شما استفاده می شود، بررسی کنید. این کار را با رهگیری و ضبط تمام حالت های لازم برای اجرای هر تماس API گرافیکی انجام می دهد. در Vulkan این به صورت بومی با استفاده از سیستم لایه بندی Vulkan انجام می شود. در OpenGL، دستورات با استفاده از ANGLE رهگیری می شوند، که دستورات OpenGL را به فراخوانی Vulkan تبدیل می کند تا بتوانند روی سخت افزار اجرا شوند.

دستگاه های آدرنو

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

نمای قاب تایم لاین
شکل 1. نمای جدول زمانی قاب

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

شناسایی طولانی ترین پاس رندر در نمای Frame Timeline
شکل 2. شناسایی طولانی ترین پاس رندر در نمای Frame Timeline

برش GPU مربوط به مجوز رندر مربوطه اطلاعاتی را در مورد آنچه در رندر پاس اتفاق می افتد ارائه می دهد:

  1. Binning: جایی که رئوس بر اساس جایی که روی صفحه قرار می گیرند در سطل ها قرار می گیرند
  2. رندر: جایی که پیکسل ها یا قطعات سایه می زنند
  3. بارگیری/ذخیره GMEM: زمانی که محتویات یک فریم بافر از حافظه داخلی GPU به حافظه اصلی بارگیری یا ذخیره می شود.

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

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

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

شناسایی بارها و ذخیره‌های GMEM
شکل 3. شناسایی بارها و ذخایر GMEM

بررسی پاس رندر بزرگ

برای مشاهده تمام دستورات ترسیم فردی صادر شده در طول رندر پاس:

  1. روی رندر پاس در تایم لاین کلیک کنید. با این کار پاس رندر در سلسله مراتبی که در پنجره فرمان های Frame Profiler وجود دارد باز می شود.

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

پنجره دستورات
شکل 4. پنجره دستورات

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

انتخاب فراخوان‌های قرعه‌کشی منفرد در قسمت Commands
شکل 5. انتخاب فراخوان‌های انفرادی در قسمت Commands

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

صفحه خط لوله
شکل 6. صفحه خط لوله

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

بخش Input Assembler در قسمت Pipeline
شکل 7. بخش Input Assembler در صفحه Pipeline

بخش Vertex Shader اطلاعاتی در مورد سایه زن راس که در طول این قرعه کشی استفاده کردید ارائه می دهد و همچنین می تواند مکان خوبی برای بررسی اینکه آیا binning به عنوان یک مشکل شناسایی شده است. می توانید SPIR-V و GLSL دیکامپایل شده سایه زن مورد استفاده را ببینید و بافرهای یکنواخت محدود شده را برای این فراخوانی بررسی کنید. برای جزئیات بیشتر به تحلیل عملکرد سایه زن رجوع کنید.

بخش Vertex Shader در قسمت Pipeline
شکل 8. بخش Vertex Shader در قسمت Pipeline

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

بخش Rasterizer در پنجره Pipeline
شکل 9. بخش Rasterizer در پنجره Pipeline

بخش Fragment Shader اطلاعات زیادی را ارائه می دهد که در بخش Vertex Shader یافت می شود، اما مختص به Fragment Shader است. در این حالت، می توانید در واقع مشاهده کنید که کدام بافت ها در حال بسته شدن هستند و با کلیک روی دسته، آنها را بررسی کنید.

بخش Fragment Shader در پنجره Pipeline
شکل 10. بخش Fragment Shader در پنجره Pipeline

بررسی پاس رندر کوچکتر

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

پاس های رندر کوچکتر برای نمونه برداری از بافر وضوح بومی استفاده می شود
شکل 11. پاس های رندر کوچکتر که برای نمونه برداری از بافر وضوح بومی استفاده می شود
،

AGI Frame Profiler به شما امکان می دهد تا پاس های رندر جداگانه ای را که برای ایجاد یک فریم از برنامه شما استفاده می شود، بررسی کنید. این کار را با رهگیری و ضبط تمام حالت های لازم برای اجرای هر تماس API گرافیکی انجام می دهد. در Vulkan این به صورت بومی با استفاده از سیستم لایه بندی Vulkan انجام می شود. در OpenGL، دستورات با استفاده از ANGLE رهگیری می شوند، که دستورات OpenGL را به فراخوانی Vulkan تبدیل می کند تا بتوانند روی سخت افزار اجرا شوند.

دستگاه های آدرنو

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

نمای قاب تایم لاین
شکل 1. نمای جدول زمانی قاب

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

شناسایی طولانی ترین پاس رندر در نمای Frame Timeline
شکل 2. شناسایی طولانی ترین پاس رندر در نمای Frame Timeline

برش GPU مربوط به مجوز رندر مربوطه اطلاعاتی را در مورد آنچه در رندر پاس اتفاق می افتد ارائه می دهد:

  1. Binning: جایی که رئوس بر اساس جایی که روی صفحه قرار می گیرند در سطل ها قرار می گیرند
  2. رندر: جایی که پیکسل ها یا قطعات سایه می زنند
  3. بارگیری/ذخیره GMEM: زمانی که محتویات یک فریم بافر از حافظه داخلی GPU به حافظه اصلی بارگیری یا ذخیره می شود.

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

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

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

شناسایی بارها و ذخیره‌های GMEM
شکل 3. شناسایی بارها و ذخایر GMEM

بررسی پاس رندر بزرگ

برای مشاهده تمام دستورات ترسیم فردی صادر شده در طول رندر پاس:

  1. روی رندر پاس در تایم لاین کلیک کنید. با این کار، رندر پاس در سلسله مراتبی که در پنجره فرمان‌های Frame Profiler وجود دارد، باز می‌شود.

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

پنجره دستورات
شکل 4. پنجره دستورات

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

انتخاب فراخوان‌های قرعه‌کشی منفرد در قسمت Commands
شکل 5. انتخاب فراخوان‌های انفرادی در قسمت Commands

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

صفحه خط لوله
شکل 6. صفحه خط لوله

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

بخش Input Assembler در قسمت Pipeline
شکل 7. بخش Input Assembler در صفحه Pipeline

بخش Vertex Shader اطلاعاتی در مورد سایه زن راس که در طول این قرعه کشی استفاده کردید ارائه می دهد و همچنین می تواند مکان خوبی برای بررسی اینکه آیا binning به عنوان یک مشکل شناسایی شده است. می توانید SPIR-V و GLSL دیکامپایل شده سایه زن مورد استفاده را ببینید و بافرهای یکنواخت محدود شده را برای این فراخوانی بررسی کنید. برای جزئیات بیشتر به تحلیل عملکرد سایه زن رجوع کنید.

بخش Vertex Shader در قسمت Pipeline
شکل 8. بخش Vertex Shader در قسمت Pipeline

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

بخش Rasterizer در پنجره Pipeline
شکل 9. بخش Rasterizer در پنجره Pipeline

بخش Fragment Shader اطلاعات زیادی را ارائه می دهد که در بخش Vertex Shader یافت می شود، اما مختص به Fragment Shader است. در این حالت، می توانید در واقع مشاهده کنید که کدام بافت ها در حال بسته شدن هستند و با کلیک روی دسته، آنها را بررسی کنید.

بخش Fragment Shader در پنجره Pipeline
شکل 10. بخش Fragment Shader در پنجره Pipeline

بررسی پاس رندر کوچکتر

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

پاس های رندر کوچکتر برای نمونه برداری از بافر وضوح بومی استفاده می شود
شکل 11. پاس های رندر کوچکتر که برای نمونه برداری از بافر وضوح بومی استفاده می شود