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 以降