1章 アクセラレータを利用したコンピューティング
- アクセラレータとは?
- 「CPU」と「アクセラレータ」の違いは?
- 現在のアクセラレータ・デバイス
- アクセラレータ用のプログラミングモデル
- OpenMP 4.0 target 構文と OpenACC 規約
- オフロード形式のプログラミングモデルの合理性
- SIMDベクトル演算とアムダールの法則
(Intel Xeon Phiのネイティブモード実行の明と暗) - プログラムの中でオフロードする対象部分とは
- OpenACC Standardとは
- OpenACC コンパイラが行うこと
2章 OpenMP と OpenACC プログラミング・モデル
- OpenMPプログラミングモデル
- OpenACC(アクセラレータ)プログラミングモデル
- OpenMPとOpenACC(アクセラレータ)プログラミングモデルの違い
- OpenMP プログラムを簡単に OpenACC に移行できるか?
- CPU+アクセラレータ構成における性能のボトルネック部分
- CPU+アクセラレータ構成のメモリモデル
3章 並列依存性とコンパイル・メッセージ
- 高速化のために並列処理を行う
- 並列化可能なループと並列化できないループ
- データ依存性を調べる一つの方法
- -Minfo=accel オプションでコンパイル・メッセージを見る
- 後方依存性と前方依存性、その他の依存性
- 前方依存性の回避例
- 依存性が存在する Fortran プログラム例
- -Minfo オプションでベクトル化、並列化の状態を読む
- Cプログラムでの restrict 修飾子
- 並列化を阻害する他の例
4章 OpenACC を使って、まず始めてみよう
- 最初の心構え
- pgaccelinfo コマンドで GPU のプロパティを見る
- 簡単なラプラス方程式のプログラム
- (1) CPU 上での実行
- (2) OpenACC のループ並列化のためのディレクティブを適用する
- (3) OpenACC のデータ・ディレクティブを明示的に挿入する
- 性能のまとめ
5章 OpenACC ディレクティブの概説
- PGI コンパイラの OpenACC の準拠状況
- OpenACC プログラムのコンパイルの方法
- OpenACC プログラム実行時の環境変数
- ディレクティブのフォーマット
- カーネルとは
- 三つのディレクティブ構文を覚える
- オフロードの対象となるループ構造の形態
- ① Accelerator Compute 構文
- ② Data 構文
- ③ Loop 構文
- 並列性三階層の定義(OpenACC 2.0以降)
- 例題のコンパイルと実行
- OpenACC へのポーティング時の心得
6章 Accelerator Compute 構文
- kernels 構文
- kernels ディレクティブのシンタックスと clauses(節)
- parallel 構文
- parallel ディレクティブのシンタックスと clauses(節)
- Accelerator Compute 構文の clause(節)の説明
7章 Data 構文とその他のデータに係わる構文
- データの属性
- データ領域 (data region) とデータのライフタイム
- データ移動のタイミング
- Data ディレクティブのシンタックスとその clauses(節)
- Enter Data と Exit Data ディレクティブ (OpenACC 2.0)
- data clause(節)とは
- data clause における配列範囲の指定方法
- 各 data clause の説明
- その他のデータに係わる構文
- data 構文の使用例
- 動的にアロケートされた多次元配列(Cプログラム)の data 構文の clause の指定方法
- Fortran プログラムの例
8章 loop 構文
- loop 構文
- loop ディレクティブのシンタックスと clauses(節)
- loop ディレクティブの clauses(節)の説明
- collapse clause
- gang clause
- worker clause
- vector clause
- seq clause
- auto clause (OpenACC 2.0)
- tile (OpenACC 2.0)
- device_type clause (OpenACC 2.0)
- independent clause
- private
- reduction
- 姫野ベンチマークへの適用(Fortran)
- 姫野ベンチマークへの適用(C)
9章 その他のディレクティブ
- Declare ディレクティブ
- Combined(複合)ディレクティブ
- update 実行ディレクティブ
- wait 実行ディレクティブ
- enter 実行ディレクティブ (OpenACC 2.0)
- exit 実行ディレクティブ (OpenACC 2.0)
10章 OpenACC 2.0/2.5/2.6 の新しい機能、ディレクティブ概要
- PGI の OpenACC 2.0/2.5/2.6 機能の実装状況 2019年10月 Update!
- PGI の OpenACC 2.6 機能の実装状況表
- PGI の OpenACC 2.5 機能の実装状況表
- PGI の OpenACC 2.0 機能の実装状況表
- OpenACC 2.0 の新機能
10 - 1章 Accelerator Compute 領域における Procedure call
- Routine ディレクティブ導入の背景
- 分割ファイル(separate compilation)のコンパイルオプション
- Routine ディレクティブのシンタックスと clauses(節)
- Routine ディレクティブの役目
- C における Routine ディレクティブ使用の単純な例
- Fortran における Routine ディレクティブ使用の単純な例
- Routineディレクティブ内の parallelism clauses
- vector 並列性を有する routine への適用例
- worker 並列性を有する routine への適用例
- gang 並列性を有する routine への適用例
- 3階層並列性の適用例(C)
- 3階層並列性の適用例(Fortran)
- Calling CUDA Device Routines from C
- Calling CUDA Device Routines from Fortran
10 - 2章 OpenACC 2.0 declare data ディレクティブによるハンドリング
- グローバルデータのハンドリング
- グローバル変数、Fortran Module用の declare data ディレクティブ
- Fortran Module グローバル変数を使用する例
- device_resident clause(節)
- link clause(節)
11章 kernels 構文と parallel 構文の違い
12章 OpenACC と CUDA C/Fortran との相互運用性
- OpenACCとの相互運用性
- OpenACC と CUDA C の相互運用 (1)
- OpenACC と CUDA C の相互運用 (2)
- OpenACC と CUDA Fortran の相互運用 (1)
- OpenACC と CUDA Fortran の相互運用 (2)
12 - 1章 OpenACC 上での CUDA Library の利用
(2017.8 New)
- cuSOLVERライブラリの紹介(Dense LAPACK, Sparse LAPACK)
- cuSolverDN: エルミート正定値行列のコレスキー分解 (LAPACK Zpotrf相当)
- cuSolverDN: 対称正定値行列のコレスキー分解を使ったソルバー (LAPACK Dpotrs相当)
- cuSolverDN: LU分解を使った線形システムソルバー (LAPACK Dpotrs相当)
- cuSolverDN: 対称行列の固有値ソルバー (LAPACK Dsyevd相当)
- cuSolverDN: QR分解による密行列線形ソルバー (LAPACK Dgeqrf 相当)
- cuSolverDN: QR分解による直交化 (LAPACK Dgeqrf,Dorgqr 相当)
- cuSolverDN: 特異ベクトル計算を含めた特異値分解(by QR) (LAPACK Dgesvd 相当)
- cuSolverDN: 特異ベクトル計算を含めた特異値分解(by Jacobi) (LAPACK Dgesvd 相当)
- cuSolverSP: 並列ダイレクト・スパース・ソルバー(CSR QR分解)
- cuFFT example with OpenACC Fortran
- cuRAND example with OpenACC Fortran (乱数発生)
- cuSPARSE example from OpenACC Host code
12 - 2章 cuSPARSE/OpenACC を利用した線形方程式の反復解法プログラム
(2017.9 New)
- cuSPARSE を使用した Conjugate Gradient(CG) 共役勾配法
- cuSPARSE を使用した Bi-Conjugate Gradient Stabilized(BiCGStab)
12 - 3章 スパース行列の CSR フォーマット変換と CUDA Linear Solver との連携(反復法 BiCGStab)
(2017.10 New)
12 - 4 章 スパース行列用 Linear Solver(直接法 cuSOLVERライブラリ)の利用
(2017.11 New)
13章 非構造化データ領域のデータ管理
(2017.8 New)
- 非構造化データ領域(Unstrucured data region)用ディレクティブ
- 非構造化データ領域の Fortran 上での利用例
- 非構造化データ領域の C 上での利用例
- 非構造化データ領域の C 上での利用例(二次元配列)
- 非構造化データ領域の C 上での利用例( C 構造体使用 )
- 非構造化データ領域の C++ 上での利用例( C++ クラス使用 )