ประมาณเวลาในการประมวลผลเฟรมของ CPU และ GPU

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

เวลา CPU

ใน AGI คุณสามารถดูเวลาเฟรมของ CPU ทั้งหมดและที่ใช้งานอยู่ในการติดตาม CPU ของโปรไฟล์ระบบ

เวลา CPU รวม

หากต้องการวัดเวลา CPU ทั้งหมดที่ใช้ไป ให้เลือกช่วงเวลาซึ่งรวมเวลาระหว่างเหตุการณ์การส่งเฟรมต่อเนื่อง เหตุการณ์การส่งเฟรมคือ eglSwapBuffers (สําหรับ OpenGL) และ vkQueuePresentKHR (สําหรับ Vulkan)

ภาพหน้าจอของเหตุการณ์ eglSwapBuffer
รูปที่ 1 ช่วงเวลาระหว่างeglSwapBuffer 2 เหตุการณ์


ภาพหน้าจอของเหตุการณ์ vkQueuePresentKHR
รูปที่ 2 ช่วงเวลาระหว่างvkQueuePresentKHR 2 เหตุการณ์

การวัดนี้เป็นค่าประมาณของเวลา CPU ทั้งหมด แต่ไม่จำเป็นต้องแสดงถึงเวลา CPU ที่ใช้งานอยู่ ตัวอย่างเช่น ในแอปที่ทำงานกับ GPU เป็นหลัก CPU อาจรอให้ GPU ทำงานเสร็จก่อนจึงจะส่งเฟรมใหม่ ปัญหานี้มักเกิดขึ้นเมื่อเหตุการณ์ dequeueBuffer, eglSwapBuffer (สําหรับ OpenGL) หรือ vkQueuePresent (สําหรับ Vulkan) ใช้เวลาส่วนใหญ่ของ CPU เวลารอจะรวมอยู่ในเวลา CPU รวม แต่จะไม่รวมอยู่ในเวลา CPU ที่ใช้งานอยู่

ภาพหน้าจอที่แสดงสถานะไม่มีการใช้งานจำนวนมากระหว่างเหตุการณ์ dequeueBuffer และ eglSwapBuffer
รูปที่ 3 CPU ทำงานอยู่เฉยๆ เป็นจำนวนมากในระหว่างเหตุการณ์ dequeueBuffer และ eglSwapBuffer

เวลา CPU ที่ใช้งานอยู่

เวลา CPU ที่ใช้งานอยู่จะระบุเวลาที่ CPU เรียกใช้โค้ดแอปโดยไม่อยู่ในสถานะ "ไม่ได้ใช้งาน"

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

ภาพหน้าจอของเวลา CPU 2 ช่วงที่ใช้วัดเวลา CPU ที่ใช้งานอยู่
รูปที่ 5 ช่วงเวลาของ CPU 2 ช่วงเวลาที่สามารถใช้วัดเวลา CPU ที่ใช้งานอยู่


ภาพหน้าจอของแอปแบบหลายเธรดที่มีเธรดอื่นๆ ที่ทำงานอยู่ขณะที่เธรดหลักไม่มีการใช้งาน
รูปที่ 6 แอปแบบหลายเธรดที่มีเธรดอื่นๆ ที่ทำงานอยู่ขณะที่เทรดหลักไม่มีการใช้งาน

อีกวิธีในการวัดเวลา CPU ที่ใช้งานอยู่คือการดูส่วนแอปในแทร็ก CPU ข้อมูลโค้ดเหล่านี้จะระบุเมื่อ CPU ทำงานอยู่และสอดคล้องกับข้อมูลโค้ดทำงานอยู่

ภาพหน้าจอแสดงสถานะการทํางานของเธรดที่ติดหมุดไว้ซึ่งตรงกับแทร็ก CPU
รูปที่ 7 สถานะการทํางานของเธรดที่ปักหมุดไว้ตรงกับแทร็ก CPU

คุณสามารถเพิ่มเครื่องหมาย ATrace ลงในแอปเพื่อช่วยระบุข้อมูลโค้ดของแอปได้ ซึ่งจะแสดงเครื่องหมายในแทร็ก CPU ของเครื่องมือวิเคราะห์ระบบ

ภาพหน้าจอของส่วน ATrace ที่แสดงในแทร็ก CPU
รูปที่ 8 ข้อมูล ATrace ที่แสดงในแทร็ก CPU

ประมาณเวลาที่ใช้ในการแสดงเฟรมของ GPU

หากต้องการประมาณเวลาเฟรมของ GPU คุณสามารถใช้ข้อมูลโค้ด GPU หรือตัวนับ GPU ในเครื่องมือวิเคราะห์ระบบ ค่าประมาณจะแม่นยำมากขึ้นเมื่อใช้ข้อมูลส่วน GPU

ส่วนของ GPU

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

อุปกรณ์ Mali

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

หรือหากคุณคุ้นเคยกับงานที่ส่งไปยัง GPU การระบุรูปแบบของการส่งผ่านการแสดงผลที่ส่งจะแสดงข้อมูลเกี่ยวกับเวลาที่เฟรมเริ่มต้นและสิ้นสุด

ภาพหน้าจอของเฟรมหลายเฟรมที่แสดงตามลำดับ
รูปที่ 9 เฟรมหลายเฟรมที่ทำงานตามลำดับ
ภาพหน้าจอที่ AGI ซูมเข้าที่งานของเฟรมแต่ละเฟรม
รูปที่ 10 ซูมเข้าที่งานของเฟรมแต่ละเฟรม

สําหรับแอปที่มีเวิร์กโฟลว์ GPU แบบขนานกันมากขึ้น คุณสามารถดูเวลาที่ใช้ในการแสดงผลเฟรม GPU ได้โดยมองหาเฟรมทั้งหมดที่มี submissionID เดียวกันในแผงการเลือกสําหรับแต่ละส่วน

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

ภาพหน้าจอของภาระงาน GPU แบบขนาน ซึ่งงานในเฟรมหนึ่งอาจซ้อนทับกับอีกเฟรมหนึ่ง
รูปที่ 11 ปริมาณงาน GPU แบบขนาน ซึ่งงานในเฟรมหนึ่งอาจซ้อนทับกับอีกเฟรมหนึ่ง


ภาพหน้าจอของเหตุการณ์ Vulkan หลายรายการที่เลือกสำหรับเฟรมหนึ่งๆ
รูปที่ 12 เลือกเหตุการณ์ Vulkan หลายรายการสำหรับเฟรม

อุปกรณ์ Adreno

ในอุปกรณ์ Adreno ส่วนของ GPU จะปรากฏในแทร็ก GPU Queue 0 และแสดงตามลําดับเสมอ คุณจึงดูส่วนของ GPU ทั้งหมดที่แสดงการผ่านการแสดงผลของเฟรมและใช้เพื่อวัดเวลาที่ใช้ในการแสดงผลเฟรมของ GPU ได้

ภาพหน้าจอของเฟรมหลายเฟรมที่แสดงตามลำดับ
รูปที่ 13 เฟรมหลายเฟรมที่ทำงานตามลำดับ
ภาพหน้าจอที่ AGI ซูมเข้าเฟรมที่มีหลายผ่านการแสดงผล
รูปที่ 14 ซูมเข้าเฟรมที่มีหลายผ่านการแสดงผล

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

ภาพหน้าจอของแอปที่ใช้ Vulkan ซึ่งเลือกเหตุการณ์ Vulkan ของเฟรม
รูปที่ 15 แอปที่ใช้ Vulkan ซึ่งเลือกเหตุการณ์ Vulkan สําหรับเฟรม

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

ภาพหน้าจอของแอปที่กําหนดให้ใช้ GPU อย่างมากซึ่งมีรูปแบบการผ่านการแสดงผลที่ช่วยระบุขอบเขตเฟรม
รูปที่ 16 แอปที่ผูกอยู่กับ GPU อย่างมากซึ่งมีรูปแบบการผ่านการแสดงผลที่ช่วยระบุขอบเขตเฟรม

ตัวนับ GPU

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

อุปกรณ์ Mali

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

ภาพหน้าจอของแทร็กการใช้งาน GPU และ GPU Queue ในอุปกรณ์ Mali
รูปที่ 17 แทร็กการใช้งาน GPU และ GPU Queue ในอุปกรณ์ Mali

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

ภาพหน้าจอของแทร็กที่เป็นข้อมูลโค้ดและไม่ใช่ข้อมูลโค้ด
รูปที่ 18 แทร็กที่มีและไม่มีฟร็กเมนต์

อุปกรณ์ Adreno

ในอุปกรณ์ Adreno หากแอปไม่ได้ใช้ GPU อย่างหนัก คุณสามารถประมาณเวลาที่ใช้ในการแสดงผลเฟรมของ GPU ได้เช่นเดียวกับอุปกรณ์ Mali ในส่วนก่อนหน้า

ภาพหน้าจอของเปอร์เซ็นต์การใช้งาน GPU และแทร็กคิว GPU ในอุปกรณ์ Adreno
รูปที่ 19 เปอร์เซ็นต์การใช้งาน GPU และแทร็กคิว GPU ในอุปกรณ์ Adreno

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

ภาพหน้าจอของคำแนะนำของจุดยอด / แทร็ก 2
รูปที่ 20 แทร็ก Vertex Instructions / Second

แทร็กอื่นๆ เหล่านี้อาจให้ข้อมูลที่คล้ายกัน

  • จุดยอดที่แรเงา / วินาที
  • เศษเสี้ยวที่แรเงา / วินาที
  • % เวลาในการแรเงาจุดยอด
  • % เวลาในการแรเงาเศษข้อมูล