SIMDメモ

back

概要

Flynn の分類

Single InstructionMultiple Instruction
Single DataSISDMISD
Multiple DataSIMDMIMD

SIMD 対応アーキテクチャ

x86

ハード

種類と特徴

レジスタ

MMX

mm0 - mm7 まで 各64bits(8bytes)。レジスタは FPU と共有

Intel 系では FPU->MMX のときは emms 命令を使う必要がある。 AMD 系では FPU->MMX, MMX->FPU のときに femms 命令を使う。

3D Now

FPU, MMX と同じレジスタを共有しているため、 emms 命令を呼び出しの前後に使う必要がある

SSE

XMMレジスタは xmm0 - xmm7 まで 各128bit

AMD64

SSE, SSE2 が基本命令セットに組み込まれている。 XMM レジスタは xmm15 までの 16本

対応表

MMX3DNow!SSESSE2SSE3SSE4AVX
K6○
K6-2○○
K6-3○○
Athlon○○ (Enhanced)
AthlonXP○○ (Professional)○
Athlon64○○○○
Athlon64(Venice)○○○○○
Athlon64 X2○○○○○
Phenom○○○○○○ SSE4a
FX○○○○○○ SSE4a, 4.2○
MMX Pentium○
Pentium II○
Pentium III○○
Pentium 4○○○
Pentium M○○○
Pentium 4(Prescott)○○○○
Pentium D○○○○
Core○○○○
Core2Duo○○○○ (+ SSSE3)
Core2(Penryn)○○○○○ SSE4.1
i7○○○○○ SSE4.2
i7 (Sandy Bridge)○○○○○ SSE4.2○
Geode GX, LX○○
Geode NX○○ (Professional)○
Atom○○○○ (+ SSSE3)

使い方 (言語ごと)

C言語

C++言語

Visual C++ の場合

使い方 (コンパイラごと)

gcc

コンパイラオプション

自動ベクトル化 (GCC4.0)

-ftree-vectorize オプションで、ループ処理を AltiVec, SSE を使用するように自動生成する。 -O2 等の最適化では有効にならない。

GPGPU

Programmable shader を 3DCG 以外の一般的な計算に利用する方法。 使えるスレッド数は GPU ごとに異なる。

OpenCL

RadeonHD 4000 シリーズ, GeForce 8 シリーズ から使える

CUDA

GeForce8以上で使える。 Quadro FX 370, 570, 1700, 5600, 4600 以降