C++
概要 †
下位ページ †
コーディングの前に †
- 最適化-O3は基本的に同じことをやっている
- でも人でやらないと、ifを減らすみたいなことはできないからこれをやる必要がある
- 「いかに load や set を減らせるか」が早くなるかどうかのポイント
- [[MIMDはマルチスレッド>http://www.slideshare.net/FukushimaNorishige/ssii-33751285
]](47ページ)、GPGPUもSIMD。ここではCPUのSIMDについて。
- 化学系ではSIMD + Intel MKLで殴ってる
- 一部の需要はあるしそういうとこではかなり意味があるがSIMDやるくらいならGPUに任せる、CPUは小さいMIMD(スレッド)をたくさんつくるとかのが綺麗そう。
- 確かに並立化効率がx2とかx4くらいだと、GPGPUほどの並列が組めなくて、レイテンシばかり増えてくるみたいな感じ
- ライブラリ関数一覧
ハードウェア †
- サイズはたしか端子の大きさが電源供給の点である程度必要で律速
SSE †
- SSE=SIMD - Simple Instruction Multiple Data
- SSE (Streaming SIMD Extensions) と呼ばれる拡張命令セット。AVXがその後継
- 128bitレジスタが用意されてる。
- SIMD組み込み関数(SIMD Intrinsic)を使うには
#include <xmmintrin.h>
#include <emmintrin.h>
SIMDのバージョン †
- SSE2(g++デフォルト)
- SSE3
- SSE4.1
- SSE4.2(この辺までは、インラインアセンブリを使えば実は使える)
- AVX