3个不稳定版本
0.2.1 | 2024年7月18日 |
---|---|
0.2.0 | 2024年7月17日 |
0.1.0 | 2024年7月14日 |
#269 in 硬件支持
每月320次下载
150KB
2.5K SLoC
Rust的不可移植SIMD
在编写高性能矢量化代码时,利用特定架构的SIMD功能是绝对必要的。但在抽象该功能的“可移植SIMD”库中,这是不可能的。这个Rust库旨在提供一个类型安全且高级的接口来与平台特定的SIMD内联函数协同工作,提供比内联汇编或C样式的内联函数更易用的体验。
警告:此库目前正在开发中,尚不适合生产使用。仍在设计高级API,并且尚未实施严格的测试系统。
低级接口
以下是一个使用低级API中Intel SSE2内联函数的示例
use npsimd::intel_feature_set;
use npsimd::intel::low::RuntimeSupport;
use npsimd::intel::low::sse::{Use, SSE2};
// Determine the current CPU's feature support.
let support = RuntimeSupport::detect();
// Request the SSE generation with SSE2 support.
type U = Use<intel_feature_set!(SSE2)>;
let u = U::new(&support).expect("SSE2 is not supported!");
// Use arbitrary SSE2 intrinsics with ergonomic typing.
let x = u.set_u16x8([1, 3, 5, 7, 9, 11, 13, 15]);
let y = u.set_u16x8([5, 7, 9, 11, 13, 15, 17, 19]);
let z = u.avg_u16x8(x, y);
assert_eq!(z, u.set_u16x8([3, 5, 7, 9, 11, 13, 15, 17]));
许可证
版权所有 (c) 2024 Arav K. [email protected]
在此特此授予任何获得本软件及其相关文档副本(“软件”)的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供的人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论源于合同、侵权或其他原因,无论是否因软件或软件的使用或其他方式而产生。
依赖项
~610KB
~11K SLoC