当前位置: 首页 > 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.rkmt.cn/news/176286.html

相关文章:

  • 如何快速启动PyTorch项目?用PyTorch-CUDA-v2.7镜像就对了
  • 实时渲染如何破局?解锁高效、稳定、安全的云端可视化未来
  • 2025年年终卖得好的学习机品牌推荐:全维度横评从AI能力到内容生态,附10款市场实证型号清单 - 品牌推荐
  • PyTorch最新版本v2.7发布!CUDA集成镜像同步上线
  • 解决wslregisterdistribution失败问题:WSL2下运行PyTorch镜像方案
  • 基于MBD开发的电动汽车主驱电机控制器探秘
  • 神州租车“向上造梦·向下扎根”——从效率竞争到场景定义的全新升级!
  • 清华镜像源支持IPv6访问:提升PyTorch下载速度
  • Markdown写文档+Jupyter跑实验:PyTorch-CUDA-v2.7工作流优化
  • Docker exec进入正在运行的PyTorch容器调试问题
  • 如何在服务器部署PyTorch-CUDA环境?这个镜像省下3小时
  • 将PyTorch模型部署到生产环境:从开发镜像到服务转换
  • 2025声学成像仪大型厂家TOP5权威推荐:供应商甄选指南,定制方案助力工业检测升级 - 工业推荐榜
  • DiskInfo磁盘测速对比:挑选最适合PyTorch训练的SSD
  • PyTorch与TensorFlow哪个更适合你?基于镜像使用的对比
  • 开发中的英语积累 P23:Overlay、Guard、Generator、Flex、Throw、Obtain
  • 清华镜像源加速下载:PyTorch-CUDA-v2.7镜像获取方法汇总
  • 2025年12月深圳南油尾货推荐榜:南油服装尾货、高端尾货供应、尾货库存、服装库存、服装尾货全品类、高价一手回收、直播高价回收,健建服饰精准匹配采购需求 - 海棠依旧大
  • YOLOv11 + PyTorch-CUDA-v2.7:实现毫秒级目标检测响应
  • 适配中小企业数字化转型 北京优质CRM服务商推荐:金畅逍等3家本土企业凭实力出圈 - 海棠依旧大
  • 上下文工程完全解析:6大组件打造动态AI系统,技术干货建议收藏
  • 土木工程师的AI创业路:3天用Qoder搭建公司官网
  • 2025年终智能客服机器人服务商推荐:客户体验与自动化能力双维度实测TOP5排名 - 品牌推荐
  • 2025年靠谱潮流袜品品牌排行榜,猫先绅口碑好吗/专业吗/优势有哪些? - myqiye
  • PostgreSQL 高级特性. FILTER RETURNING 特性
  • 2025年12月济宁草绳厂家推荐榜:种植棚/养殖棚/工程/草苫子、打捆机捆/园林稻/草绳、保温/防滑/防寒/草帘子、防汛/保温/防冻/护坡草袋子,泽萌草制品适配多场景需求 - 海棠依旧大
  • 【工程造价专业论文模版】基于全过程管理的幼儿园造价控制:决策至竣工阶段成本优化与保障措施研究
  • 2025年12月广州气模厂家推荐榜:丽丽玩具实力领衔,气模/滑梯/水上乐园/城堡/游乐场/运动/嘉年华/美陈/帐篷/设计,水上/闯关/城堡/游乐场、充气玩具、户外游乐,品质之选 - 海棠依旧大
  • 2025—2026年哈尔滨旅游公司TOP攻略:冰雪大世界 + 雪乡 + 美食,避坑指南深度解析! - 海棠依旧大
  • PyTorch梯度下降过程可视化:在Jupyter中动态绘图分析