如何在ARM Mali GPU的Android设备上分析非APK原生OpenCL二进制程序
分析Android设备上Mali GPU的原生二进制程序(含OpenCL)
一、用Arm Streamline分析原生二进制程序
Streamline完全支持非APK的原生程序,只是文档更侧重APK场景,具体步骤如下:
- 设备连接准备:确保Android设备开启开发者选项和USB调试,通过ADB连接电脑,让Streamline能识别到目标设备。
- 配置捕获会话:打开Streamline新建捕获会话,目标选择已连接的设备;在应用设置里选择「自定义命令」(部分版本叫「原生应用」),填入原生程序的完整路径,比如
/data/local/tmp/run.bin,如果程序需要参数直接追加在路径后,例如/data/local/tmp/run.bin --input test.data。 - 选择GPU分析指标:在捕获配置的「Metrics」面板,勾选Mali GPU相关指标,比如核心利用率、内存带宽、OpenCL内核执行时长、指令吞吐量等,这些指标和Nvidia Nsight的GPU分析维度对齐。
- 启动捕获运行:点击「Start Capture」,Streamline会通过ADB在设备上启动
run.bin并开始采集数据,程序运行结束后停止捕获,即可查看完整的性能分析报表。 - 离线捕获方案:如果设备无法持续连接电脑,可使用Streamline的
streamline_console离线工具:- 推送工具到设备:
adb push streamline_console /data/local/tmp/ - 添加执行权限:
adb shell chmod +x /data/local/tmp/streamline_console - 启动捕获并运行程序:
adb shell /data/local/tmp/streamline_console -c config.json -o capture_data -- /data/local/tmp/run.bin
其中config.json是提前配置好的指标采集规则文件。
- 推送工具到设备:
二、其他可选分析工具
- Mali Graphics Debugger:虽主打图形调试,但也支持OpenCL内核的性能分析,可直接附加到运行中的原生进程,查看内核执行时间、资源占用,还能单步调试OpenCL代码。
- Android原生perf工具:配合Mali的硬件计数器事件,通过命令行快速采集数据:
- 查看设备支持的Mali事件:
adb shell perf list | grep mali - 采集程序性能数据:
adb shell perf record -e mali_gpu_core_utilization -g /data/local/tmp/run.bin - 生成分析报表:
adb shell perf report
- 查看设备支持的Mali事件:
三、OpenCL代码的细粒度分析
在OpenCL代码中插入性能标记,可实现更精准的瓶颈定位:
- 在OpenCL内核启动前后,调用
clSetEventCallback记录时间戳,或使用Arm提供的libarm_compute性能接口,将自定义事件输出到系统trace buffer,Streamline可捕获这些事件并与GPU硬件指标关联展示,清晰对应内核执行阶段的资源消耗情况。
内容的提问来源于stack exchange,提问作者fabian
相关产品推荐
相关产品推荐

