我想计算 GPU 使用率。是否有任何 GPU 文件类似于将 cpu 统计信息保存在 /proc/stat 的方式?
获取 GPU 详细信息(如频率等)的方法可能是什么
谢谢
从 Android 4.3 (Jelly Bean) 开始,您可以通过 Dev Options 中的工具对其进行监控。
设置 > 更多 > 开发人员选项 > 配置 GPU 渲染。
您可能需要在 Android 4.2 上启用开发人员选项,因为默认情况下它是隐藏的。通过在设置 > 关于手机 > 内部版本号上点击 7 次来启用此功能。
Profile GPU Rendering 有几个选项,“在屏幕上显示为条形”是一种快速直观地了解正在发生的事情的好方法。
Google 的AGI (Android GPU Inspector)目前处于开放测试阶段,仅支持以下设备:
DEVICE NAME GPU NAME
Google Pixel 4 (standard and XL) Qualcomm® Adreno™ 640
Google Pixel 5 Qualcomm® Adreno™ 620
Google Pixel 4a 5G Qualcomm® Adreno™ 620
These devices do not support AGI yet but will offer support in the future:
DEVICE NAME GPU NAME
Google Pixel 4a Qualcomm® Adreno™ 618
Samsung Galaxy S10 series Qualcomm® Adreno™ 640 and Arm® Mali™ G76
Samsung Galaxy S20 series Qualcomm® Adreno™ 650 and Arm® Mali™ G77
Samsung Galaxy Note 10 series Qualcomm® Adreno™ 640 and Arm® Mali™ G76
Samsung Galaxy Note 20 series Qualcomm® Adreno™ 650 and Arm® Mali™ G77
这将允许您分析应用程序的 GPU 使用情况。
对于 Arm Mali GPU,您可以使用 Streamline,它是 Arm Mobile Studio 的一部分的性能分析器:https ://developer.arm.com/tools-and-software/graphics-and-gaming/arm-mobile-studio/components /流线性能分析器
Mobile Studio 是免费的,并且有一些很好的视频教程。
在此视频中,您可以看到一些不错的 PC,例如性能叠加: https ://www.youtube.com/watch?v=ViCA--Wi26s&t=892s
但我没有找到任何细节,也许是它的特定设备。
更新:应用程序被命名为 CPU float,可以从 Google Play 商店下载: https ://play.google.com/store/apps/details?id=com.waterdaaan.cpufloat&hl=en&gl=US
以下是如何使其运行的视频: https ://www.youtube.com/watch?v=dAH9ywQQKD8 下载、启动应用程序、启动游戏或应用程序并查看统计信息。
一组统计数据取决于您的设备以及应用程序和应用程序未来更新的支持方式。到目前为止,只有某些 GPU 的 GPU 统计数据,并且没有 % CPU,而只有 CPU 内核频率(以 MHz 为单位),但它仍然是我发现的最好的 Android OSD。
如果您想优化您的 GL 管道代码,您可能会发现 Fencing 是一个简单的替代或补充工具。这是 Kotlin 中的一个示例:
override fun onDrawFrame(unused: GL10) {
if(glPipelineFence != null) { // if it's the first pass then ignore
// block until the GPU has reached the pipeline fence
val result = glClientWaitSync(glPipelineFence!!, 0, 1000000000)
if (result == GL_TIMEOUT_EXPIRED) Log.v("myinfo", "gl fence error: expired")
if (result == GL_WAIT_FAILED) Log.v("myinfo", "gl fence error: failed")
glDeleteSync(glPipelineFence!!)
}
// YOUR OPEN GL ES STUFF GOES HERE
glPipelineFence = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0)
}
System.currentTimeMillis()
然后,您可以在例如整个函数范围的任一侧glClientWaitSync
或整个函数范围内使用增量来查看您的管道需要多长时间。将glClientWaitSync
阻塞直到 OpenGL ES 管道在最后执行栅栏命令。
GPUz将帮助您跟踪任何图形应用程序的 GPU 使用情况。它可以简单地显示内存使用情况和 GPU 负载,并且可能适用于大多数硬件。