x86のSIMD命令(SSE)の動かし方を調べました
最近、ベクタ命令を学ぶ気になったので、SIMD/ベクタ命令を試そうとしました。 まずは最も身近にあるIntel CPUのSIME命令であるSSEを試しに動かしてみることにしました。
- SSE命令とは
↑の説明で、なんとなく概要は理解したところで、さっそく動かしてみることにします。 調べてみるとAVX2, SSEのわかりやすいサンプルがあったので、使ってみることにしました。
AVX命令のサンプル
- GitHub - kshitijl/avx2-examples: Short examples illustrating AVX2 intrinsics for simple tasks.
- 簡単な足し算のサンプルから、役に立つ情報サイトまで提示されていました。
- AVX命令のリファレンスガイド Intel® Intrinsics Guide
SSE命令のサンプル
- C++ – Getting started with SSE | Félix Abecassis
- sqrtのサンプルがありました。性能測定もしていて、SSE命令だと2-4倍ほど高速になることがわかりました。
- 実行時間測定用のTimerクラス実装について記述あります。個人的に感動しました
上のサンプルをまとめたレポジトリを作成しました。
# SSE命令サンプル実行 make sqrt ./sqrt 64000000 # AVX命令サンプル実行 make test_avx ./test_avx
あとがき
本当は、RISC-Vのベクタ命令を試したかったんですが、 悲しいことに以下方法でインストールする方法だと、ベクタ命令非対応のようでした。。 どうやれば動かせるか確認中です。