BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Rust 1.27支持SIMD

| 作者 Sergio De Simone 关注 14 他的粉丝 ,译者 无明 关注 0 他的粉丝 发布于 2018年6月29日. 估计阅读时间: 4 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

SIMD支持是Rust 1.27中最值得一提的新特性,这一版本的Rust同时还带来了更为明确的trait语法。

在语言层面支持SIMD意味着开发人员可以在更高级别上表达矢量化计算,并在编译器不够智能时超越编译器来应用自动矢量化。下面的例子展示了如何表示两个向量(或切片)的总,这两个向量分别包含了16个元素,每个元素为一个字节长度(u8)。每个切片可放入一个128位寄存器,因此我们可以将这两个片放入两个寄存器,并使用新的std :: arch模块将它们添加到单个CPU指令中:

#[cfg(all(any(target_arch = "x86", target_arch = "x86_64"),
      target_feature = "avx2"))]
fn foo() {
    #[cfg(target_arch = "x86")]
    use std::arch::x86::_mm256_add_epi64;
    #[cfg(target_arch = "x86_64")]
    use std::arch::x86_64::_mm256_add_epi64;

    unsafe {
        _mm256_add_epi64(...);
    }
}

上面的代码片段还展示了如何为特定平台定制你的SIMD指令,因为不是所有运行你的代码的平台都可以支持SIMD操作。第一个cfg标记仅为指定平台(x86或x86_64支持AVX2)输出以下代码,而里面那个cfg标记将为特定平台选择正确的_mm256_add_epi64指令。

通过std :: arch提供支持SIMD只是Rust在SIMD支持方面迈出的第一步。事实上,Rust已经计划了另一个模块std :: simd,它将提供更高级别的操作。在std :: simd中可以通过faster crate,如用户可以使用simd_iter代替iter,或使用simd_map代替map等,来完成SIMD版本的基本矢量操作。

该语言的另一个新功能旨在让trait语法更加明确,当给定trait对象对应一个或两个指针时,让表示更加清晰。trait对象的表示语法如下:

    Box<Foo>

这个语法隐藏了一个事实,即当Foo是一个结构时,它将被简单地嵌入到Box中。相反,如果它是一个trait,将被分配到堆上,并且一个指向它的vtable的指针将被分配到栈上。这是由于Rust中的vtable并不是与数据保存在一起的,而是分开存储,这个与C++不一样。为了让这些更加明确,现在Rust支持一个新的trait语法(dyn trait):

    Box<dyn Foo>
    &dyn Foo
    &mut dyn Foo

旧的语法将保持不变,并且没有计划要弃用它。

最后,#[must_use]属性现在可以用在函数上,让编译器标记这些忽略了函数返回值的情况:

#[must_use]
fn double(x: i32) -> i32 {
    2 * x
}

fn main() {
    double(4); // warning: unused return value of `double` which must be used

    let _ = double(4); // (no warning)
}

要详细了解Rust 1.27,请不要错过官方发布说明。

查看英文原文Rust 1.27 Adds Support for SIMD

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

深度内容

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT