#intel #vtune #seapi #ittnotify #itt

intel-seapi

Intel单事件API (SEAPI) 和 ittnotify 的中级别包装器,由Intel VTune使用

10个不稳定版本 (3个破坏性更新)

使用旧的Rust 2015

0.3.1 2018年10月27日
0.3.0 2018年10月27日
0.2.0 2018年10月26日
0.1.3 2018年10月26日
0.0.2 2018年10月25日

#253 in 性能分析

每月下载量:28

MIT 许可证

2MB
16K SLoC

Python 8K SLoC // 0.1% comments C++ 4K SLoC // 0.1% comments C 1.5K SLoC // 0.1% comments C# 1K SLoC Rust 855 SLoC // 0.1% comments FORTRAN Modern 408 SLoC // 0.1% comments Java 157 SLoC // 0.1% comments Objective-C++ 40 SLoC // 0.3% comments Visual Studio Solution 38 SLoC Batch 6 SLoC Shell 1 SLoC

intel-seapi

intel-seapi 是Intel单事件API (SEAPI,也称为 IntelSEAPI) 和 ittnotify 的FFI包装器,由Intel VTune使用。ITT代表'仪器和跟踪技术'。 这个特定的包装器使用了一个IntelSEAPI 的分支,因为上游代码库不支持交叉编译或MUSL C库。

它提供了一个静态链接,并为 libittnotify.a/.obj 库生成Rust FFI绑定,并且也编译,但不链接或为 libIntelSEAPI.dylib/.so/.dll 动态库生成Rust绑定(这是因为它始终以动态方式构建,并且它旨在从C++中使用)。

下游crate可以使用生成的构建变量 cargo:includecargo:libdircargo:root

限制

  • 目前不适用于Windows,因为 libittnotify 为Windows构建了一个完全不同的API集(以 AW 结尾)。
  • 构建了动态库 IntelSEAPI 但未链接,并且未为其生成绑定。
  • Bindgen 由于C头文件的函数声明没有反映实际创建的混淆名称,因此没有为 libittnotify 的大部分生成正确的绑定。因此,仅提供了一小部分绑定;在 BindingsAsGeneratedByBingen.rs 中生成了附加绑定但尚未修正。

交叉编译

这是脆弱的,可能会失败,主要是因为底层软件使用了一个混合的构建系统,包括CMake、具有Rust绑定和封装的C++工具链以及IntelSEAPI,并且它们对交叉编译不太友好。我们使用了一个分支版本来修复他们的一些交叉编译错误,例如在CMakeLists.txt文件中的错误,生成与目标或主机架构无关的胖Mac OS X对象归档等。

例如,当为MUSL目标编译时,Rust的cccrate假设C编译器是musl-gcc,而C++编译器是musl-g++。由于这个cccrate是由cmakecrate管理的,所以我们无法轻易更改这一点。这个crate尝试在用MUSL目标进行交叉编译时,如果没有设置环境变量CROSS_COMPILE,则设置它。

已知的可正常工作的交叉编译。

  • 在Mac OS X上,如果安装了filo-sottie的foked musl homebrew keg(lemonrock/musl-cross/musl-cross),则cargo build --target x86_64-unknown-linux-musl

许可

本项目的许可协议为MIT。

依赖关系