The simd2. The SIMD Series
• #1 Get the SIMD! ― SIMDを手に入れろ!
• #2 The Ancient System ― 古きモノ
• #3 The Power ― その力
• #4 Control the SIMD ― SIMDの制御
• #5 The Parallel and the Concurrency ― 並列と並行
• #6 The Two Laws or Curses ― 2つの法則、あるいは呪い
• # … The New … to the Present … ― … 新たな … 現代へ …
数回に分け
マス・w・
3. … by Usagi Ito
• Current Working
• Software Architect / System Engineer of a Geological Software Maker
• Old Working
• Instructor of the Computer Engineering
• An Engineer of the Game Server, the Web System and Linux Infrastructure
• The Works and the Supports
• One of the Organizer of the “After-5 of an Adult Conversation Series”
• One of the Organizer of the “Sapporo C++ Study Group”
• One of the Authors of the Emscripten
• One of the Translator of a several OSS products
• One of the Overseeing members of “PROGRAMMING: Principles and Practice Using C++” Japanese
Edition
• Contacts
• Facebook: usagi.wrp
• GitHub: usagi
こまけぇ(ry
7. CPUに搭載されたSIMD命令の役割とは?
I1 • z[0]=x[0]+y[0]
I2 • z[1]=x[1]+y[1]
I3 • z[2]=x[2]+y[2]
I4 • z[3]=x[3]+y[3]
I1 z[0]=x[0]+y[0]
I1 z[1]=x[1]+y[1]
I1 z[2]=x[2]+y[2]
I1 z[3]=x[3]+y[3]
通常の命令による逐次処理 SIMD命令による並列処理
処理時間: 命令4回分 処理時間: 命令1回分
あくまでも
イメージ デス
11. SIMD: Single Instruction Multiple Data
• 「Single Instruction: 単一の命令で」
• 「Multiple Data: 複数のデータ」
• ひとよんでSIMD(しむど)と申す( ・`ω・´)
少しまじめに
解説しはじめる・w・
12. Flynn’s taxonomy: フリンの分類
SIMD
MIMDMISD
SISD
• 「命令」vs.「データ」
• 「単一」vs.「複数」
• Michael J. Flynnが1966年に提唱
した計算機の命令とデータの4
つの単一・複合のアーキテク
チャーパターン
• SIMDはそのうちの1つ
ややマジメな
解説・w・
http://arith.stanford.edu/~flynn/
Michael J. Flynn (1934~; Age 81)
13. 最近の”演算装置”をフリンの分類に当てはめると?
SISD
• PCのCPUの一般的な命令
• x86, x87
• ARMv6
SIMD
• PCのCPUの特別なSIMD命令
• MMX, 3DNow!
• SSEx
• Smart DeviceのCPUの特別な
SIMD命令
• Neon
• PPCのベクター演算ユニット
• Altivec
MISD
• ドーナツ屋
• (演算装置での実用的な実
装製品は無いらしい)
MIMD
• Super-computerのシステム
全体を見ればMIMDっぽい
• Grid-computingのシステム
もMIMDとも言えなくもな
い
Big-dataの
Map&Reduceや
関数型言語って
これっぽいよね・w・
GPUもSIMD
だよ・w・
15. Get the SIMD
• 1993年
• i486の後継世代のCPUとして当時のPCのCPU戦国時代にintelが投入したCPU
• その名を"Pentium"(ペンティアム)
• 1996年
• Pentiumアーキテクチャーの第3世代バージョン"P55C"が実売開始される
• MMX命令(PC向けCPUでは初となるSIMD命令)が搭載される
「アメリカからの独自
ルートで仕入れた」
AMD
VIA
1996年12月当時のPC Watchの記事を
いまでも読むことができる
Cyrix
http://pc.watch.impress.co.jp/docs/article/961220/mmx.htm
16. 1996年末、こうしてPCのCPUは
SIMDを手に入れたのでした
• 実際に一般市民が購入できた"パソコン"としては、
• NEC PC9821V200 が主(当時はパソコンショップ≈NECのPC98ショップ)
• 実際にはPentium ProやMMX Pentium 233MHzの製品が市場に流通してからも
長いことPC9821V13が売れ続け、PCが10万円ちょっとで買える時代となった
• 当時のMMX Pentium 200MHz搭載機はまだ20万円より高値、一部の今で言うマ
ルチメディア系のクリエイターやゲーマーなどマニアックなユーザーにしか
MMX命令搭載のCPUはまだ普及しなかった
• そもそもMMX命令対応のソフトウェアなんて無いに等しかった
• 少なくともCにインラインアセンブラー等で部分的であれMMX命令を直接機械語で
コーディングできるプログラマーにしか実装できなかった(当時)
19. ちなみに…
本当にSIMDが一般的にPCで使えるようになったのは?
• Pentium II ・・・ ではなくて、現実には Pentium III くらいの時代か
な?
• Pentium IIIでMMX命令の弱点を克服しつつ、とってもパワーアップしたSSE命
令が追加されてからソフトウェアでの実用も増えました
• intelの驚異的なライバルに成長していたAMDのCPUはPentium IIIのSSE命令よ
りも先に似たような3DNow!命令を追加していたのだけど普及に失敗・・・
• 実はPentium4より後、PC向けのCPUが64-bitになってから?
• AMDのAMD64命令セットにintelもItaniumを諦めてEM64Tと称し対応し、
x86_64という互換レベルのCPUを作り続けるようになってから
• x86_64にはSSE, SSE2までが拡張ではなく基本命令セットとして取り込まれたた
めにCPUに応じてサポートを気にする必要があまりなくなってから一般に普及
• 現在はSSE4, AVX, SSE5などの最新の拡張レベルでは相変わらず戦争中・・・
• でも、コンパイラーが賢く進化してくれているし、JITのSIMD対応まで始まっ
ている時代だからね・w・
20. ともあれこうしてPCのCPUは・・・
• 1996年、MMX Pentium (P55C) で初のSIMD命令MMX
• Pentium II にも MMX は継承
• Pentium III で MMX の弱点を克服しつつ強化された SSE が登場
• AMDも3DNow!を搭載してCPUのSIMD対応を牽引
• Pentium 4 で SSE を強化する SSE2 が登場
• Pentium 4 後期型からSIMD処理をさらに強化するSSE3が登場
• Core で SSE4.1 SSE4.2 AVX AVX2と現在に至るまでSIMD命令は強化され続ける
• AMDもSSE5とか一応頑張ってマス・w・
SIMDを手に入れたのでした・w・
23. PC向けCPUよりも
古い時代のSIMDの歴史
• 1975
• ILLIAC IV
• イリノイ大学アーバナシャンペー
ン校が最後に完成させた計算機
• 開発期間: 10年
• 計画性能: 1 [GFLOPS]
• 13 [MHz] × 256 [#] 並列
• 実現性能: 100~150 [MFLOPS]
• 世界初のSIMD型計算ハードウェア
• 週40時間の保守が必要
• 1976年に登場したスーパースカラー
型のCray-1に追いやられる
スーパースカラー?
呼んだ?
http://ja.wikipedia.org/wiki/ILLIAC_IV
CPU いっぱい
シングルタスクの
Super-computer
みたいな・w・
24. ~198xまでのSuper-computerたち
• SIMD vs. Super-scalar
• ILLIAC IV (SIMD)亡き後はCray-1に
代表されるSuper-scalar型の設計の
計算機の時代が198xまで続く
• 用語としての"ベクター演算"は
SIMD型もSuper-scalar型も含むが、
事実上は長い間Super-scalar型の計
算機がベクター演算型の計算機と
して人類に開発・実用された
Super-scalar
そろそろ
しゃべっていい?
http://ja.wikipedia.org/wiki/Cray-1
27. PPCアーキテクチャーのSIMD命令
• PPC: Power PC
• IBM製のCPU(AIM連合による; AIM: Apple-IBM-Motrola)
• RISC: Reduced Instruction Set Computer 型CPU
• 古の Apple Macintosh に一時期採用(1994~2006)
• 任天堂 Game Cube に採用(PPC Gecko; 2001)
• 任天堂 Wii に採用(PPC BroadWay; 2006)
• Microsoft XBOX360に採用(PX)
Power Mac G5
SIMD命令
"Altivec/VMX"搭載
29. Cell Broadband Engine
• Cell Broadband Engine; 通称Cell(セル)
• SONY/IBM/東芝 製
• Playstation 3
• 説明略
• Roadrunner
• U.S.A. エネルギー省のSuper-computer(2008~2013)
• 一時 TOP500 で1位を維持
Roadrunner
http://ja.wikipedia.org/wiki/Roadrunner
"SPE: Synergistic Processor Element"
搭載
31. GPU
• GPU: Graphics Processing Unit
• NVIDIA GeForce
• ATI Radeon
• GPUは何をしているの?
• たくさんの頂点データ({x0,y0,z0}, {x1,y1,z1},…): Multiple Data を
• 単一の射影変換処理(ある視点で見た座標→別の視点で見た座標): Single Instruction で
• 変換処理して色を塗って絵として表示してくれるハードウェア
自分中心の座標 地球上の座標 地球上のとある場所のカメラから見た座標
GPUのお話は
またあとでじっくり
しましょう・w・
39. SIMDの使い方の基礎(SSE編)
• intrinsicsという仕組みを使うよ
• MMX <mmintrin.h>
• SSE <xmmintrin.h>
• SSE2 <emmintrin.h>
• SSE3 <pmmintrin.h>
• SSSE3 <tmmintrin.h>
• SSE4.1 <smmintrin.h>
• SSE4.2 <nmmintrin.h>
• AVX/AVX2/FMA <immintrin.h>
• AVX-512 <zmmintrin.h>
• SSEに代表されるIntel系のSIMD
命令は・・・
• intrinsicsでSIMDレジスターを変数
型として使える
• XMM float×4 __mm128
• intrinsicsでおよそSIMDの機械語に
対応するCスタイルの関数として使
える
• z = x + y z = _mm_add_ps( x, y )
アセンブらなくても
使える時代・w・
40. ところで、
XMMレジスターとは?(1/2)
レジスター
≈
CPUの中の計算用の記憶域
EAX EBX ECX EDX …
• 前提知識
• CPUは主記憶で計算処理してナイ
• load: COPY{ 主記憶 レジスター }
• store: COPY{レジスター 主記憶 }
• CPUが加算などの計算をする時の
オペランドは基本的には「CPUレ
ジスター」と呼ばれるCPU内部の
記憶域
• 汎用的に使えるレジスターは…
• EAX, EBX … など名前の付いた32bitの
記憶域など
ちなみに16bit枠はEAXのAX分
x86の進化の歴史が詰まってる
・w・
64. 計算機の進化と
並列化・並行化の法則
• ムーアの法則
• 𝑝 = 2 𝑛/1.5
• p: 集積回路上のトランジスター数の
倍率[-]
• n: 現時点からの経過年数[years]
• 『1年半でトランジスターの集積度
は2倍になる』
ムーアの法則(カーツワイルの収穫加速の法則)
面で実装されるデバイスの
集積度のはなし・w・
65. 計算機の進化と
並列化・並行化の法則
• アムダールの法則
• システム全体を並列化できるわけ
ではない
• システム全体の並列化による高速
化の限界は並列化できない処理に
依存する
• ポラックの法則
• intelの経験則
• 『CPUの性能向上は、ダイサイズ
の増加の平方根分にしかならい』
• ムーアの法則の1年半後の集積度は2
倍になるが、実効性能は 𝟐倍にし
かならない
ならばマルチコアだ!
参考: PC WATCH 後藤弘茂のWeekly海外ニュース 2004年11月
ポラックの法則を破るためのマルチコア
SIMDの高度化も並行処理
志向の進化の一旦
70. 次回 PART II 予告編
• 具体的なSIMD命令セットごとの特徴と扱い方の紹介
• x86_64: MMX/SSE/SSE2/SSE3/SSSE3/SSE4.1/SSE4.2/AVX/FMA
• ARMv7: Neon
• SIMD最適化と現実の構造体
• 色: RGB … 3要素
• 3D座標: XYZ … 3要素
• "Array of Structure"と"Structures of Array"
• より手軽でクロスプラットフォームなSIMD最適化
• Intel SPMD Program Compiler
• おまけネタ
• simd.js
• ES7とSIMD
ここまでできたら今度こそ
SIMDマスター?
・w・