View
521
Download
4
Category
Preview:
Citation preview
The SIMDBY USAGI ITO
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・
… 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
この資料に含まれる画像等について• 画像について• この資料に含まれる写真は原則として Wikimedia Commons に収録された画
像を用いています• https://commons.wikimedia.org/wiki/Main_Page
• 他に特別なソースを用いる場合には都度、付近に出典を明示しています
The SIMDPART Ⅰ
今回終わらなかったところから PART
II全部終わったら
PART II は現代編へ
The SIMD #1
GET THE SIMD!
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 回分
あくまでもイメージ デス
CPU が足し算をする命令は add だけ?いいえ、違います
CPU に値 xを load
メインメモリー CPU レジス
ター
CPU に値 yを load
メインメモリー CPU レジス
ター
CPU/add計算結果は CPU
レジスターへ
CPU から値 z へstore
CPU レジスター メインメモリー
これがさっきの例だと 4回逐次処理
{ mov(load): 1[CPI] × 2 + add: 1[CPI] + mov(store): 1[CPI] } × 4 = 16 [clocks/process]
SIMD 命令だと?
CPU に値x[0,4) をまとめて load
メインメモリー CPU
レジスター
CPU に値y[0,4) をまとめて load
メインメモリー CPU
レジスター
CPU/addps
計算結果はCPU レジス
ターへ
CPU から値z[0,4) へまとめ
て storeCPU レジスター
メインメモリー
この手順を 1回だけで 4 つのデータの足し算が終わる!
{ movd(load): 1[CPI] × 2 + addps: 3[CPI] + mov(store): 1[CPI] } = 6 [clocks/process]
つまり SIMD とは?• 「同じ処理」を連続したデータに対して N回逐次実行する代わりに• 「同じ処理」を連続したデータ N件に対して一度にやっちゃって!• という CPU 命令のこと
狭義ニハネ・w・
SIMD: Single Instruction Multiple Data
• 「 Single Instruction: 単一の命令で」• 「 Multiple Data: 複数のデータ」• ひとよんで SIMD (しむど)と申す ( ・ `ω ・ ´)
少しまじめに解説しはじめる・w・
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)
最近の”演算装置”をフリンの分類に当てはめると?
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・
PC の CPU が SIMD 命令を手に入れたのは何時?
i38612~40[MHz]
• x86 が 32bit 命令に拡張• EAX などのレジスターが汎用化
i48625~100[MHz]
• FPU(x87) を内蔵• L1-cache 8KiB 内蔵
Pentium 60~300[MHz]
•Super-scalar 実装 (1.0[IPC] の突破 )
•MMX命令の対応
Pentium II233~450MHz
• P6-microarchtecture
• 投機的実行 , out-of-oder
1985
1989
1993
1997
このへんの話は Dora Panda
さんの担当・w・
1995
Prntium Pro150~200[M
Hz]
http://www.pc-9800.net/
With 98 NEC PC-9800 シリーズ データバンクよりカタログ画像を引用
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
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 命令を直接機械語
でコーディングできるプログラマーにしか実装できなかった(当時)
Appendix ICPU が 200MHz の時代の MMX で実現できた事!
フェードイン /フェードアウト
のリアルタイム処理
具体的には・・・
- 640×480[pixels] の RGB 画像 - MMX: 60 [FPS] - 非MMX: 20 [FPS]
そういう時代じゃった・w・
参考• http://hp.vector.co.jp/authors/VA014520/asmhsp/chap8.html• T.T Land / MASM による HSP 用プラグインの作り方 / 8.MMX 命令による画像処理• 実際に MMX 命令が使用可能かチェック(この時点で機械語の取り扱いが必要)し、• MMX 命令でフェードイン / フェードアウトを機械語実装する例が紹介されています
PART I ではチラッと見るだけ~ PART I では触れないけれど…
EMMS 命令とかレジスターのx87 との共有とか MMX には
ネ…
ちなみに…本当に 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・
ともあれこうして 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・
The SIMD #1
GET THE SIMD!
FIN
The SIMD #2
THE ANCIENT SYSTEM
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・
~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
SIMD 型の並列計算は・・・• 実は 199x 年代になるまで Super-computer でも使われないまま
でした• →200x 年代になるとそうでもないのだけど、それはまた HPC のおはなし
• 1996 、 PC向け CPU の MMX Pentium の登場呼んだ?
研究や議論はさておき、実製品としての SIMD 型のハードウェア、特にマイクロプロセッサーの命令として対応したのは実は PC の CPU の MMX Pentium から
MMX もいまから 20 年も昔のはなし十分に Ancient だね・w・
PC の CPU以外でのSIMD の実装例はないの?
• 身近な例、• あります・w・
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" 搭載
ARM アーキテクチャーの SIMD 命令• ARM• RISC 型(ということになっている)• 省電力かつパワフルな組み込みデバイスはたいてい採用• 多くの Smart Phone ( ~ 現在)• Raspberry Pi 2 ( 2015~ )• 任天堂 3DS ( 2011~ )
SIMD 命令"Neon" 搭載
Neon は ARMv7 仕様なので
Raspberry Pi は "2" から・w・
ほぼ現代だけどキニシナイ・w・
Cell Broadband Engine
• Cell Broadband Engine; 通称 Cell (セル)• SONY/IBM/東芝 製
• Playstation 3• 説明略
• Roadrunner• U.S.A. エネルギー省の Super-computer ( 2008~2013 )• 一時 TOP500 で 1位を維持
Roadrunnerhttp://ja.wikipedia.org/wiki/Roadrunner
"SPE: Synergistic Processor Element"搭載
PC以外の x86 系 CPU のSIMD採用例• Pentium III• Intel 製
• XBOX ( Mobile Celeron 733MHz; 2001~ )
SIMD 命令"MMX"&"SSE"搭載
そろそろ SIMD がどんなところで必要とされているか
見えてきたカナ?・w・
GPU
• GPU: Graphics Processing Unit• NVIDIA GeForce• ATI Radeon
• GPU は何をしているの?• たくさんの頂点データ ({x0,y0,z0}, {x1,y1,z1},…): Multiple Data を• 単一の射影変換処理(ある視点で見た座標→別の視点で見た座標) : Single
Instruction で• 変換処理して色を塗って絵として表示してくれるハードウェア
自分中心の座標 地球上の座標 地球上のとある場所のカメラから見た座標
GPU のお話はまたあとでじっくり
しましょう・w・
ちょっとまとめ・w・• SIMD 型のアーキテクチャーはどんなところで使われている?
• 「マルチメディア」処理などエンドユーザーに密接なプロセッサーに採用• 例 : 画像処理…すべてのピクセル、数メガ個に同じ処理を適用したい!• RGB なら 3[elements/pixel] なので 640×480 [pixels] でも 921,600 [#] も同じ処理の繰り返し!• フェードアウトやフェードインもこうした地味な計算の集合• 影付けや、より高度なエフェクトの合成処理もこうして頑張って計算している
• 例 : 2D のウィンドウの座標、 3D のゲームのキャラクターの頂点座標
一般 PC やスマフォやゲーム機とか・w・
近年の HPC の話はそのうち nakayoshix さ
んにでも聞きましょう・w・
The SIMD #2
THE ANCIENT SYSTEM
FIN
The SIMD #3
THE POWER
SIMD を使えるとどれくらい嬉しいの?• PC の CPU の SIMD のはなしに戻ります• 現在の多くの CPU で一般に利用可能な SIMD 命令として "SSE" を
例にかんたんな計算処理のベンチマークをしてみましょう・w・
Wandbox でも試せるのでみなさんご一緒に・w・
実験の必要要件• SSE 命令を使える CPU を使えること• 一般的な近年の PC 、 Intel や AMD の 64bit な CPU なら使えます
• よさ気な C++14 対応な処理系• Clang-3.6 とか GCC-5.1 とか
• 計算機のメモリーや命令の基礎的な仕組みの知識• 基礎的なプログラミングの知識• 必要最小限の C++ で SIMD 命令を使う方法
(このあと本資料で解説)
実験 I:原始的な SIMD 命令のテストプログラム
• SIMD を使わない版• やっていること• float の値を 1024個分の枠を用意• 数列 0.0, 1.0, 2.0, 3.0 … 1023.0
を設定• initial_sum に実験処理前の和を保存• 実験処理直前の時刻を保存• 実験処理 : すべての値を += 1.0f す
る• final_sum に実験処理後の和を保存• 実験処理直後の時刻を保存• 実験処理に要した時間を計算• 表示
実験 I:原始的な SIMD 命令のテストプログラム
• SIMD を使う版• 使わない版からの変更点• #include <xmmintrin.h>• __m128 型を XMM レジスターと
か名前付けて使ってる• for ループが 4 つ毎に飛ばしてる• 足し算が load/add/store に分解さ
れてる
Microsoft ファンの方はストリーミング SIMD 拡張子 (SSE)
を見て改変してネ・w・チョットダケチガウ
vs.使わない版
はよなった・w・
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・
ところで、XMM レジスターとは?( 1/2 )
レジスター≈
CPU の中の計算用の記憶域
EAX
EBX
ECX
EDX …
• 前提知識• CPU は主記憶で計算処理してナイ• load: COPY{ 主記憶 レジス
ター }• store: COPY{ レジスター 主記憶 }
• CPU が加算などの計算をする時のオペランドは基本的には「 CPU レジスター」と呼ばれる CPU 内部の記憶域• 汎用的に使えるレジスターは…• EAX, EBX … など名前の付いた
32bit の記憶域などちなみに 16bit枠は EAX のAX 分
x86 の進化の歴史が詰まってる・w・
ところで、XMM レジスターとは?( 2/2 )
• 従来の一般用の x86 レジスター( EAX 等)は 32bit の記憶域
• XMM は SSE の実装に伴いSSE 命令専用に追加された128bit の記憶域群• SSE では XMM レジスターの
128bit の記憶域を、 4つの floatを一括して取り扱うための記憶域として使用
XMM1
XMM2
…EAX
…
EBX
…
ECX
…
EDX
… 従来の 32bit 記憶域の 4倍サイズの記憶域を付け焼き刃・w・
ところで、intrinsics では load/add/store しかできないの?
• intrinsics については・・・• intel Intrinsics Guide で SIMD
拡張命令セットや用途の分類に応じて簡単な仕様を確認できる
もちろん、いろいろデキマス・w・
やりました!あとは自分で調べて SIMD マスターになれます!!
• そんなに• 甘くないかも・w・
本当にはよなった?• 速くはなってる• 何度か実行すると遅い時と速い時
があるのでは?• ところ
で、 "loadu_ps"/"storeu_ps" の "u" はナンダロウネ・w・
vs.使わない版
はよなった・w・
ちなみに ps は packed-single 、
「まとめられた - 単精度値」の意味だよ・w・
The SIMD #3
THE POWER
FIN
The SIMD #3
CONTROL THE SIMD
とある実行中のプロセスのメモリー配置状態
0x00123456
0x00123457
0x00123458
0x00123459
0x0012345A
0x0012345B
0.0f 1.0f …
……
…
「中途半端」な位置デスネ・w・
「美しい」実行中のプロセスのメモリー配置状態
0x00123450
0x00123451
0x00123452
0x00123453
0x00123454
0x00123455
0.0f 1.0f …
……
…
美しい・w・
loadu_ps と load_ps の違い :メモリーアライメント
• load_ps• 16byte境界に整っている(=アライ
メント最適化されている)前提でメモリーアクセス
• アライメント最適化されていないとSEGV
• loadu_ps• アライメント最適化されていなくても
読み出す• 内部ではデータが跨っているメモリー領域をすべて読みだしてシャッフルしてレジスターへ整えて入れてくれる
• 当然遅い・w・ un-aligned のu だった・w・
0x00123450
0x00123451
0x00123452
0x00123453
0x00123454
0x00123455
ちょうどぴったりここにしかアクセスしない
1発で読み出す前提だから速い・w・
外から見ると、どこからでも自由に読み出せる
store_ps/storeu_psも同様・w・
でも、どうやって?実行時のメモリーアライメントをプログラムするの?
• C++11 ならカンタン・w・• 言語標準機能 alignas を使える
• ちなみに昔は・・・• 多めに確保してアドレスのアライ
メントが合う位置から使いはじめる工夫で対応可能• placement new
• 処理系依存の方法もあった• __attibute__((aligned(xxx)))
• __declspec(align(xxx))z だけ 16 バイト境界
へアライメント
されました・w・ これで u 版はもう要らないネ・w・
やりました!あとは自分で調べて SIMD マスターになれます!!
• そんなに• 甘くないかも・w・
SSE にも add/sub/mul/div以外にもいろいろあるけど?SSE以外の SIMD 命令は?
• それはまた PART II で• 詳しくやろうか・w・
ともあれ、これでPC の SIMD の基礎
は大丈夫じゃ・w・
intrinsics より簡単になりませんか・・・スマフォ向けに ARM の Neon に興味が・・・
• それらもまた PART II で• 詳しくやろうか・w・
i-saint さんがタイムリーな関連記事を書いてくれていたので
気になる方はどうぞ・w・introdunction to SIMD programming
The SIMD #4
CONTROL THE SIMD
FIN
The SIMD #5
THE PARALLEL AND THE CONCURRENCY
SIMD は " 並列 "並列処理と並行処理の違い、大丈夫ですか?
• ちなみに、• SIMD は " 並列 " 処理・w・
SIMD は " 並列 "並列処理と並行処理の違い、大丈夫ですか?
COOKPAD ニュースプロ御用達!長ねぎのみじん切りを動画でマスター!http://cookpad.com/articles/5385
• あくまでも逐次処理• これは SISD ・w・
SIMD は " 並列 "並列処理と並行処理の違い、大丈夫ですか?
Yahoo!ブログ カワラヌマイニチ・・・白髪ネギカッター!!!http://blogs.yahoo.co.jp/backblackhead/36252328.html
• 同じ処理を• 複数のアドレスへ適用• これは SIMD で• 並列処理・w・
SIMD は " 並列 "並列処理と並行処理の違い、大丈夫ですか?
TOKYO GAS 最適厨房 /厨房談義 第 9 回進化するミクニの厨房「厨房というフレームにとらわれない独自の厨房観」http://eee.tokyo-gas.co.jp/saitekichubo/information/dangi09/01.html
• (同一処理も含め)• 複数の処理を
• 複数のワーカープロセスで並行処理
• MIMD ・w・
蛇足 :パイプライン型の並行処理(見様によっては並列処理)
ホテルブリランテ武蔵野スタッフブログ 2012 年 2 月2/22~の今週のランチ(フレンチ調理場より)http://www.hotel-brillante.com/blog/2012/02/
ちなみにこれが
パイプライン型の
並行処理
単機能の専門の
ワーカープロセスが
同時並行で複数の処理を
流れ作業で実行
並列処理と並行処理とSIMD の位置付け
並行処理• MIMD
並列処理• SIMD
複数種類の仕事を
同時に手分けして実行
1 つ種類の複数の仕事を
同時に手分けして実行
実は包含関係・w・
The SIMD #5
THE PARALLEL AND THE CONCURRENCY
FIN
The SIMD #6
THE TWO LAWS OR CURSES
計算機の進化と並列化・並行化の法則
• ムーアの法則
• p: 集積回路上のトランジスター数の倍率 [-]
• n: 現時点からの経過年数 [years]
• 『 1 年半でトランジスターの集積度は 2倍になる』
ムーアの法則(カーツワイルの収穫加速の法則)
面で実装されるデバイスの集積度のはなし・w・
計算機の進化と並列化・並行化の法則
• アムダールの法則• システム全体を並列化できるわけ
ではない• システム全体の並列化による高速化の限界は並列化できない処理に依存する
• ポラックの法則• intel の経験則• 『 CPUの性能向上は、ダイサイズの増加の平方根分にしかならい』
• ムーアの法則の 1年半後の集積度は 2倍になるが、実効性能はにしかならない
ならばマルチコアだ!参考: PC WATCH 後藤弘茂のWeekly海外ニュース 2004年11月
ポラックの法則を破るためのマルチコア
SIMD の高度化も並行処理志向の進化の一旦
SIMD のはなしで大切なこと• 局所の最適化にかかるコストは• 全体のパフォーマンスアップに有意か?
• intrinsics で SIMD 最適化するということは• コードの可読性は明らかに落ちるが保守性・生産性の低下によるデメリットは高速化の恩恵に対して大きすぎないか?• コードの可読性が落ちるという事は同等の保守性を保つには相応のドキュメンテー
ションコストも必要
• エンジニアの魂は判断材料にはしない(実際やる時には必要)• 複雑な仕様楽しい・w・• 機械語楽しい・w・
それでも SIMD 最適化したい時がアル・w・
The SIMD #6
THE TWO LAWS OR CURSES
FIN
The SIMD #...
THE NEW … TO THE PRESENT …
次回 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・
Appendix II:ところで、 SIMD って「しむど」なの?
『しむどでいいですよ』
Appendix II:ところで、 SIMD って「しむど」なの?
『しむどでいいですよ』
"seem-dee"
The SIMDPART Ⅰ
FIN
次回もよろしくね・w・
Recommended