当前位置: 首页 > news >正文

rust交叉编译 simpileperf

以下的simpleperf目录替换为自己的文件目录 我这里使用的都是绝对路径

常见 simpleperf 编译命令

#WINDDOWS SDK path
F:\Android\Sdk\ndk\29.0.14206865\toolchains\llvm\prebuilt\windows-x86_64\bin
# -g: 收集函数调用栈信息 -o 指定output文件  采集时间5s 采集的二进制文件
simpleperf record -g -o /data/local/tmp/rust_dir/perf.data --duration 5 ./cross_rust

查看 android 平台,选用适合的交叉编译

getprop ro.product.cpu.abi#模拟器 output
x86_64

为 rust 进行交叉编译(以 x86_64 为例子)

#临时镜像加速
#$env:RUSTUP_UPDATE_ROOT="https://mirrors.sjtug.sjtu.edu.cn/rust-static/rustup/"
#$env:RUSTUP_DIST_SERVER="https://mirrors.sjtug.sjtu.edu.cn/rust-static"
rustup target add x86_64-linux-android

检测当前编译链

#当前rust的交叉编译
rustup target list --installed# output
x86_64-linux-android
x86_64-pc-windows-msvc
# Android version
adb shell getprop ro.build.version.release# output
15#Android API LEVEL
adb shell getprop ro.build.version.sdk35

应该使用x86_64-linux-android35-clang的版本进行交叉

如何配置config.toml文件


# 对 ARM 64 位 (aarch64) Android 设备的配置[target.aarch64-linux-android]# 链接器路径修改为 aarch64 对应的文件
# 注意:你需要根据你的 NDK 版本和实际文件名称来调整路径
linker = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\aarch64-linux-android35-clang.cmd"# C 编译器(如果需要)
# cc = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\aarch64-linux-android35-clang.cmd"rustflags = ["-C", "link-arg=-target","-C", "link-arg=aarch64-unknown-linux-android35" # 目标也改为 aarch64
][target.x86_64-linux-android]# 链接器 (Linker) 的完整路径
# 注意:Windows NDK 工具链中的 clang 通常是一个 .cmd 或 .exe 文件。
# 我们使用 .cmd 文件,如果不行,请尝试使用 x86_64-linux-android-clang.exe
linker = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\x86_64-linux-android35-clang.cmd"# C 编译器 (CC) 的完整路径 (Rust 在编译 C/C++ 依赖时可能需要)
# cc = "F:\\Android\\Sdk\\ndk\\29.0.14206865\\toolchains\\llvm\\prebuilt\\windows-x86_64\\bin\\x86_64-linux-android35-clang.cmd"# 可选:指定 Android API 级别。35 是你路径中包含的版本
rustflags = ["-C", "link-arg=-target","-C", "link-arg=x86_64-unknown-linux-android35"
]

进行交叉编译的参数

#默认是debug 否则需要 ... build --release ...
cargo build --target x86_64-linux-android

FlameGprah.svg生成和导出的步骤

adb shell
cd /data/local/tmp/rust_dir#采集perf.data 保留符号 采集的名字叫做 perf.data 采集时间5s 对./cross_rust 可执行文件采集
simpleperf record -g -o /data/local/tmp/rust_dir/perf.data --duration 5 ./cross_rust#拉出来文件
adb pull /data/local/tmp/rust_dir/perf.data .```sh
adb shell
cd /data/local/tmp/rust_dir#拉出来文件
adb pull /data/local/tmp/rust_dir/perf.data .# 调用 ndk的simpleperf Python脚本
# -i 输入数据文件 -symfs 符号文件系统(Symbol File System) 用于解析地址到函数名
# --symfs 二进制文件所在目录
# FlameGraph的 stackcollapse-perf 脚本 读取调用栈数据,将相同的调用栈序列折叠
# 读取折叠后的堆栈信息和计数,生成SVG
# 导出svg
python F:\Android\Sdk\ndk\29.0.14206865\simpleperf\report_sample.py -i perf.data --symfs D:\code\doc_for_harmony_project\filament\rust_test\target\x86_64-linux-android\debug | perl D:\code\FlameGraph\stackcollapse-perf.pl | perl D:\code\FlameGraph\flamegraph.pl > test_root.svg

cross_rustrs文件和对crross_rust的调用链的解释

cross_rust.rs

级别 函数/方法 结构体/模块 职责描述
Level 0 main() main.rs 程序的起点,负责协调整个流程。
Level 1 Graph::new() Graph 初始化图结构体及其所有内部数组和向量。
Level 1 Graph::build_with_sample_data() Graph 构建图:定义节点数,并读取内置的边数据。
Level 2 Graph::add_edge() (多次) Graph 根据边数据,向图的邻接表中添加边(双向)。
Level 1 Graph::prim() Graph 执行 Prim 算法:寻找最小生成树的核心逻辑。
Level 2 BinaryHeap::new() std::collections 初始化优先队列。
Level 2 BinaryHeap::push() std::collections 将起始节点推入优先队列。
Level 2 BinaryHeap::pop() (循环内) std::collections 取出权值最小的边。
Level 2 self.tt.push() (条件满足时) Graph 将找到的 MST 边记录到结果集合中。
Level 1 Graph::print_mst_edges() (条件满足时) Graph 输出结果:格式化打印 MST 的所有边。

http://www.jsqmd.com/news/160908/

相关文章:

  • PyTorch 2.7版本新特性一览:结合CUDA镜像提升推理速度
  • 云交互:重塑数字体验的未来
  • 实时渲染如何破局?解锁高效、稳定、安全的云端可视化未来
  • WSLRegisterDistribution failed错误解决:用CUDA镜像避坑指南
  • MAF快速入门(9)多路分支路由工作流
  • 如何快速启动PyTorch项目?用PyTorch-CUDA-v2.7镜像就对了
  • 深度学习新手必看:PyTorch-CUDA-v2.7镜像让环境不再头疼
  • YOLOv11损失函数剖析:在PyTorch中实现自定义优化
  • 2025年年终卖得好的学习机品牌推荐:全维度横评从AI能力到内容生态,附10款市场实证型号清单 - 品牌推荐
  • PyTorch最新版本v2.7发布!CUDA集成镜像同步上线
  • 2025年袜子制造商推荐:不错的袜子工厂及袜子实力厂商有哪些? - myqiye
  • 解决wslregisterdistribution失败问题:WSL2下运行PyTorch镜像方案
  • YOLOv11 mAP评估脚本:在PyTorch中计算检测精度
  • 基于MBD开发的电动汽车主驱电机控制器探秘
  • 2025年年终卖得好的学习机品牌推荐:不同产品线定位与核心优势对比的10款选购指南 - 品牌推荐
  • 神州租车“向上造梦·向下扎根”——从效率竞争到场景定义的全新升级!
  • Jupyter Notebook主题美化:提升PyTorch编码愉悦感
  • Anaconda下载慢?直接使用PyTorch-CUDA-v2.7节省安装时间
  • Anaconda虚拟环境与PyTorch-CUDA-v2.7镜像的协同使用方法
  • 2025年度靠谱托福培训机构排行榜,专业托福培训企业测评精选推荐 - 工业设备
  • 2025年年终卖得好的学习机品牌推荐:聚焦不同学龄段与功能场景的10款优质型号选购指南 - 品牌推荐
  • 深度学习0基础入门:从人工规则到神经网络的进化之旅
  • 清华镜像源支持IPv6访问:提升PyTorch下载速度
  • 传动带料箱输送线程序探索:从硬件到代码
  • 2025年小语种老牌辅导机构推荐,小语种优质培训公司全解析 - 工业品牌热点
  • Docker exec进入正在运行的PyTorch容器调试问题
  • 如何在Jupyter中调用GPU?PyTorch-CUDA-v2.7镜像操作演示
  • 如何在服务器部署PyTorch-CUDA环境?这个镜像省下3小时
  • Markdown写文档+Jupyter跑实验:PyTorch-CUDA-v2.7工作流优化
  • 将PyTorch模型部署到生产环境:从开发镜像到服务转换