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

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

زمان پردازنده

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

کل زمان پردازنده

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

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


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

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

تصویری که میزان زیادی از زمان بیکاری را در طول رویدادهای dequeueBuffer و eglSwapBuffer نشان می‌دهد.
شکل ۳. مقدار زیادی از CPU در حین رویدادهای dequeueBuffer و eglSwapBuffer بیکار می‌ماند.

زمان فعال پردازنده

زمان فعال پردازنده (Active CPU Time) مشخص می‌کند که چه زمانی پردازنده (CPU) کد برنامه را بدون قرار گرفتن در حالت بیکاری (idle) اجرا می‌کند.

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

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


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

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

تصویری که وضعیت اجرای یک رشته پین‌شده را که با مسیر CPU مطابقت دارد، نمایش می‌دهد.
شکل ۷. وضعیت اجرای رشته پین‌شده با مسیر CPU مطابقت دارد.

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

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

تخمین زمان فریم GPU

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

برش‌های پردازنده گرافیکی

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

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

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

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

تصویری از چندین فریم که به ترتیب اجرا می‌شوند.
شکل ۹. چندین فریم به ترتیب اجرا می‌شوند.
تصویری از صفحه نمایش که در آن AGI روی کار یک فریم زوم کرده است.
شکل ۱۰. بزرگنمایی روی کار یک فریم به صورت جداگانه.

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

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

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


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

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

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

تصویری از چندین فریم که به ترتیب اجرا می‌شوند.
شکل ۱۳. چندین فریم به ترتیب اجرا می‌شوند.
تصویری که در آن AGI با چندین مرحله رندر، روی یک فریم زوم شده است.
شکل ۱۴. بزرگنمایی روی یک فریم با چندین مرحله رندر.

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

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

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

تصویری از یک برنامه که به شدت به پردازنده گرافیکی وابسته است و الگوی رندرینگ آن به شناسایی مرزهای فریم کمک می‌کند.
شکل ۱۶. یک برنامه‌ی به‌شدت وابسته به پردازنده‌ی گرافیکی (GPU) با الگوی رندرینگ که به شناسایی مرزهای فریم کمک می‌کند.

شمارنده‌های پردازنده گرافیکی (GPU)

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

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

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

تصویری از میزان استفاده از پردازنده گرافیکی و مسیرهای صف پردازنده گرافیکی در دستگاه Mali.
شکل ۱۷. میزان استفاده از پردازنده گرافیکی (GPU) و مسیر صف پردازنده گرافیکی (GPU Queue) در یک دستگاه Mali.

اگر برنامه بیشتر به پردازنده گرافیکی (GPU) وابسته باشد، میزان استفاده از پردازنده گرافیکی (GPU) می‌تواند به طور مداوم بسیار بالا باشد. در این حالت، می‌توانید از نمودارهای استفاده از صف قطعه‌ای (fragment queue) و استفاده از صف غیر قطعه‌ای (non-fragment queue ) برای نظارت بر فعالیت پردازنده گرافیکی (GPU) و تخمین زمان فریم پردازنده گرافیکی (GPU frame time) استفاده کنید. با جستجوی الگوها در نمودارهای قطعه‌ای و غیر قطعه‌ای ، می‌توانید تخمین تقریبی از محل مرزهای یک فریم به دست آورید و از آن برای اندازه‌گیری زمان فریم پردازنده گرافیکی (GPU frame time) استفاده کنید.

تصویری از آهنگ‌های قطعه قطعه و غیر قطعه قطعه.
شکل ۱۸. مسیرهای قطعه قطعه و غیر قطعه قطعه .

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

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

تصویری از درصد استفاده از پردازنده گرافیکی و مسیرهای صف پردازنده گرافیکی در دستگاه آدرنو.
شکل ۱۹. درصد استفاده از پردازنده گرافیکی و مسیرهای صف پردازنده گرافیکی در یک دستگاه آدرنو

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

تصویری از دستورالعمل‌های رأس / مسیر دوم.
شکل ۲۰. دستورالعمل‌های رأس / مسیر دوم .

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

  • رئوس سایه‌دار / ثانیه
  • قطعات سایه‌دار / ثانیه
  • درصد زمان سایه زدن رئوس
  • قطعات سایه زنی زمان٪