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>

Notが無いのでandnotでやんないといけない http://d.hatena.ne.jp/LS3600/20110910#p1 yukicoderはSSE4.1まで使える http://rsujskf.s602.xrea.com/?memos_sse&datdate=1432985305 if文のSSEはselを使えばよいはず。https://www.kernel.org/pub/linux/kernel/people/geoff/cell/ps3-linux-docs/CellProgrammingTutorial/BasicsOfSIMDProgramming.html(両方の条件で計算しておいて、bitmaskごとにどちらを選ぶかを選択)

SIMDのバージョン

  • SSE2(g++デフォルト)
  • SSE3
  • SSE4.1
  • SSE4.2(この辺までは、インラインアセンブリを使えば実は使える)
  • AVX

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-24 (水) 15:54:16 (2531d)