Changes between Version 4 and Version 5 of HowTo/BoostStudy14


Ignore:
Timestamp:
Mar 1, 2014, 6:04:49 PM (11 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/BoostStudy14

    v4 v5  
    427427     * これのためにコンパイラをフルスクラッチで書きなおしているとか何とか…
    428428   * clang はその辺りをゴールの1つに掲げている模様…
     429
     430== 新しい並列for構文のご提案 ==
     431
     432 * std::thread 使おう
     433 * ループの並列化といえば… OpenMP!
     434{{{#!c++
     435#Pragma omp parallel for
     436for (int i= 0; i < N; i++) {
     437        // ...
     438}
     439}}}
     440 * 並行じゃなくて並列… 早くならなきゃ意味が無い!
     441 * タスク並列性(ex: パイプライン)、データ並列性(ex: 並列ループ)
     442 * スレッドレベル並列 (マルチスレッドプログラミング)
     443   * OpenMP
     444     * OpenMP スレッドをまたぐ C++ 例外送出はNG ... ループ内に try - catch を書かなきゃいけない (ださい)
     445   * libstdc++ Parallel Mode 拡張
     446     * foreach で書けてお手軽
     447     * バックエンドは OpenMP
     448   * Intel TBB
     449     * tbb::parallel_for_each
     450     * 例外送出できる!!
     451   * Microsofot ConcRT/PPL
     452     * msvcrt にビルトイン
     453     * concurrency::parallel_for_each
     454     * 例外送出できる
     455     * MSVC/Windows 専用 orz
     456   * Intel CilkPlus
     457     * cilk_for って書くだけ
     458     * gcc, clang にも対応していくっぽい (現行はβ)
     459 * ベクトルレベル並列
     460   * SIMD intrinsic (組み込み関数)
     461     * 要アセンブラ知識
     462     * 命令セットごとに異なるコードが必要 (SSE2, AVX, NEON...)
     463   * Boost.SIMD (NT^2^)
     464     * SIMD 処理を一般化 (x86/SSE系列、AVX と PPC/AltiVec に対応)
     465   * Intel CilkPlus / Array Notation
     466     * 宣言的なコーディング (ベクトル演算のセマンティクス)
     467     * clang は未対応…
     468   * Thrust (GPGPU; CUDA)
     469     * CPU向け (TBB, OpenMP) バックエンドも提供
     470   * Microsoft C++ AMP (GPGPU; DirectX)
     471     * restrict(amp) ブロック内が並列化
     472     * CPU/GPU処理を統一的に記述
     473 * スレッドレベル vs ベクトルレベル
     474   * スレッドレベル + ベクトルレベル = C++1y ParallelTS (N3850)
     475     * C++ 並列ライブラリの広範な実装実験が目的
     476   * 実行ポリシー ...これで実行してほしいというヒント
     477     * vec ...ベクトル演算
     478     * par ...マルチスレッド
     479     * seq ...シングルスレッド
     480   * データ数が多い場合に実行ポリシーを切り替える、といった動的ポリシー可能。
     481   * exception_list
     482     * seq と par は補足
     483     * vec は例外使用禁止 (コケる)
     484   * C++標準ではない
     485   * まだ Working Draft 段階ですよ
     486
     487== 魔導書発売記念:GPGPUの今とこれから ==
     488
     489 * OpenAcc
     490   * アクセラレータ向け言語仕様
     491   * pragma 挿入でコンパイラに指示 (C/C++/Fortran)
     492   * GPU だけに限定される仕様ではない
     493 * アクセラレータとは
     494   * 日本語では「演算加速装置」
     495   * GPU
     496     * 特に 3D Graphics
     497   * NIC
     498   * 動画のデコーダ・エンコーダ
     499 * 汎用アクセラレータ (割りとなんでもできるやつ)
     500   * GPU
     501     * NVIDIA, AMD, Intel
     502     * 特に NVIDIA GPU
     503     * 汎用性を獲得したのはここ4,5年
     504     * 画面出力機能のない GPU(?) すらある
     505   * Intel Xeon Phi
     506     * Intel MIC (Meny Integrated Core) とも
     507     * GPU の対抗馬
     508     * 画面出力機能はない
     509   * スモールコア・メニーコア
     510     * 遅くて
     511     * 小さくて多数のコアがある
     512     * メモリ帯域重視
     513     * データ並列向け
     514   * 増設カードの形で提供されている
     515     * アクセラレータ単体では動かせない
     516 * 自立性
     517   * 子機として動作 - CPU がいないと起動できない
     518   * GPU
     519     * 自律動作はできない
     520     * CPU の指示に従って動作
     521   * MIC
     522     * 自立動作はできる
     523 * プログラミング
     524   * CUDA C, C++ (NVIDIA)
     525 * 小回りがきかない
     526   * CPU 向きの処理と GPU 向きの処理を分けたい
     527   * 現状のシステムではオーバーヘッドがあり難しい
     528     * PCI Express のレイテンシ、帯域
     529     * メモリー断絶
     530   * I/O は基本的にできない
     531     * 最近、GPUメモリーを直接転送できるネットワークが登場
     532 * APU
     533   * AMD
     534   * AMD の CPU と GPU を密に結合したもの
     535     * CPU と GPU のメモリー結合を実現 (hUMA)
     536       * ポインタをそのまま GPU に渡せる!!
     537   * 対応ソフトウェアがまだあまりない
     538   * メモリー周辺が CPU のまま
     539     * メモリー帯域がボトルネック
     540 * Hyper Memory Cube (HMC)
     541   * 次世代メモリー規格
     542   * NVIDIA Volta 世代で採用?