วิเคราะห์ประสิทธิภาพของหน่วยความจำ

ลักษณะการใช้งานหน่วยความจำของแอปเป็นแง่มุมพื้นฐานของ ประสิทธิภาพ คุณใช้ System Profiler เพื่อวิเคราะห์ลักษณะเหล่านี้ได้โดยดูข้อมูลตัวนับ GPU ที่มี

อุปกรณ์ Adreno

ในอุปกรณ์ Adreno ให้เริ่มด้วยการไฮไลต์ระยะเวลาที่สอดคล้องกับเฟรม GPU เดียวตามที่อธิบายไว้ในประมาณเวลาประมวลผลเฟรมของ CPU และ GPU ใช้เทคนิคที่อธิบายไว้ในหน้านั้นซึ่งเกี่ยวข้องกับการใช้การใช้ GPU เป็น % หรือตัวนับที่คล้ายกันเพื่อติดตามขอบเขตเวลาที่ใช้ในการแสดงผลเฟรม เนื่องจากตัวนับทั้งหมดใช้เทคนิคการจับเวลาเดียวกัน และจะช่วยให้ประมาณการการใช้หน่วยความจำได้แม่นยำยิ่งขึ้น (เมื่อเทียบกับการใช้ขอบเขตเวลาที่ใช้ในการแสดงผลเฟรมที่ได้จากสไลซ์ GPU ซึ่งมีการรวบรวมข้อมูลแยกจากข้อมูลการติดตามตัวนับ)

การใช้ประโยชน์ที่สอดคล้องกับตัวนับที่เกี่ยวข้องด้านล่าง
รูปที่ 1 เส้นทางการใช้งานที่สอดคล้องกับเคาน์เตอร์ที่เกี่ยวข้องด้านล่าง

ยอดรวมการอ่าน/เขียน

เมื่อไฮไลต์เฟรมเดียวในโปรไฟล์เลอร์แล้ว ให้เริ่มดูที่ตัวนับการอ่านทั้งหมด (ไบต์/วินาที) และการเขียนทั้งหมด (ไบต์/วินาที) เคาน์เตอร์เหล่านี้จะแสดงภาพรวมที่ดีของปริมาณข้อมูลที่ผ่าน Memory Bus ในช่วงระยะเวลาของเฟรมเดียว พยายามลดปริมาณข้อมูลที่คุณส่งผ่านบัสให้มากที่สุด เนื่องจากแบนด์วิดท์ของหน่วยความจำเป็นแหล่งที่มาสำคัญที่ทำให้แบตเตอรี่ของอุปกรณ์เคลื่อนที่หมดเร็ว

ตัวนับการอ่าน + การเขียนทั้งหมด
รูปที่ 2 ตัวนับการอ่านและการเขียนทั้งหมด

นอกจากนี้ คุณยังตรวจสอบตัวนับการอ่านหน่วยความจำของจุดยอด (ไบต์/วินาที) และการอ่านหน่วยความจำของพื้นผิว (ไบต์/วินาที) เพื่อพิจารณาส่วนของแบนด์วิดท์ที่ใช้สำหรับข้อมูลจุดยอดและพื้นผิว ได้ด้วย

ตัวนับการอ่านหน่วยความจำของจุดยอด + พื้นผิว
รูปที่ 3 ตัวนับการอ่านหน่วยความจำของ Vertex + Texture

ค่าที่คุณถือว่า "ดี" สำหรับค่าเหล่านี้ขึ้นอยู่กับประเภทของภาระงาน ที่เห็นในแอป ตัวอย่างเช่น แอปพลิเคชัน 2 มิติอาจเห็นแบนด์วิดท์การอ่านหน่วยความจำของเท็กซ์เจอร์ที่ใช้ค่อนข้างมาก (~2+GB/s) แต่แบนด์วิดท์หน่วยความจำของจุดยอดอาจน้อยมาก (~50MB/s) ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบสำหรับวิเคราะห์แบนด์วิดท์หน่วยความจำของจุดยอดและวิเคราะห์การใช้แบนด์วิดท์หน่วยความจำของเท็กซ์เจอร์

การหยุดดึงข้อมูล

ดูเคาน์เตอร์ % Vertex Fetch Stall, % Texture Fetch Stall และ % Stall on System Memory เนื่องจากเคาน์เตอร์เหล่านี้จะให้คำแนะนำเกี่ยวกับประสิทธิภาพหน่วยความจำโดยรวมของแอปพลิเคชัน หากค่าสูงกว่าประมาณ 5% แสดงว่าแอปของคุณอาจไม่ได้จัดวางข้อมูลในหน่วยความจำอย่างมีประสิทธิภาพ หรือเข้าถึงข้อมูลอย่างมีประสิทธิภาพเพื่อใช้ประโยชน์จากแคช ดูรายละเอียดเกี่ยวกับการปรับปรุงการใช้งานหน่วยความจำสำหรับชิ้นงานประเภทนี้ได้ที่วิเคราะห์แบนด์วิดท์หน่วยความจำของ Vertex และวิเคราะห์การใช้งานแบนด์วิดท์หน่วยความจำของเท็กซ์เจอร์

ตัวนับการหยุดทำงานของหน่วยความจำ
รูปที่ 4 ตัวนับการหยุดทำงานของหน่วยความจำ

อุปกรณ์ในมาลี

ในอุปกรณ์ Mali ให้เริ่มต้นด้วยการไฮไลต์ระยะเวลาที่สอดคล้องกับเฟรม GPU เดียวตามที่อธิบายไว้ในประมาณเวลาประมวลผลเฟรมของ CPU และ GPU ใช้เทคนิคที่อธิบายไว้ในหน้านั้นซึ่งเกี่ยวข้องกับการใช้การใช้ GPU เป็น % หรือตัวนับที่คล้ายกันเพื่อติดตามขอบเขตเวลาที่ใช้ในการแสดงผลเฟรม เนื่องจากตัวนับทั้งหมดใช้เทคนิคการจับเวลาเดียวกัน และจะช่วยให้ประมาณการการใช้หน่วยความจำได้แม่นยำยิ่งขึ้น (เมื่อเทียบกับการใช้ขอบเขตเวลาที่ใช้ในการแสดงผลเฟรมที่ได้จากสไลซ์ GPU ซึ่งมีการรวบรวมข้อมูลแยกจากข้อมูลการติดตามตัวนับ)

การติดตามการใช้งานที่สอดคล้องกับตัวนับที่คุณสนใจด้านล่าง
รูปที่ 5 เส้นทางการใช้งานที่สอดคล้องกับตัวนับที่คุณสนใจด้านล่าง

เอาต์พุตยอดรวมภายนอก

หลังจากไฮไลต์เฟรมเดียวใน System Profiler แล้ว ให้เริ่มโดยดูที่ตัวนับ Output External Read bytes Output External Write bytes เคาน์เตอร์เหล่านี้จะแสดงภาพรวมที่ดีของปริมาณข้อมูลที่ผ่านบัสหน่วยความจำตลอดทั้งเฟรม พยายามลดปริมาณข้อมูลที่คุณส่งผ่านบัส เนื่องจากแบนด์วิดท์ของหน่วยความจำเป็นสาเหตุหลักที่ทำให้แบตเตอรี่หมดเร็วในอุปกรณ์เคลื่อนที่

ติดตามเอาต์พุตของตัวนับภายนอก
รูปที่ 6 เอาต์พุตแทร็กตัวนับภายนอก

ป้อนผลรวมภายใน

นอกจากนี้ยังมีตัวนับที่ให้ข้อมูลเกี่ยวกับแคชด้วย เคาน์เตอร์ที่คุณสนใจคือ "Input internal [read|write] stall cycles" ค่าที่สูงขึ้นสำหรับเคาน์เตอร์เหล่านี้หมายความว่าคุณเข้าถึงแคชได้สำเร็จ แต่มีคำขออ่านมากเกินไป และส่งผลให้โค้ด Shader หยุดทำงานเพื่อรอรับสิทธิ์เข้าถึงหน่วยความจำ

ติดตามช่องทางภายใน
รูปที่ 7 Input Internal counter tracks

การหยุดดึงข้อมูล

ชุดตัวนับถัดไปที่คุณดูได้คือตัวนับรอบการหยุดทำงานของ Vertex Prefetcher และตัวนับการหยุดทำงานของการดึงข้อมูลเท็กซ์เจอร์ เนื่องจากตัวนับเหล่านี้จะให้คำแนะนำเกี่ยวกับประสิทธิภาพโดยรวมของหน่วยความจำของแอปพลิเคชัน หากเห็นค่าที่สูงกว่าประมาณ 5% แสดงว่าคุณไม่ได้จัดวางข้อมูลของเราในหน่วยความจำอย่างมีประสิทธิภาพ หรือไม่ได้เข้าถึงข้อมูลของเราอย่างมีประสิทธิภาพเพื่อใช้ประโยชน์จากแคช ดูรายละเอียดเกี่ยวกับวิธีปรับปรุงการใช้งานหน่วยความจำสำหรับชิ้นงานประเภทนี้ได้ที่บทความการวิเคราะห์แบนด์วิดท์หน่วยความจำ [Vertex|Texture]

ติดตามตัวนับการหยุดทำงานของ Fetch
รูปที่ 8 ตัวนับการหยุดชะงักของการดึงข้อมูล