تخمین زمان پردازش فریم CPU و GPU، تخمین زمان پردازش فریم CPU و GPU، تخمین زمان پردازش فریم CPU و GPU، تخمین زمان پردازش فریم CPU و GPU

تخمین زمان پردازش فریم CPU و GPU (زمان فریم) برای درک عملکرد برنامه و یافتن گلوگاه ها ضروری است. وقتی یک برنامه را با AGI نمایه می‌کنید، System Profiler داده‌های ردیابی را ارائه می‌دهد که می‌توانید برای تخمین زمان‌های فریم استفاده کنید.

زمان های CPU

در AGI، می‌توانید کل و زمان‌های فعال CPU را در مسیر CPU نمایه سیستم مشاهده کنید.

کل زمان CPU

برای اندازه گیری کل زمان صرف شده CPU، محدوده زمانی را انتخاب کنید که شامل زمان بین رویدادهای ارسال فریم متوالی است. رویدادهای ارسال فریم عبارتند از eglSwapBuffers (برای OpenGL) و vkQueuePresentKHR (برای Vulkan).

تصویری از رویدادهای eglSwapBuffer.
شکل 1. زمان بین دو رویداد eglSwapBuffer .


تصویری از یک رویداد vkQueuePresentKHR.
شکل 2. زمان بین دو رویداد vkQueuePresentKHR .

این اندازه گیری تخمینی از زمان کل CPU است، اما لزوماً نشان دهنده زمان فعال CPU نیست. برای مثال، در برنامه‌های متصل به GPU، CPU ممکن است قبل از ارسال یک فریم جدید منتظر بماند تا GPU کار خود را کامل کند. این اغلب زمانی اتفاق می‌افتد که یک رویداد dequeueBuffer ، eglSwapBuffer (برای OpenGL)، یا vkQueuePresent (برای Vulkan) بخش زیادی از زمان CPU را اشغال کند. زمان انتظار در کل زمان CPU گنجانده شده است، اما زمان CPU فعال نیست.

یک اسکرین شات که مقدار زیادی بیکاری را در طول رویدادهای dequeueBuffer و eglSwapBuffer نشان می دهد.
شکل 3. مقدار زیادی از CPU بیکار در طول رویدادهای dequeueBuffer و eglSwapBuffer .

زمان فعال CPU

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

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

یک اسکرین شات از دو دوره زمان CPU که می تواند برای اندازه گیری زمان فعال CPU استفاده شود.
شکل 5. دو دوره از زمان CPU که می تواند برای اندازه گیری زمان فعال CPU استفاده شود.


تصویری از یک برنامه چند رشته‌ای که رشته‌های کار دیگری دارد در حالی که رشته اصلی بی‌حرکت است.
شکل 6. یک برنامه چند رشته ای که دارای رشته های کاری دیگر در حالی که رشته اصلی بیکار است.

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

یک اسکرین شات که وضعیت اجرای یک رشته پین ​​شده را نشان می دهد که با مسیر CPU مطابقت دارد.
شکل 7. حالت در حال اجرا thread پین شده با مسیر CPU مطابقت دارد.

برای کمک به شناسایی برش های برنامه، می توانید نشانگرهای ATrace را به برنامه خود اضافه کنید. این نشانگرها را در مسیر CPU System Profiler نمایش می دهد.

یک اسکرین شات از برش های ATrace که در یک مسیر CPU نشان داده شده است.
شکل 8. برش های ATrace در مسیر CPU نشان داده شده است.

تخمین زمان فریم پردازنده گرافیکی

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

برش های GPU

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

دستگاه های مالی

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

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

اسکرین شات از چندین فریم که به ترتیب اجرا می شوند.
شکل 9. فریم های متعددی که به ترتیب اجرا می شوند.
یک اسکرین شات که در آن AGI روی کار یک فریم جداگانه زوم می شود.
شکل 10. روی کار یک فریم جداگانه زوم شده است.

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

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

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


تصویری از چندین رویداد Vulkan انتخاب شده برای یک فریم.
شکل 12. چندین رویداد Vulkan برای یک فریم انتخاب شده است.

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

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

اسکرین شات از چندین فریم که به ترتیب اجرا می شوند.
شکل 13. فریم های متعددی که به ترتیب اجرا می شوند.
تصویری که در آن AGI روی یک قاب با چندین پاس رندر بزرگ‌نمایی می‌شود.
شکل 14. روی یک فریم با چندین پاس رندر بزرگنمایی شده است.

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

تصویری از یک برنامه مبتنی بر Vulkan که در آن رویدادهای قاب Vulkan انتخاب می‌شوند.
شکل 15. یک برنامه مبتنی بر Vulkan که در آن رویدادهای Vulkan برای یک فریم انتخاب می‌شوند.

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

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

شمارنده های GPU

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

دستگاه های مالی

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

تصویری از استفاده از GPU و مسیرهای GPU Queue در یک دستگاه مالی.
شکل 17. استفاده از GPU و صف GPU در یک دستگاه مالی ردیابی می شود.

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

اسکرین شات از قطعه قطعه و آهنگ های غیرقطعه.
شکل 18. آهنگ های قطعه ای و غیر قطعه ای .

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

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

تصویری از درصد استفاده از GPU و مسیرهای صف GPU در دستگاه Adreno.
شکل 19. درصد استفاده از GPU و صف GPU در دستگاه Adreno ردیابی می شود.

اگر برنامه به GPU فشرده‌تر است، و برنامه به طور مداوم درصد استفاده از GPU بالایی دارد، می‌توانید از دستورالعمل‌های Vertex / Second and Fragment Instructions / Second برای تخمین زمان‌های فریم GPU استفاده کنید. با جستجوی الگوهایی در سطوح فعالیت این آهنگ‌ها، می‌توانید تخمین تقریبی از جایی که مرزهای یک فریم است به دست آورید و از آن برای اندازه‌گیری زمان فریم GPU استفاده کنید.

تصویری از دستورالعمل های Vertex / آهنگ دوم.
شکل 20. دستورالعمل های Vertex / آهنگ دوم .

این آهنگ های دیگر ممکن است اطلاعات مشابهی را ارائه دهند:

  • رئوس سایه دار / دوم
  • قطعات سایه دار / دوم
  • % زمان سایه افکنی
  • % Time Shading Fragments