SlideShare a Scribd company logo
1 of 73
The SIMD
BY 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 SIMD
PART Ⅰ
今回終わらなかった
ところから 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)へまとめ
てstore
CPUレジスター
 メインメモ
リー
この手順を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命令を手に入れたのは何時?
i386
12~40[MHz]
• x86が32bit命令に拡張
• EAXなどのレジスターが汎用化
i486
25~100[MHz]
• FPU(x87)を内蔵
• L1-cache 8KiB 内蔵
Pentium
60~300[MHz]
•Super-scalar実装
(1.0[IPC]の突破)
•MMX命令の対応
Pentium II
233~450MHz
• P6-
microarchtecture
• 投機的実行, out-
of-oder
1985
1989
1993
1997
このへんの話は
Dora Panda
さんの担当・w・
1995
Prntium Pro
150~200[MHz]
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 I
CPUが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!
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位を維持
Roadrunner
http://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
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
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
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
The SIMD #6
THE TWO LAWS OR CURSES
計算機の進化と
並列化・並行化の法則
• ムーアの法則
• 𝑝 = 2 𝑛/1.5
• 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
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 SIMD
PART Ⅰ
次回もよろしくね・w・

More Related Content

Similar to The simd

エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~
エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~
エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~Takumi Kurosawa
 
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用Rescale Japan株式会社
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話Tokoroten Nakayama
 
SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...
SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...
SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...SORACOM,INC
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?Makoto SAKAI
 
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...SORACOM,INC
 
Io t security-suzki-20170224
Io t security-suzki-20170224Io t security-suzki-20170224
Io t security-suzki-20170224Kuniyasu Suzaki
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会Yoshihisa Ozaki
 
kagamicomput201705
kagamicomput201705kagamicomput201705
kagamicomput201705swkagami
 
先端技術 競技プログラミング
先端技術 競技プログラミング先端技術 競技プログラミング
先端技術 競技プログラミング聡 中川
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805swkagami
 
OSS脆弱性スキャナー開発を始めた件について
OSS脆弱性スキャナー開発を始めた件についてOSS脆弱性スキャナー開発を始めた件について
OSS脆弱性スキャナー開発を始めた件についてssuser6c19e1
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29Takefumi MIYOSHI
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価Hideki Takase
 
STM32マイコンのオーディオ信号処理能力
STM32マイコンのオーディオ信号処理能力STM32マイコンのオーディオ信号処理能力
STM32マイコンのオーディオ信号処理能力Seiichi Horie
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~モノビット エンジン
 

Similar to The simd (20)

エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~
エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~
エバンジェリストが語るパワーシステム特論 ~ 第3回:IBMオフコンはいかにして生き残れたのか?~第二章~
 
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
Rescale ScaleX講習会 ~AWSクラウド環境におけるHPC利用
 
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
ビッグデータとioDriveの夕べ:ドリコムのデータ分析環境のお話
 
SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...
SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...
SORACOM UG 信州 #5 | SORACOM Conference "Discovery" 2018 SORACOM UG Explorer それ...
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
 
Visiting HPC 2013
Visiting HPC 2013Visiting HPC 2013
Visiting HPC 2013
 
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
20190518 SORACOM UG 九州 x JAWS-UG 佐賀 | 基本のSORACOM Air から最新ボタンデバイスまで一気に解説?今日からあ...
 
Io t security-suzki-20170224
Io t security-suzki-20170224Io t security-suzki-20170224
Io t security-suzki-20170224
 
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会CLRの基礎 - プログラミング .NET Framework 第3版 読書会
CLRの基礎 - プログラミング .NET Framework 第3版 読書会
 
kagamicomput201705
kagamicomput201705kagamicomput201705
kagamicomput201705
 
先端技術 競技プログラミング
先端技術 競技プログラミング先端技術 競技プログラミング
先端技術 競技プログラミング
 
kagamicomput201805
kagamicomput201805kagamicomput201805
kagamicomput201805
 
OSS脆弱性スキャナー開発を始めた件について
OSS脆弱性スキャナー開発を始めた件についてOSS脆弱性スキャナー開発を始めた件について
OSS脆弱性スキャナー開発を始めた件について
 
RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29RISC-V introduction for SIG SDR in CQ 2019.07.29
RISC-V introduction for SIG SDR in CQ 2019.07.29
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
計算機理論入門10
計算機理論入門10計算機理論入門10
計算機理論入門10
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
 
STM32マイコンのオーディオ信号処理能力
STM32マイコンのオーディオ信号処理能力STM32マイコンのオーディオ信号処理能力
STM32マイコンのオーディオ信号処理能力
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
 

The simd