تخمین زمان پردازش فریم 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. مقدار زیادی بیکاری در طول رویدادهای dequeueBuffer و eglSwapBuffer .

زمان فعال CPU

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

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

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


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

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

یک اسکرین شات که وضعیت اجرای یک رشته پین ​​شده را نشان می دهد که با مسیر CPU مطابقت دارد.
شکل x. وضعیت اجرای رشته پین ​​شده با مسیر 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 استفاده کنید.

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

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

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

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

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

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

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

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

تخمین زمان پردازش فریم 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. مقدار زیادی بیکاری در طول رویدادهای dequeueBuffer و eglSwapBuffer .

زمان فعال CPU

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

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

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


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

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

یک اسکرین شات که وضعیت اجرای یک رشته پین ​​شده را نشان می دهد که با مسیر CPU مطابقت دارد.
شکل x. وضعیت اجرای رشته پین ​​شده با مسیر 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 استفاده کنید.

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

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

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

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

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

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

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

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

تخمین زمان پردازش فریم 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. مقدار زیادی بیکاری در طول رویدادهای dequeueBuffer و eglSwapBuffer .

زمان فعال CPU

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

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

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


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

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

یک اسکرین شات که وضعیت اجرای یک رشته پین ​​شده را نشان می دهد که با مسیر CPU مطابقت دارد.
شکل x. وضعیت اجرای رشته پین ​​شده با مسیر 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 استفاده کنید.

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

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

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

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

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

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

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

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

تخمین زمان پردازش فریم 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. مقدار زیادی بیکاری در طول رویدادهای dequeueBuffer و eglSwapBuffer .

زمان فعال CPU

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

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

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


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

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

یک اسکرین شات که وضعیت اجرای یک رشته پین ​​شده را نشان می دهد که با مسیر CPU مطابقت دارد.
شکل x. وضعیت اجرای رشته پین ​​شده با مسیر 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 که با قاب مرتبط هستند کلیک کنید.

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

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

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

شمارنده های GPU

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

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

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

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

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

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

دستگاه های Adreno

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

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

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

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

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

  • رئوس سایه دار / دوم
  • قطعات سایه دار / دوم
  • درآمدهای سایه زنی زمان
  • قطعات زمان