GPU 上の Rust SIMD

2026/08/11 3:12

GPU 上の Rust SIMD

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

VectorWare は、既存の CPU コードを書き換えずに、Rust の SIMD 抽象化(例:

core::simd
)を用いて高パフォーマンスな GPU アプリケーションを実行することを開発者にもたらす技術であり、この分野における世界初です。この画期的な成果は、標準的なスレッディングの概念を NVIDIA GPU ワープロップに直接マッピングし、手書きの PTX と比較して零のオーバヘッドを実現します(例えば、通常の
fn main
#![feature(portable_simd)]
を付与したソースコードで)。これは、内部の Rust ベースの中間表現(IR)を活用することで可能になっています。システムは要素ごとの算術演算、レーンマスクを生成する比較、それらによる選択操作、およびレーンをまたぐ水平型削減をサポートします。さらに、ワープロンプログラミングのための決定論的なテストを確保し、CPU デバッグツールに匹敵する信頼性を提供する専用参照インタプリタも実装されています。現在では NVIDIA ハードウェア向けに最適化されていますが、アーキテクチャ非依存の IR は、AMD のウェーブフロントおよび Vulkan サブグループ向けにも設計されています。今後の開発では、GPU 向けのスレッド合成や非同期操作の実装、また行列形状の SIMD をテンザコアへの変換(ローリング)が焦点となります。この進展により、業界ユーザーは新たなベクトル型を導入したり膨大なコード書き換えを伴う高コストなアプローチをとらずとも、要素ごとの算術演算と削減を効率的に活用することができます。ただし、制約としては、ベクトル幅の不一致(例:CPU の柔軟な N 対 GPU の固定 32/64 レーン)、およびハードウェアパターンと一致しない跨レーン操作におけるパフォーマンスコストが含まれます。

本文

VectorWare のリリース:Rust
core::simd
を GPU で活用する新しい時代の到来

VectorWare は、世界初の GPU ネイティブソフトウェア企業 として新たなマイルストーンを達成しました。Rust の移植可能 SIMD(

core::simd
)が GPU でも成功裏に動作することを確認し、開発者が Rust の馴染み深い抽象化を用いて、GPU の全機能を駆使した高機能なアプリケーションを開発することを可能にしました。

本記事では、このリリースの詳細、技術的な実装方法、メリット・デメリットについて解説します。


1. スレッド内の並列性(Parallelism below the thread)

従来の GPU プログラミングでは、Rust のスレッドを GPU の「ワープロム(Warp)」にマッピングすることで多数の並列処理が可能になっていましたが、ワープロム内部のスレッド(またはレーン)の並列性までは活用できませんでした。

SIMD とは何か?

CPU においてスレッド内の並列性を抽象化する仕組みが SIMD です。

  • 動作原理: 1 つの命令で複数のデータ要素に対して同時に操作を行います。
  • 具体例: スカラコードで 2 つの数値を加算する代わりに、SIMD add は「8 つの f32 値からなるベクトル」を受け取り、一度に 8 つの和を生成します。

この並列性は、OS がスケジューリングを行うレベルより下位のスレッド内部で行われます。

CPU スレッド
├── SIMD 演算
│   ├── チェーン 0
│   ├── チェーン 1
│   ├── チェーン 2
│   └── … (SIMD チェーン)

同様に、GPU のワープロムも内部に複数のチェーンを持ちます。

GPU スレッド ≒ ワープロム
├── SIMD 演算
│   ├── チェーン 0
│   ├── チェーン 1
│   ├── チェーン 2
│   └── … (ワープロム チェーン)

2. Rust の移植可能 SIMD(Portable SIMD)

歴史的には、Rust で SIMD を記述するにはアーキテクチャ固有のベンダーイントリンシックに頼る必要がありましたが、

core::simd
はこれを抽象化しました。

特徴

  • 単一の汎用型:
    Simd<T, N>
    という型が提供され、T 型の N 個の要素からなるベクトルを表現します。
  • 記述の簡便さ: 算術演算や比較操作などは一度だけ記述し、コンパイラがターゲット CPU の命令へと降下させます。
  • GPU 対応の利点:
    core::simd
    std
    ライブラリに含まれていないため、GPU 向けに持ってきた
    std
    サポートさえ不要という軽量な利点があります。

VectorWare では、GPU も移植可能 SIMD がターゲットとするベクトルハードウェアの一例に過ぎないと捉えています。

動作比較

SIMD の定義は「1 つの命令が多数のデータ要素に対して操作を行う」ことですが、SIMT(Single Instruction, Multiple Threads)モデルにおいてもこの定義を満たします。

CPU の例

let a: Simd<i16, 32> = [1, 1, 1, ..., 1];
let b: Simd<i16, 32> = [2, 2, 2, ..., 2];
let c = a + b;

// コンパイル結果:vpaddw %zmm2, %zmm1, %zmm0

GPU の例

同じソースコードですが、コンパイル結果は GPU 向けの命令に変換されます。

let a: Simd<i16, 32> = [1, 1, 1, ..., 1];
let b: Simd<i16, 32> = [2, 2, 2, ..., 2];
let c = a + b;

// コンパイル結果:add.s16 %rs3, %rs1, %rs2

このマッピングにより、CPU スレッドと GPU ワープロムが同じ役割(チェーンを駆動する)を果たすことが完成しました。


3. 世界初の「core::simd on the GPU」

core::simd
のコードはリスト表記であり、視覚的に CPU との違いが見えにくいですが、ラップトップ上で動作する x86-64 SIMD コードをそのまま GPU でコンパイル可能にしました。ソースコードの変更は一切不要です。

以下のコードは、要素単位の演算、比較マスクによる選択、合計などの中核機能を備えています。

#![feature(portable_simd)]

use core::simd::cmp::SimdPartialOrd;
use core::simd::num::SimdFloat;
use core::simd::{Select, Simd};

// 移植可能 SIMD:ターゲットに応じて x86-64、Arm、またはスカラコードへと降下します。
fn relu_dot(a: Simd<f32, 32>, b: Simd<f32, 32>) -> f32 {
    // 要素単位の乗算:一度に 32 つの積が計算されます。
    let products = a * b;

    // チェイン単位の比較はマスクを生成し、各チェインに対応する論理値 1 つずつを持ちます。
    let positive = products.simd_gt(Simd::splat(0.0));

    // 陽の積を残し、残りはゼロに置換します。
    let clamped = positive.select(products, Simd::splat(0.0));

    // 全てのチェインを横断して合計を単一のスカラ値へ減少させます。
    clamped.reduce_sum()
}

fn main() {
    // 普通のリストで構築された、幅 32 の 2 つのベクトル。
    let a = Simd::<f32, 32>::splat(2.0);
    let b = Simd::<f32, 32>::from_array(std::array::from_fn(|i| i as f32 - 16.0));

    // 要素単位の演算、比較マスクによる選択、そして減少:
    // いずれも普通のリストで記述された移植可能 SIMD で、いずれも GPU 上で動作します。
    let result = relu_dot(a, b);

    // GPU から印刷されます(我々の std サポートを使用)。
    println!("relu_dot = {result}");
}

エントリーポイント:

fn main
に GPU 固有のアノテーションは含まれていません。VectorWare のツールチェーンがこれを GPU カーネルとしてコンパイルし、結果をデバイス上から印刷します。


4. 実装方法

このマッピングは、「ワープロムはチェイン個々にアドレス可能であるベクトルユニットである」という洞察に基づいています。

対応可能な操作

  • 要素単位の演算: 加算、乗算、比較などは
    Simd
    に対する普通のリストのトレイト実装から得られ、GPU はこれらをネイティブに実行します。
  • SIMD 合計:
    reduce_sum
    reduce_max
    は GPU のワープロムシャッフル命令を利用して値を統合し、同じスカラ結果を生成します。
  • チェイン横断のシャッフル: シフトや回転などは、GPU のチェインがデータを交換するのに優れたワープロムシャッフル原語へと直接マッピングされます。
  • SIMD マスク:
    Mask::select
    はすべてのワープロムチェインで選択を実行し、
    any
    all
    などの横断クエリは GPU の投票(vote)命令を利用します。

スカラー値とデータ並列性

周辺コード内のスカラ値(ループカウンターや定数など)は各チェインによって同一に計算されるため、通常の CUDA と同様、ワープロム全体へ複製されます。

  • ユニフォーム: 単なる
    f32
    はユニフォームです。
  • バリエーブル:
    Simd<f32, 32>
    はバリエーブルです。

中間表現(IR)と安全性

VectorWare では IR を Rust の型システム内へ符号化しています。

  • 型付けされた演算: ボールト、シャッフル、合計、スキャン、集約、アトミック操作などが型付きで定義されます。
  • エラー防止: オペランドや実行形状も型付けされるため、無効なプログラムはコンパイル段階で阻止されます。
  • コストゼロの降下: 手書きの PTX を参照する必要なく、IR が直接対応する命令へと降下します。

5. メリットとデメリット

✅ メリット

  • ソースコードの共通化: 同じソースコードが CPU および GPU で動作します。移植可能 SIMD を利用している既存のコードも GPU 実行候補となります。
  • 抽象化のコストなし:
    Simd<T, N>
    は普通のリスト所有値です。Borrow Checker やライフタイムなど、Rust の型システムが CPU と同様に適用されます。GPU 固有のベクトルタイプを追加する必要はありません。
  • 既存コードの活用: 未変更の CPU コードでも GPU のチェインレベル並列性を活用可能です。

⚠️ デメリットと注意点

  • 安定性の欠如:
    core::simd
    はまだ Rust 内で不安定な機能です。ナイトリービルドで
    #![feature(portable_simd)]
    が必須であり、インターフェースに変更が生じる可能性があります。
  • ベクトル幅の一致: 抽象化のコストゼロ性は、ベクトル幅(N)がワープロムのチェイン数(32 または 64)と一致する場合のみ保証されます。
    • N が小さい場合:一部のチェインがアイドル状態になります。
    • N が大きい場合:一部または全てのチェインが複数の要素を処理しなければなりません。
  • シャッフルの制約: ハードウェアがサポートする特定の置換パターンのみが安価です。任意の置換は複数命令や共有メモリを必要とします。また、横断演算はスケジューラによるタスクの重なり合いに制限を受けます。
  • コンパイラの未踏領域: この抽象化の一貫性を確保するためにコンパイラの変更が必要で、全てのケースをカバーしたか確信を持っていません。

6. 今後の展望と戦略

次のステップ:統合

SIMD、スレッド、非同期処理がすべて GPU にマッピングされた後の自然なステップは、それらを統合することです。

  • スレッドがタスクをワープロム間で分散させる。
  • core::simd
    が各ワープロム内のチェイン間でデータを分散させる。
  • 非同期処理がこれらの間における並列性を構造づける。

マトリックスとベクトライゼーション

  • マトリックス形状の SIMD を GPU のテンソルコアへと降下させることを検討中です。
  • スカラ Rust ループを自動的に Simd 操作へベクトライゼーションし、
    core::simd
    に依存せずともワープロムレベルの並列性を導入する手法も探求しています。

ベクトル表現の再考

CPU と GPU で共有されるベクトル表現は価値がありますが、現在の

core::simd
タイプがその基礎に適しているかは未だ不確かです。さらなる探求が必要となります。

VectorWare のスタンス

  • Rust への注力: GPU における進歩のスピードは Rust の抽象化とエコシステムの力量を示しています。VectorWare は高性能かつ信頼性の高い GPU ネイティブアプリケーション開発において、Rust が最も適していると信じています。
  • 多言語対応も視野に: 現時点では Rust に注力していますが、今後の製品では複数のプログラミング言語およびランタイムをサポートする予定です。

7. 追跡情報

最新の情報は以下のチャネルで共有されます。

  • SNS: X(旧 Twitter)、Bluesky、LinkedIn
  • ブログ: VectorWare の公式ブログ
  • お問い合わせ:
    hello@vectorware.com

今後数ヶ月間で、作業の詳細についてさらに詳しく共有してまいります。

同じ日のほかのニュース

一覧に戻る →

2026/08/10 19:10

Muse Glimmer:常時稼働型ローカルエージェントワークフローに最適化された 30 バラマイトモデル

## 日本語翻訳: 以下に、キーポイントリストに含まれていた欠落した事実的詳細を取り込みつつ、明確さと流れを維持し、ソース資料の包括的な表現を確保する改良されたサマリーを提示します。 ## 改良されたサマリー: Meta は、標準的な消費者向けハードウェアでの高性能で常時稼働可能なローカルエージェントワークフローに特化するように設計された、300 億パラメータを持つ AI モデル「Muse Glimmer」を正式にオープンソース化しました。このモデルは Apache 2.0 ライセンスの下でリリースされており、Meta の大型の Muse Spark チェリーターからの新型ディストリルションレシピと、コンパクトなアーキテクチャを通じて、ハードウェア制約と能力をバランスさせることで、インターネット接続なしで完全オフラインでの高度なタスク(関数呼び出し、ローカルコーディング、LLM-as-a-judge 評価など)の遂行を可能にします。モデルは 100 語以上の言語をサポートし、認識エンコーダーによるマルチモーダル入力を備えています。 MacBook M4-Max、M5-Max、RTX 5090(24 GB または 32 GB の VRAM)など、デバイス上での流れるようなリアルタイム相互作用を確保するために、モデルは重みを 20 GB 未満に圧縮する 4 ビット量子化を採用しています。推論はさらに加速され、DFlash ベースの「drafter」モデルを使用してスペキュレティブデコーディングが行われます。このドラフトモデルは並列でトークンブロックを提案し、それを検証します。Muse Glimmer は DeepSearch QA、MCP-Atlas、𝛕-Bench、SWE-Bench などのベンチマークで強靭なパフォーマンスを発揮し、Gemma4-31B や Qwen3.6-27B を上回っています。 開発リソースは Hugging Face で公開されており、llama.cpp、MLX、ExecuTorch、Ollama、LM Studio、Unsloth、Together AI などを含むフレームワーク向けの最適化された統合が順次導入される予定です。モデルのトレーニングは 3 つのフェーズ(事前学習:ログイットディストリルテーション、中盤学習:より長いコンテキストとエージェント主体のデータ、事後学習:オンポリシーディストリルテーションおよび強化学習を用いた SFT)で行われました。これらの取り組みは、複雑なコーディングおよび評価シナリオにおけるアクセシブルなローカル AI 実行のエコシステムを大幅に拡張します。

2026/08/11 5:20

イリノイ州が、Linux を年齢確認義務の対象とする法律を可決しました。

## Japanese Translation: イリノイ州は HB5511(公共法 104-0664)を制定し、主要なソーシャルメディアプラットフォームおよびオペレーティングシステムプロバイダーを対象とした厳格な法律を施行することで、オンライン上の未成年者の保護を図っています。同法案は段階的に適用され、2028 年 1 月より発効します。この立法により、18 歳未満の利用者に対してデフォルトの保護措置が適用されます。具体的には、アルゴリズムに基づくフィードの禁止、午後 10 時から翌日午前 7 時までの通知制限、大人の不特定多数からの連絡遮断が含まれます。2028 年までに、OS ベンダーおよびアプリストアは必須の年齢申告手順を実施し、利用者の年齢層(13 歳未満、13〜15 歳、16〜17 歳、または 18 歳以上)を表す暗号化された API シグナルを提供する必要があります。「未成年」という年齢層が受信されると、これらの安全デフォルトが自動的に適用されます。コロラド州やカリフォルニア州の法律とは異なり、HB5511 はオープンソースソフトウェアプロジェクトに対する**免責条項を設けていない**ため、GitHub に代表されるコミュニティ運営または非営利のコードリポジトリにも適用されます。執行はイリノイ州司法長官に独占されており、個人による私的訴訟は禁止されています。法案本文では、過失による違反については影響を受けた子供 1 人あたり民事罰が 2,500 ドル、故意な違反については 7,500 ドルと上限が定められていますが、プリッツカー知事のプレスリリース当初には最高 50,000 ドルというより高い罚款が言及されており、本文では完全に調整されていない不一致が生じています。

2026/08/11 6:36

Claude が生成したコンテンツをどうマークするか

## Japanese Translation: Anthropic は、生成 AI システム(具体的には Claude モデル)に義務的なラベリングを統合することで、EU の AI 法における第 50 条(2)項の「透明性に関する行動規範」に署名しました。法的義務に対応するために、Anthropic は対応する Claude モデルからのテキストに直接、不可知で機械可読なウォーターマークを組み込みます;これらのウォーターマークはコピーやペースト、編集後も維持され、Claude の全製品に適用され、意味に影響を与えません。画像(対応ファイル形式)については、C2PA オープン標準に従って署名された出所メタデータを付与し、真正性を検証および改ざんの検出を行います。Anthropic は、ユーザーおよび第三者によるこれらのシグナルの検出を可能にし、詳細が利用可能になるにつれて技術文書を公開します。機械可読マークには、コンテンツタイプを超えた固有の制限が存在することに言及し、サービス展開者に第 50 条の要件に関するコンプライアンスを独立して評価することを推奨しています。これからは、パートナーが EU フレームワーク下における継続的な透明性義務に対応できるよう、さらなるガイダンスを提供します。

GPU 上の Rust SIMD | そっか~ニュース