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

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

อุปกรณ์ Adreno

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

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

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

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

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

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

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

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

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

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

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

อุปกรณ์ Mali

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

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

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

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

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

ยอดรวมอินพุตภายใน

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

Input Internal counter tracks
รูปที่ 7. การติดตามตัวนับอินพุตภายใน

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

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

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