SlideShare a Scribd company logo
各種の並列化手法とGPGPU
@dc1394
C++による数値解析の並列化手法
自己紹介
 Twitter: @dc1394
 C++, C#, F#そしてRubyが好きです。
 趣味はプログラミングではなく数値解析。
 C++で量子力学の数値計算とかやってます。
概要
 なぜC++で数値解析と並列化のコードを書くのか
 並列化の分類について
 タスク並列化のパフォーマンス比較・検証
 データ並列化(GPGPU)のパフォーマンス比較・検
証
なぜC++で数値解析のコードを書く
のか
 多数あるプログラム言語の中で、高性能なコンパ
イラ(Intel, PGIのコンパイラ等)及び、スーパーコ
ンピュータ向けのコンパイラ(IBM, Cray, Fujitsuのコ
ンパイラ等)でコンパイルできる言語は、Fortran, C
及びC++だけである(ただし最近ではPythonも…)。
 これらの言語の最新規格を列挙すると、
 Fortran 2008 (2010年9月)
 C11 (2011年12月)
 C++14 (2014年12月)
 これらの言語の中で、最もモダンな言語はC++で
ある。
C++で数値解析と並列化のコードを
書くときのメリットとデメリット
 メリット
 FortranやC向けの、高性能かつ豊富なライブラリが使
える(LAPACKやBLAS, GSL (GNU Scitific Library), FFTW
など)。
 インラインアセンブラやintrinsic関数が使える(SIMDで
データ並列化する際に重要、後述)。
 デメリット
 FortranやC向けのライブラリを使う際、C++らしく書け
ない。
 言語レベルで並列処理をサポートしていない。
並列化の分類
 命令レベル並列
 並列パイプライン、スーパースカラ、アウト・オブ・
オーダー実行, etc. →CPUとコンパイラの仕事
 データ並列
 Single Instruction Multiple Data (SIMD)
 General-purpose computing on graphics processing
units (GPGPU)
 タスク並列
 スレッド並列
 プロセス並列
並列化の分類
 データ並列
 SIMD: インラインアセンブラ, SIMD intrinsic,
Boost.SIMD(開発中), OpenMP 4.0, Cilk Plus, etc.
 GPGPU: CUDA (Thrust), OpenCL (Boost.Compute),
C++ AMP, DirectCompute, OpenMP 4.0, etc.
 タスク並列
 スレッド並列: OpenMP, Intel® Threading Building
Blocks (Intel® TBB), Cilk Plus, Parallel Patterns Library
(Microsoft PPL)
 プロセス並列: Message Passing Interface (MPI)
(Boost.MPI)
スレッド並列とプロセス並列
タスク並列
スレッド並列とプロセス並列
 スレッド並列:1つのプロセスの中でスレッドを複
数個生成させ、各スレッドに異なるCPUコアを割り
当てて並列処理を行う方法(共有メモリ型並列計
算機専用)。
 プロセス並列:複数のプロセスを起動して、各プ
ロセスに異なるCPUコアを割り当てて並列処理を
行う方法(分散メモリ型並列計算機向け、共有メ
モリ型並列計算機でも動作)。
ハイブリッド並列
 スーパーコンピュータでは、プロセス並列(MPI)と、
スレッド並列(OpenMP)の両方を駆使したハイブ
リッド並列化の利用が普通である。
 ノード間をMPIでプロセス並列化し、複数のCPUと
CPUコアがあるノード内をOpenMPでスレッド並列
化するケースが一般的である。
参考スライド
 C++における並列化については、yohhey様が書か
れた以下のスライドが非常に参考になります。
 「新しい並列for文のご提案」
( http://www.slideshare.net/yohhoy/boostjp14-
parfor-20140301-31781446 )
並列化の一般論
1. まず最初に、シリアルコード(並列化しないコー
ド)で、バグのないプログラムを作成する(最初
からパラレルコード(並列化コード)を書こうとす
るのは無謀である)。
2. シリアルコードでプログラムの無駄をなくし、
チューニングする。
3. プロファイラ等で、プログラムの各計算部分の実
行時間の測定を行い、ホットスポットを見つける。
並列化の一般論
4. ホットスポットの部分で、かつ並列化できる部分
を並列化する。ただし、プログラムの改変は一度
に一部分ごとに行い、その都度シリアルコードと
結果を比較する。パラレルコードのデバッグは、
シリアルコードと比較し、難しい。従って、ステッ
プバイステップを心がける。
5. パラレルコードが完成したと思ったら、並列数や
問題サイズを変えて、結果を慎重にチェックする。
6. 並列数に対する計算時間を測定し、並列効率比
をプロットする。
数値積分の並列化
 以下の定積分を、Simpsonの公式によって数値積
分する。
 この定積分は、解析的に積分した結果が厳密に1
となるため、数値積分の結果と容易に比較できる。
 この数値積分のプログラムを、C++11非同期処
理, OpenMP, TBB, Cilk Plus, PPL及びMPIによって並
列化し、シリアルコードと比較した場合の並列効
率比や誤差を調べる。
Simpsonの公式とは
 関数f(x)を、微小区間[xj, xj+2]において、2次関数
P(x)で近似する(上図参照)。
 このとき、
 である(ただし、xj+2 - xj+1 = xj+1 - xj = Δh)
左図は、
http://www.yamamo10.jp/y
amamoto/lecture/2007/5E_
comp_app/test_4/html/nod
e2.html
より引用
ΔhΔh
Simpsonの公式とは
 ここで、区間[a, b]にわたっての関数f(x)の積分は、
上式を足し合わせればよい。ただし、 j = 0, 2,
4,…, N-2と足し合わせる。
ΔhΔh
並列化無しのコード
C++11非同期処理の特徴、メリット、
デメリット
 特徴:C++11標準の機能。
 メリット
 移植性に比較的優れる(C++11対応のコンパイラが
あればOK)。
 デメリット
 各スレッドに対する計算範囲を、自分でコーディング
する必要がある。
 コードが複雑になり、可読性が落ちる。
C++11非同期処理で並列化したコー
ド
OpenMPの特徴、メリット、デメリット
 特徴:並列コンピューティング用のFortran, C/C++言
語拡張。
 メリット
 最も移植性に優れる。
 比較的可読性に優れる。
 デメリット
 C++例外の扱いが面倒(OpenMPスレッドからC++例外が
投げられた際、例外がcatchされず、実行時クラッシュなど
が起こる)。
 上記の問題に対処しようとすると、コードが複雑になり、可
読性が低くなる。
OpenMPで並列化したコード
TBBの特徴、メリット、デメリット
 特徴:Intelが公開している、マルチスレッド対応の
C++テンプレートライブラリ。ICCに付属のものと
オープンソース版とがある。
 メリット
 移植性に優れる(GCC, Clang, MSVC, ICC,…等の普
通のコンパイラ上なら動く)。
 デメリット
 若干コードが複雑になり、可読性が落ちる。
TBBで並列化したコードその1
TBBで並列化したコードその2
Cilk Plusの特徴、メリット、デメリット
 特徴:Intelによる並列コンピューティング用の
C/C++言語拡張。
 メリット
 可読性に優れる。
 デメリット
 対応しているコンパイラが少ない(ICC及びGCC 5.1以
上のみ)。
 Clangは、Cilk Plus/LLVMというプロジェクトで対応。
Cilk Plusで並列化したコード
PPLの特徴、メリット、デメリット
 特徴:Microsoft製の、並列プログラミングをサポー
トするライブラリ。
 メリット
 比較的可読性に優れる。
 デメリット
 対応しているコンパイラがMSVC(VC10以降)のみ。
 他の方法と比べて、誤差が大きく、またパフォーマン
スが低い(後述)。
PPLで並列化したコード
MPIの特徴、メリット、デメリット
 特徴:Fortran, C/C++で、並列コンピューティングを利
用するための標準化された規格である。
 メリット
 分散メモリ型並列計算機においては、この方法が必須。
 移植性に優れる。
 デメリット
 各プロセスに対する計算範囲を、自分でコーディングする
必要がある。
 コードが極めて複雑になり、可読性が大きく落ちる。
 並列化数を、実行時にコマンドラインオプションから明示
的に指定する必要がある。
 デバッグが極めて困難。
MPIで並列化したコード
MPIで並列化したコード(続き)
タスク並列のパフォーマンスの検証
 それぞれの方法において、並列化のパフォーマン
スを測定し、結果を次ページの表1にまとめた(区
間[1, 4]を10億個の区間に分割、ループ5億回)。
 計測環境:
 CPU: Intel Core i7-3930K (Sandy Bridge-E, Hyper
Threading ON (6C12T), SpeedStep OFF, Turbo
Boost OFF)
 コンパイラ: Intel® Parallel Studio XE 2016 for C++
on Visual C++ 2015 (x64ビルド)
 MPIの実装: Microsoft MPI v7
 OS: Microsoft Windows 8.1 (64bit)
タスク並列のパフォーマンスの検証
計算時間
(ミリ秒)
並列効率比
(倍)
積分結果 並列化なしに
対する誤差
誤差の標準偏
差
並列化
なし
1019.3 1 0.999999999999949 0 0
C++11
非同期
172.9 5.90 0.999999999999999 5.0E-14 0
OpenMP 180.1 5.66 0.999999999999999 5.0E-14 0
TBB1 172.2 5.92 0.999999999999998 4.9E-14 2.2E-15
TBB2 170.0 6.00 1.000000000000000 5.1E-14 0
Cilk Plus 178.4 5.71 1.000000000000000 5.1E-14 4.7E-16
PPL 397.2 2.57 1.000000000000020 7.1E-14 9.4E-15
MPI 171.1 5.96 0.999999999999999 5.0E-14 0
表1 各方法で並列化した場合のパフォーマンスの比較(5回の平均)
結局、どれを使うべきか
 計算機が普通のPCなら、TBBかCilk Plusを使うこと
を推奨する。
 あくまで移植性を重視するなら、OpenMPが唯一
の選択肢となる。
 個人でPCクラスタを組んでいたり、スーパーコン
ピュータへの移植を考えるなら、MPI単独か、
OpenMPとMPIのハイブリッド並列が選択肢になる。
 個人的な疑問:TBBやCilk Plusと、MPIのハイブリッド並列は可能なのだろうか?
ソースコードへのリンク
 これらのプログラム(simpson, simpsonmpi)のソー
スコードは、GitHub上で公開しています。
 https://github.com/dc1394/simpson
 https://github.com/dc1394/simpsonmpi
 ライセンスは2条項BSDライセンスとします。
SIMDとGPGPU
データ並列
SIMDとは
 SIMD(Single Instruction Multiple Dataの略)とは、コ
ンピュータで並列処理を行なうための設計様式の
一つで、一つの命令を同時に複数のデータに適
用し、並列に処理する方式。
 cf. フリンの分類, SISD, MISD, MIMD
 そのような処理方式をベクトル演算、ベクトル処
理などと呼ぶことがあり、この方式による並列化
のことをベクトル化などという。
ベクトル化の注意
 2016年現在のコンパイラは非常に優秀であり、単
にコンパイラオプションでSSE/AVX命令を使うよう
に指示するだけで、コンパイラが自動的にベクト
ル化を行ってくれる。
 インラインアセンブラ, SIMD intrinsic, Boost.SIMDな
どによる手動のベクトル化は、コンパイラの自動
ベクトル化に、パフォーマンスで及ばない場合が
あり、注意が必要。
 コンパイラを「負かせる」には、極めて慎重なプロ
グラミングが必要である。
SSE2命令(SIMD intrinsic)を使って
memcpyを自作したコード
GPGPUとは
 GPGPU(General-purpose computing on graphics
processing unitsの略)とは、GPUの演算資源を画像
処理以外の目的に応用する技術のこと(なお、
GPGPUはSIMDの一つに分類される)。
 GPUはもともと画像処理を専門とする演算装置で
あり、非常に多数のデータを並列処理することが
できる。従ってCPUと比較すると、GPUは並列的な
演算が得意である。
 そのため、プログラムの並列演算部分をGPUで計
算させることで、プログラムの高速化が望める。
CUDAとは
 CUDA(Compute Unified Device Architectureの略)と
は、NVIDIAが提供するGPU向けのC/C++言語の
統合開発環境であり、コンパイラ(nvcc)やライブラ
リなどから構成されている。
 CUDAはGPGPU技術の先駆けである(CUDA 1.0の
提供開始は2007年7月)。
 このため、先発技術であるCUDAは、教育・研究機
関での採用事例が多いほか、機械学習などの分
野で産業界でも採用への取り組みが進んでいる。
CUDAのメリット、デメリット
 メリット
 CUDA 7.0から、C++11規格のサポートが強化され、
デバイスコード(CPUで動かすコード)におけるラムダ
式の利用などが可能となっている。
 Thrustと呼ばれる、(C++のSTLによく似た)GPU用の並
列アルゴリズムライブラリが提供されている。
 カーネルコード(GPUで動かすコード)が普通にコンパ
イルできる。
 デメリット
 NVIDIAのGPU専用である。
OpenCLとは
 OpenCL(Open Computing Languageの略)は、
OpenCL C言語による、マルチコアCPUやGPUなど
による異種混在の計算資源を利用した並列コン
ピューティングのためのクロスプラットフォームな
フレームワークである。
 マルチコアCPUやGPU以外にも、FPGAやXeon Phi
などをサポートしている。
OpenCLのメリット、デメリット
 メリット
 少なくとも、NVIDIA, AMD及びIntelのGPUで動作する。
 デバイスコードでは、C++11が使用可能。
 Boost.Compute(Boost 1.61.0以降に含まれる)と呼ばれる、
OpenCLのC++ラッパーが存在し、カーネルコードを簡潔
に記述できる。
 デメリット
 オンラインコンパイルでは、カーネルコードが実行時に
ロードされコンパイルされるため、デバッグが困難になり、
初回起動時に時間がかかる(Boost.Computeはこちらしか
対応していない)。
 オフラインコンパイル(通常のコンパイル)では移植性が
落ちる。
分子動力学のGPGPUによる並列化
 シンプソンの公式による数値積分を、GPGPUで並
列化すると、CPUより遅かったという現象に直面し
た(調査中)ため、簡単な分子動力学(Molecular
Dynamics, MD)のコードをGPGPUで並列化するこ
とにした。
 分子動力学については、拙著のスライド(以下
URL)を参照のこと。
 http://www.slideshare.net/dc1394/4-52829134
GPGPUのパフォーマンス検証
 LJポテンシャルの下で相互作用する、2048個のアル
ゴン原子を100ステップ計算した場合の、並列化無し、
CPUをTBB(6コア12スレッド)で並列化した場合、
CUDA及びOpenCLで並列化した場合の計算時間を測
定し、結果を次ページの表1にまとめた。
 計測環境:
 GPU: NVIDIA GeForce GTX 970 (Maxwell)
 GeForce Driverバージョン: 353.90
 CUDAコンパイラ: nvcc 7.5.17
 OpenCLバージョン: OpenCL 1.2 CUDA
 OpenCLのCPU側のコンパイラや、OSについては、タス
ク並列のパフォーマンス比較の記載と同じ。
GPGPUのパフォーマンス検証
 CUDA及びOpenCLで並列化した場合は、並列化無し
の場合に対してそれぞれ29.1倍、28.3倍程度速く、
CPUをTBB(6コア12スレッド)で並列化した場合に対し
ても、それぞれ6.2倍、6.0倍程度速い。
 CUDAとOpenCLでは、CUDAの方が若干速かった。
計算時間(秒) 並列効率比(倍) TBBに対する並列効率
比(倍)
並列化無し 1307.9 1 0.21
TBB 279.0 4.69 1
CUDA 45.0 29.06 6.20
OpenCL 46.2 28.31 6.04
表1 GPGPUのパフォーマンスの比較(5回の平均)
GPGPUの問題
 デバッグが困難。
 基本的に、GPUで倍精度演算を行うためには、高
価なGPGPU専用カードが必要(e.g. NVIDIA Tesla,
AMD FirePro, Intel Xeon Phi)。
 デバイス(CPU)とホスト(GPU)間のデータ転送が
頻繁に行われると、それがボトルネックになり得る
ので、慎重にプログラミングする必要がある。
ソースコードへのリンク
 これらのプログラム(LJ_Argon_MD_CUDA,
LJ_Argon_MD_OpenCL)のソースコードは、GitHub
上で公開しています。
 https://github.com/dc1394/LJ_Argon_MD_CUDA
 https://github.com/dc1394/LJ_Argon_MD_OpenC
L
 ライセンスは2条項BSDライセンスとします。
まとめ
 並列化の分類について説明した。
 タスク並列について、種々の方法について説明し、
それらの方法のパフォーマンスを比較・検証した。
 手動ベクトル化の注意点について説明した。
 GPGPUについて、CUDAとOpenCLについて説明し、
これらのパフォーマンスを比較・検証した。

More Related Content

What's hot

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
Fixstars Corporation
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
takesako
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
Yusuke Matsushita
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
Daichi OBINATA
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
バイナリニューラルネットとハードウェアの関係
バイナリニューラルネットとハードウェアの関係バイナリニューラルネットとハードウェアの関係
バイナリニューラルネットとハードウェアの関係
Kento Tajiri
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
Kensuke Otsuki
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
okuraofvegetable
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
ryos36
 
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
Ryosuke839
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
 
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
Takuya Akiba
 

What's hot (20)

いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 
C++の黒魔術
C++の黒魔術C++の黒魔術
C++の黒魔術
 
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
バイナリニューラルネットとハードウェアの関係
バイナリニューラルネットとハードウェアの関係バイナリニューラルネットとハードウェアの関係
バイナリニューラルネットとハードウェアの関係
 
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
区間分割の仕方を最適化する動的計画法 (JOI 2021 夏季セミナー)
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
SSII2019OS: 深層学習にかかる時間を短くしてみませんか? ~分散学習の勧め~
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
 
分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17分散深層学習 @ NIPS'17
分散深層学習 @ NIPS'17
 

Similar to C++による数値解析の並列化手法

C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
Osamu Masutani
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#ta2c
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
Tatsuya Ishikawa
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
Takayoshi Tanaka
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
智啓 出川
 
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
Ryuuta Tsunashima
 
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針(Flop/Byte,計算律速,メモリ律速)2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針(Flop/Byte,計算律速,メモリ律速)
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
智啓 出川
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
Takashi Okawa
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
 
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
智啓 出川
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
Wooram Yang
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
beyond Co., Ltd.
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
Masanori Masui
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
shinjiigarashi
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
mitsutaka_takeda
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
Noboru Irieda
 
Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御
artk saga
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
日本マイクロソフト株式会社
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
Kohei KaiGai
 

Similar to C++による数値解析の並列化手法 (20)

C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
 
TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#TokyoR24 - PerformanceRvsC#
TokyoR24 - PerformanceRvsC#
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
20201127 .NET 5
20201127 .NET 520201127 .NET 5
20201127 .NET 5
 
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
2015年度GPGPU実践プログラミング 第4回 GPUでの並列プログラミング(ベクトル和,移動平均,差分法)
 
GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発GPU-FPGA協調プログラミングを実現するコンパイラの開発
GPU-FPGA協調プログラミングを実現するコンパイラの開発
 
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針(Flop/Byte,計算律速,メモリ律速)2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針(Flop/Byte,計算律速,メモリ律速)
2015年度先端GPGPUシミュレーション工学特論 第6回 プログラムの性能評価指針 (Flop/Byte,計算律速,メモリ律速)
 
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Codeどっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
 
IL2CPPに関する軽い話
IL2CPPに関する軽い話IL2CPPに関する軽い話
IL2CPPに関する軽い話
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
PHP 8 と V8 (JavaScript) で速さを見比べてみよう!
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御Pythonでラズパイのgpio制御
Pythonでラズパイのgpio制御
 
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
【de:code 2020】 AI on IA 最新情報 ~ CPU で AI を上手に動かすための 5 つのヒント ~
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 

More from dc1394

第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論
dc1394
 
Pseudopotential of vanderbilt
Pseudopotential of vanderbiltPseudopotential of vanderbilt
Pseudopotential of vanderbilt
dc1394
 
MBK擬ポテンシャルの作成法
MBK擬ポテンシャルの作成法MBK擬ポテンシャルの作成法
MBK擬ポテンシャルの作成法
dc1394
 
単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション
dc1394
 
高精度擬ポテンシャル法の開発と表面系への応用
高精度擬ポテンシャル法の開発と表面系への応用高精度擬ポテンシャル法の開発と表面系への応用
高精度擬ポテンシャル法の開発と表面系への応用
dc1394
 
Development of highly accurate pseudopotential method and its application to ...
Development of highly accurate pseudopotential method and its application to ...Development of highly accurate pseudopotential method and its application to ...
Development of highly accurate pseudopotential method and its application to ...
dc1394
 
Blochの定理の証明
Blochの定理の証明Blochの定理の証明
Blochの定理の証明
dc1394
 
Arに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーションArに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーション
dc1394
 
SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化
dc1394
 
水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法
dc1394
 
Vanderbiltの擬ポテンシャル
Vanderbiltの擬ポテンシャルVanderbiltの擬ポテンシャル
Vanderbiltの擬ポテンシャルdc1394
 
Troullier and Martinsの擬ポテンシャルの作成法
Troullier and Martinsの擬ポテンシャルの作成法Troullier and Martinsの擬ポテンシャルの作成法
Troullier and Martinsの擬ポテンシャルの作成法dc1394
 
有限要素によるHybrid汎関数の実装
有限要素によるHybrid汎関数の実装有限要素によるHybrid汎関数の実装
有限要素によるHybrid汎関数の実装dc1394
 
Thomas-Fermi方程式のFEMによる解法
Thomas-Fermi方程式のFEMによる解法Thomas-Fermi方程式のFEMによる解法
Thomas-Fermi方程式のFEMによる解法dc1394
 
A lda+u study of selected iron compounds 第二章
A lda+u study of selected iron compounds 第二章A lda+u study of selected iron compounds 第二章
A lda+u study of selected iron compounds 第二章dc1394
 
A lda+u study of selected iron compounds 第一章
A lda+u study of selected iron compounds 第一章A lda+u study of selected iron compounds 第一章
A lda+u study of selected iron compounds 第一章dc1394
 
第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論dc1394
 

More from dc1394 (17)

第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論
 
Pseudopotential of vanderbilt
Pseudopotential of vanderbiltPseudopotential of vanderbilt
Pseudopotential of vanderbilt
 
MBK擬ポテンシャルの作成法
MBK擬ポテンシャルの作成法MBK擬ポテンシャルの作成法
MBK擬ポテンシャルの作成法
 
単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション単振り子と二重振り子のコンピュータシミュレーション
単振り子と二重振り子のコンピュータシミュレーション
 
高精度擬ポテンシャル法の開発と表面系への応用
高精度擬ポテンシャル法の開発と表面系への応用高精度擬ポテンシャル法の開発と表面系への応用
高精度擬ポテンシャル法の開発と表面系への応用
 
Development of highly accurate pseudopotential method and its application to ...
Development of highly accurate pseudopotential method and its application to ...Development of highly accurate pseudopotential method and its application to ...
Development of highly accurate pseudopotential method and its application to ...
 
Blochの定理の証明
Blochの定理の証明Blochの定理の証明
Blochの定理の証明
 
Arに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーションArに対する古典分子動力学シミュレーション
Arに対する古典分子動力学シミュレーション
 
SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化SchracVisualizeによる波動関数の可視化
SchracVisualizeによる波動関数の可視化
 
水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法水素原子に対するSchrödinger方程式の数値解法
水素原子に対するSchrödinger方程式の数値解法
 
Vanderbiltの擬ポテンシャル
Vanderbiltの擬ポテンシャルVanderbiltの擬ポテンシャル
Vanderbiltの擬ポテンシャル
 
Troullier and Martinsの擬ポテンシャルの作成法
Troullier and Martinsの擬ポテンシャルの作成法Troullier and Martinsの擬ポテンシャルの作成法
Troullier and Martinsの擬ポテンシャルの作成法
 
有限要素によるHybrid汎関数の実装
有限要素によるHybrid汎関数の実装有限要素によるHybrid汎関数の実装
有限要素によるHybrid汎関数の実装
 
Thomas-Fermi方程式のFEMによる解法
Thomas-Fermi方程式のFEMによる解法Thomas-Fermi方程式のFEMによる解法
Thomas-Fermi方程式のFEMによる解法
 
A lda+u study of selected iron compounds 第二章
A lda+u study of selected iron compounds 第二章A lda+u study of selected iron compounds 第二章
A lda+u study of selected iron compounds 第二章
 
A lda+u study of selected iron compounds 第一章
A lda+u study of selected iron compounds 第一章A lda+u study of selected iron compounds 第一章
A lda+u study of selected iron compounds 第一章
 
第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論第一原理計算と密度汎関数理論
第一原理計算と密度汎関数理論
 

C++による数値解析の並列化手法