تجزیه و تحلیل کارایی حافظه، تجزیه و تحلیل کارایی حافظه، تجزیه و تحلیل کارایی حافظه، تجزیه و تحلیل کارایی حافظه

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

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

در دستگاه‌های آدرنو، ابتدا با هایلایت کردن یک دوره زمانی سازگار با یک فریم واحد GPU، همانطور که در «تخمین زمان پردازش فریم CPU و GPU» توضیح داده شده است، شروع کنید. از تکنیک شرح داده شده در آن صفحه که شامل استفاده از درصد استفاده از GPU یا مسیر شمارنده مشابه برای مرزهای زمانی فریم شما می‌شود، استفاده کنید زیرا مسیرهای شمارنده همگی از یک تکنیک زمان‌بندی یکسان استفاده می‌کنند و امکان تخمین دقیق‌تری از میزان استفاده از حافظه را فراهم می‌کنند (در مقایسه با استفاده از مرزهای زمانی فریم مشتق شده از برش‌های GPU که داده‌های آنها مستقل از داده‌های مسیر شمارنده جمع‌آوری می‌شود).

ردیف کردن مسیر استفاده با شمارنده‌های مربوطه در زیر آن
شکل ۱. مسیر استفاده به همراه شمارنده‌های مربوطه در زیر آن

مجموع خواندن/نوشتن

وقتی یک فریم را در پروفایلر هایلایت کردید، با نگاه کردن به شمارنده‌های مجموع خواندن (بایت بر ثانیه) و مجموع نوشتن (بایت بر ثانیه) شروع کنید. این شمارنده‌ها نگاه کلی خوبی به میزان داده‌ای که در طول یک فریم از گذرگاه حافظه عبور می‌کند، ارائه می‌دهند. تمام تلاش خود را بکنید تا میزان داده‌ای که از گذرگاه ارسال می‌کنید را به حداقل برسانید، زیرا پهنای باند حافظه منبع بزرگی از تخلیه باتری در دستگاه‌های تلفن همراه است.

شمارنده‌های کل خواندنی و نوشتنی
شکل ۲. شمارنده‌های کل خواندن + نوشتن

همچنین می‌توانید شمارنده‌های خواندن حافظه رأس (بایت بر ثانیه) و خواندن حافظه بافت (بایت بر ثانیه) را بررسی کنید تا بخشی از پهنای باند مورد استفاده برای داده‌های رأس و بافت را تعیین کنید.

شمارنده‌های خواندن حافظه رأس + بافت
شکل ۳. شمارنده‌های خواندن حافظه رأس + بافت

آنچه که شما برای این مقادیر «خوب» می‌دانید، به نوع حجم کاری مشاهده شده در برنامه شما بستگی دارد. برای مثال، برنامه‌های دوبعدی ممکن است شاهد استفاده از پهنای باند خواندن حافظه بافت نسبتاً زیادی (حدود ۲+ گیگابایت بر ثانیه) باشند، اما پهنای باند حافظه رأس ممکن است بسیار کم باشد (حدود ۵۰ مگابایت بر ثانیه). برای جزئیات بیشتر، به مستندات « تحلیل پهنای باند حافظه رأس» و «تحلیل استفاده از پهنای باند حافظه بافت» نگاهی بیندازید.

غرفه‌های جمع‌آوری کالا

به شمارنده‌های % Vertex Fetch Stall ، % Texture Fetch Stall و % Stall on System Memory نگاهی بیندازید، زیرا این شمارنده‌ها نکاتی را در مورد عملکرد کلی حافظه برنامه ما به شما ارائه می‌دهند. اگر مقادیر آنها تقریباً بالاتر از ۵٪ باشد، نشان می‌دهد که برنامه شما یا داده‌ها را به روشی کارآمد در حافظه قرار نمی‌دهد یا به روشی کارآمد برای استفاده از حافظه پنهان به داده‌های خود دسترسی پیدا می‌کند. برای جزئیات بیشتر در مورد بهبود استفاده از حافظه برای این نوع دارایی‌ها، به Analyze vertex memory bandwidth و Analyze texture memory bandwidth usage نگاهی بیندازید.

شمارنده‌های حافظه‌ی غیرفعال
شکل ۴. شمارنده‌های توقف حافظه

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

در دستگاه‌های Mali، ابتدا با هایلایت کردن یک دوره زمانی سازگار با یک فریم GPU واحد، همانطور که در «تخمین زمان پردازش فریم CPU و GPU» توضیح داده شده است، شروع کنید. از تکنیک شرح داده شده در آن صفحه که شامل استفاده از درصد استفاده از GPU یا مسیر شمارنده مشابه برای مرزهای زمانی فریم شما می‌شود، استفاده کنید زیرا مسیرهای شمارنده همگی از یک تکنیک زمان‌بندی یکسان استفاده می‌کنند و امکان تخمین دقیق‌تری از میزان استفاده از حافظه را فراهم می‌کنند (در مقایسه با استفاده از مرزهای زمانی فریم مشتق شده از برش‌های GPU که داده‌های آنها مستقل از داده‌های مسیر شمارنده جمع‌آوری می‌شود).

مسیر استفاده با شمارنده‌هایی که به آنها علاقه‌مند هستید در زیر آن قرار دارد
شکل ۵. نمودار میزان استفاده که شمارنده‌های مورد نظر شما در زیر آن قرار گرفته‌اند

خروجی مجموع خارجی

بعد از اینکه یک فریم را در System Profiler هایلایت کردید، با نگاه کردن به شمارنده‌های Output External Read bytes و Output External Write bytes شروع کنید. این شمارنده‌ها نگاه کلی خوبی به میزان داده‌ای که در طول یک فریم از گذرگاه حافظه عبور می‌کند، ارائه می‌دهند. تمام تلاش خود را بکنید تا میزان داده‌ای که از گذرگاه ارسال می‌کنید را به حداقل برسانید، زیرا پهنای باند حافظه منبع بزرگی از تخلیه باتری در دستگاه‌های تلفن همراه است.

خروجی آهنگ‌های شمارنده خارجی
شکل ۶. خروجی آهنگ‌های شمارنده خارجی

جمع کل داخلی را وارد کنید

همچنین شمارنده‌هایی وجود دارند که اطلاعاتی در مورد خود حافظه‌های پنهان (cache) در اختیار شما قرار می‌دهند. شمارنده‌هایی که به آنها علاقه‌مند هستید، «چرخه‌های توقف [خواندن|نوشتن] داخلی ورودی» هستند. مقادیر بالاتر برای این شمارنده‌ها به این معنی است که شما با موفقیت به حافظه پنهان دسترسی دارید، اما درخواست‌های خواندن زیادی ارسال می‌شود و در نتیجه کد سایه‌زن (shader) در انتظار دسترسی به حافظه، متوقف می‌شود.

ورودی شمارنده‌های داخلی
شکل ۷. ورودی آهنگ‌های شمارنده داخلی

غرفه‌های جمع‌آوری کالا

مجموعه بعدی شمارنده‌هایی که می‌توانید بررسی کنید، شمارنده‌های Vertex Prefetcher Stall Cycles و Texture Fetch Stall هستند، زیرا این شمارنده‌ها نکاتی را در مورد عملکرد کلی حافظه برنامه ما به شما ارائه می‌دهند. اگر مقادیری بالاتر از حدود ۵٪ مشاهده می‌کنید، به این معنی است که یا داده‌های خود را به روشی کارآمد در حافظه قرار نمی‌دهید یا به روشی کارآمد برای استفاده از حافظه پنهان به داده‌های خود دسترسی ندارید. برای جزئیات بیشتر در مورد چگونگی بهبود استفاده از حافظه برای این نوع دارایی‌ها، به مقالات Analyzing [Vertex|Texture] Memory Bandwidth نگاهی بیندازید.

آهنگ های شمارنده Fetch Stalls
شکل ۸. ریل‌های شمارنده‌ی Fetch Stalls