😸

C 言語 SIMD 入門:目次

2023/04/28に公開

はじめに

この記事では AVX2 を使用したプログラミングを解説した記事の一覧を紹介します。
言語はすべて C 言語です。

C# で並列化したい場合はこちらの記事から参照してください。

https://zenn.dev/k_taro56/articles/vetcorized-csharp-introduction

SIMD とは

SIMD は Single Instruction Multiple Data の略で、一度の命令で複数のデータを処理することができます。
プログラムを高速化する上で非常に重要な技術の一つで、圧倒的な高速化が見込めます。

SIMD は CPU によって命令セットが異なります。
x86 では SSE、AVX、Arm では NEON などがあります。
SSE では 128 ビットのデータを、AVX(AVX2)では 256 ビットのデータを 1 つの命令で処理できます。

このシリーズの記事では Haswell 世代(2013 年発売)以降の CPU で使用できる AVX2 を使用しています。
C言語からは immintrin.h ヘッダーファイルをインクルードすることで、SIMD 命令と一対一に結び付いた関数を使用することができます。
MSVC では intrin.h ヘッダーファイルをインクルードすることで SSE などにも対応できますが、MSVC でしか使用できません。

コンパイラーは MSVC を対象にして解説しています。記事によっては他のコンパイラーで動かないことがあります。

記事一覧

関数一覧

今までに解説した関数の一覧です。
どの記事でも解説は同じです。

算術演算

_mm256_add_epi32

_mm256_hadd_epi32

_mm256_mullo_epi32

比較操作

_mm256_cmpeq_epi32

_mm256_min_epi32

_mm256_max_epi32

読み取り・書き込み操作

_mm256_loadu_si256 _mm256_storeu_si256

挿入/抽出操作

_mm256_extract_epi32

その他の操作

_mm256_movemask_ps

_mm256_set1_epi32

_mm256_setzero_si256

パックドテスト操作

_mm256_testz_si256

置換操作

_mm256_permute2x128_si256

ベクトルの型キャスト操作

_mm256_castsi256_ps

参考になるサイト

GitHubで編集を提案

Discussion