1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mojo 0.26.2 で SIMD は本当に LLVM Vector に Lowering されるのか検証した

1
Posted at

Mojo 0.26.2 で SIMD は本当に LLVM Vector に Lowering されるのか検証した

背景

Mojo には SIMD 型が存在する。
では実際にそれは LLVM IR 上で <8 x i32> のような vector 型に lowering され、AVX 命令へと変換されるのだろうか?

今回はその点を、LLVM IR レベルで直接検証した。

目的はシンプル:

Mojo の SIMD[DType.int32, 8] は本当に LLVM vector 型に変換されるのか?

推測や期待ではなく、IR を見て判断する。


検証環境

  • Mojo: 0.26.2.0.dev2026022305
  • WSL2 Ubuntu
  • AVX2 対応 CPU

最小検証コード

余計な要素を排除し、最小構成で検証する。

from builtin.simd import SIMD

comptime Vec8i = SIMD[DType.int32, 8]

fn main():
    var x: Int32 = 3
    var a = Vec8i(x)
    var b = Vec8i(x + 1)
    var c = a * b

    print(c[0])

ここでやりたいのは:

  • SIMD[DType.int32, 8]
  • ベクトル同士の乗算

これが LLVM IR 上で <8 x i32> になるかを確認する。


LLVM IR の生成

Mojo から LLVM IR を出力:

mojo build test.mojo --emit llvm -o test.ll

次に vector 型を検索:

grep "<8 x i32>" test.ll

結果

検索結果:

(何も出ない)

IR 内に <8 x i32> は存在しなかった。


何が起きているのか

LLVM が AVX 命令を生成する条件は明確:

  • IR に <N x T> の vector 型が存在すること

例:

<8 x i32>
<4 x float>

これが存在して初めて LLVM backend が

  • ymm レジスタ
  • vpmulld
  • vpaddd

などの SIMD 命令を生成する。

しかし今回の IR には:

i32

しか存在しなかった。

つまり:

このバージョンの Mojo では SIMD が LLVM vector 型に lowering されていない。


結論

Mojo 0.26.2 nightly において:

  • SIMD 型は存在する
  • 型チェックは通る
  • コードはコンパイルできる
  • しかし LLVM IR には vector 型が生成されない

したがって:

現時点では AVX 命令は生成されない。

これは CPU の問題ではない。
最適化レベルの問題でもない。
lowering pipeline の問題である。


実務的な示唆

もし目的が:

1️⃣ Mojo の言語設計や内部実装の研究

→ MLIR/LLVM lowering pipeline を追う価値がある。

2️⃣ 高性能 SIMD 実装(例:Bloom Filter)

→ 現段階では C++ + AVX2 intrinsics でベースラインを作る方が合理的。

Mojo SIMD はまだ IR レベルで vector へ到達していない。


まとめ

検証手順はシンプル:

  1. 最小 SIMD コードを書く
  2. LLVM IR を出力する
  3. <N x T> を grep する

今回の結果:

<8 x i32> は存在しなかった。

推測ではなく、IR を見れば事実がわかる。

言語機能の成熟度を評価するには、
最終的に LLVM IR を見るのが最も確実な方法である。


今後は MLIR vector dialect への lowering がどう実装されるかを追跡すると面白い。。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?