BT

Rust 1.27がSIMDのサポートを追加

| 作者: Sergio De Simone フォローする 13 人のフォロワー , 翻訳者 編集部T _ フォローする 0 人のフォロワー 投稿日 2018年6月26日. 推定読書時間: 3 分 |

原文(投稿日:2018/06/23)へのリンク

単一命令・複数データ(SIMD)のサポートは、Rust 1.27の最も注目すべき新機能であり、traitのための明示的な構文ともに提供される。

言語レベルでのSIMDサポートは、開発者がベクトル化された計算をより高レベルで表現でき、コンパイラが自動ベクトル化を適用する上で十分にスマートでない場合、コンパイラの性能を上回る可能性を意味する。以下は、16要素の2つのベクトル(またはスライス)の合計を表現する方法の例である。各要素は1バイト長(u8)である。各スライスは1つの128ビットレジスタに収まるので、2つのスライスを2つのレジスタに入れ、新しい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フラグは、指定されたプラットフォーム(AVX2をサポートしているx86またはx86_64)の場合にのみ、続くコードを出力する一方、内側のcfgフラグは特定のプラットフォームに対して正しい_mm256_add_epi64命令を選択する。

std::archが提供するSIMDサポートは、Rust SIMDサポートの第一歩に過ぎない。実際には、std::simdモジュールが既に計画されており、それによって高レベルの操作が提供される。std::simdでできることの例は、よりfasterクレートを通して提供される。これにより、iterの代わりにsimd_iterを、mapの代わりにsimd_mapを使うといったように、SIMD-ifiedバージョンの基本的なベクトル操作を使うことができる。

この言語のもう1つの新機能は、trait構文をより明示的にすることである。そして、与えられたtraitオブジェクトがただ1つのポインタまたは2つのポインタに対応するかを明確にすることを目的としている。traitオブジェクトを表すための基本構文は次のとおりである。

    Box<Foo>

この構文は、Fooが構造体である場合、それがBox内に単純に埋め込まれるという事実を隠す。逆に、それがtraitであればヒープに割り当てられ、そのvtableへのポインタがスタックに割り当てられる。これは、C++の場合と同様、Rustのvtableにデータが格納されていないためであり、故に別々に格納される。より明確に言うと、Rustは新しい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の詳細については、公式リリースノートを見逃さないようにしてください。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

特集コンテンツ一覧

ASP.NET Core - シンプルの力

Chris Klug 2018年6月4日 午前3時26分

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT