SlideShare a Scribd company logo
1
2020年4月



国立研究開発法人理化学研究所

計算科学研究センター�運用技術部門

チューニング技術ユニット�ユニットリーダー



南�一生

計算科学技術特論B
第3回
アプリケーションの性能最適化2
(CPU単体性能最適化)
2020年4月23日 計算科学技術特論B 
2
• スーパーコンピュータとアプリケーションの性能
• アプリケーションの性能最適化1(高並列性能最適化)
• アプリケーションの性能最適化2(CPU単体性能最適化)
• アプリケーションの性能最適化の実例1
• アプリケーションの性能最適化の実例2
講義の概要
2020年4月23日 計算科学技術特論B 
3
内容
• スレッド並列化
• CPU単体性能を上げるための5つの要素
• 要求B/F値と5つの要素の関係
• 性能予測手法(要求B/F値が高い場合)
• 具体的テクニック
2020年4月23日 計算科学技術特論B 
4
スレッド並列化
2020年4月23日 計算科学技術特論B 
5
「京」 「富岳」
2020年4月23日 計算科学技術特論B 
6
演算器
メモリ
レジスタ
京-1CPU/富岳-1CMG
演算器演算器 ・・
・・
レジスタレジスタ・・
・・
コア
共有キャッシュ
ハードウェア
バリア同期
京の場合1CPUに8コア搭載.
富岳の場合1CMGに12コア搭載.
京は8コア,富岳は12コアでL2
キャッシュを共有.
MPI等のプロセス並列に対し京は
CPU内の8コア,富岳はCMG内の
12コアを使用するためのスレッド
並列化が必要.
スレッド並列化のためには自動並
列化かOpenMPが使用可.
京,富岳共のハードウェアバリア
同期機能を使用した高速なスレッ
ド処理が可能.
「京」「富岳」のスレッド並列の概要
2020年4月23日 計算科学技術特論B 
7
1プロセス8スレッド
(ハイブリッドMPI)の場合
8プロセス(フラットMPI)の場合
core core core core
core core core core
core core core core
core core core core
ハイブリッド並列とフラットMPI並列
MPIプロセス並列とスレッド並列の組み合わせをハイブリッド並列という.
各コアにMPIプロセスを割り当てる並列化をフラットMPI並列という.
京では通信資源の効率的利用,消費メモリ量を押さえる観点でハイブ
リッド並列を推奨している.
MPIプロセス
2020年4月23日 計算科学技術特論B 
メモリ
8
スレッド並列+プロセス並列のハイブリッド型
コア内:コンパイラによる逐次最適化,SIMD化
CPU内:スレッド並列(自動並列化:細粒度並列化†,OpenMP)
CPU間:プロセス並列(MPI)
CPU/CMG
†細粒度並列化
高速バリア同期を活用し,内側ループをコア間で並列化
ベクトル向け(内側ループが長い)コードの高速化が可能
core core core
core core core
メモリ
コア内:逐次最適化、SIMD
化(主にコンパイラ)
CPU/
CMG
メモリ
CPU内:スレッド並列(細粒度並列、
OpenMP)(コンパイラによるサポートあり)
メモリ メモリ
CPU間:プロセス並列(MPI)
プロセス並列型
コア内:コンパイラによる逐次最適化,SIMD化
コア間:プロセス並列(MPI)
CPU/CMG
core core core
core core core
メモリ
コア内:逐次最適化、SIMD
化(主にコンパイラ)
メモリ メモリ
CPU/
CMG
CPU/
CMG
メモリ
・・・
コア間:プロセス並列(MPI)
実行効率の観点から、ハイブリッド型を推奨
メモリ
・・・
・・・ ・・・
ハイブリッド並列とフラットMPI並列(京・富岳)
・・・
・・・
・・・
・・・
CPU/
CMG
CPU/
CMG
CPU/
CMG
CPU/
CMG
2020年4月23日 計算科学技術特論B 
9
CPU単体性能を上げる
ための5つの要素
2020年4月23日 計算科学技術特論B 
10
(1)ロード・ストアの効率化
(2)ラインアクセスの有効利用
(3)キャッシュの有効利用
(4)効率の良い命令スケジューリング
(5)演算器の有効利用
CPU内の複数コアでまずスレッド並列化が
できていると事は前提として
CPU単体性能を上げるための5つの要素
2020年4月23日 計算科学技術特論B 
11
(1)ロード・ストアの効率化
プリフェッチの有効利用
演算とロード・ストア比の改善
2020年4月23日 計算科学技術特論B 
12
レイテンシ(アクセスの立ち上がり)
演算器
メモリ
データ
2次キャッシュ
1次キャッシュ
データ
データ
立ち上がり
アクセス
立ち上がり
アクセス
時間
2020年4月23日 計算科学技術特論B 
13
レイテンシ(アクセスの立ち上がり)
演算器
メモリ
データ
2次キャッシュ
1次キャッシュ
データ
データ
レイテンシ(相対値)
10
100
1
2020年4月23日 計算科学技術特論B 
14
プリフェッチの有効利用
演算器
メモリ
データ
2次キャッシュ
1次キャッシュ
データ
データ
アクセス
プリフェッチ
アクセス
時間
演算にアクセスそのものを
隠せる場合もある
2020年4月23日 計算科学技術特論B 
15
演算とロード・ストア比の改善
<内側ループアンローリング(2)>
・以下の様な2つのコーディングを比較する。
do j=1,m
do i=1,n
x(i)=x(i)+a(i)*b+a(i+1)*d
end do
do j=1,m
do i=1,n,2
以下のコーディングを例に考える.
以下のコーディングの演算は和2個,積2個の計4個.
ロードの数はx,a(i),a(i+1)の計3個.
ストアの数はxの1個.
したがってロード・ストア数は4個
演算とロード・ストアの比は4/4となる.
なるべく演算の比率を高めロード・ストアの比率を低く抑えて演算とロード
ストアの比を改善を図る事が重要.
2020年4月23日 計算科学技術特論B 
16
演算器
メモリ
データ
2次キャッシュ
1次キャッシュ
データ
データ
キャッシュライン128B毎(京),
256B毎(富岳)のアクセス
全部の要素を
計算に利用
1個の要素のみ
を計算に利用
効率が良い 効率が悪い
(2)ラインアクセスの有効利用
倍精度の場合,最大1/16(京),
1/32(富岳)の効率に落ちる.
16
2020年4月23日 計算科学技術特論B 
17
演算器
・データ供給能力の高いキャッ
シュを設ける
・キャッシュに置いたデータを何回
も再利用し演算を行なう
・こうする事で演算器の能力を十
分使い切る
メモリ
データ
2次キャッシュ
1次キャッシュ
データ
データ
再利用
(3)キャッシュの有効利用
ブロッキング
2020年4月23日 計算科学技術特論B 
18
ループi+1
ループi ループi
ループi+1
do i=1,100
 計算1
 計算2
end do
計算時間 計算時間
効率が良い
効率が悪い
(4)効率の良い命令スケジューリング
2020年4月23日 計算科学技術特論B 
19
並列処理と依存性の回避
< ソフトウェアパイプラインニング>
例えば以下の処理を考える。
 do i=1,100
  a(i)のロード
  b(i)のロード
  a(i)とb(i)の演算
  i番目の結果のストア
 end do
コンパイラ
<前提>
・ロード2つorストアと演算とは同時実行可能
・ロードとストアは2クロックで実行可能
・演算は4クロックで実行可能
・ロードと演算とストアはパイプライン化されている
(1) (2)
<実行時間>
・8クロック×100要素=800クロックかかる
2020年4月23日 計算科学技術特論B 
20
大昔の計算機
演算3
演算器
演算器に逐次に入力し逐次実行
演算2
演算1
性能向上
(1)そのまま実行すると6clock
演算1 演算2
(2)演算を3つのス
 テージに分割する
演算i
(3)並列に計算できるようスケジューリング  
(4)2個の演算資源を使い並列に実行
(5)4clockで実行可
(6)演算を細かく分割し複数の演算資源を
  並列に動作し性能アップ
リカレンス(依存性)があると...
処理のリカレンスをなくすチューニングは
現代のコンピュータを使う上で必須事項
2020年4月23日 計算科学技術特論B 
21
並列処理と依存性の回避
< ソフトウェアパイプラインニング> コンパイラ
<前提>
・ロード2つorストアと演算とは同時実行可能
・ロードとストアは2クロックで実行可能
・演算は4クロックで実行可能
・ロードと演算とストアはパイプライン化されている
 
do i=1,100
  a(i)のロード
 
  b(i)のロード
 
  a(i)とb(i)の演算
 
  i番目の結果のストア
end do
「パイプライン化されている」の意味
2段のパイプライン
4段のパイプライン
2020年4月23日 計算科学技術特論B 
22
並列処理と依存性の回避
< ソフトウェアパイプラインニング> コンパイラ
 
do i=1,100,4
  a(i)のロード
a(i+1)のロード
  a(i+2)のロード
  a(i+3)のロード
  b(i+1)のロード
  b(i+2)のロード
  b(i+3)のロード
  b(i+4)のロード
  a(i)とb(i)の演算 
  a(i+1)とb(i+1)の演算
  a(i+2)とb(i+2)の演算
  a(i+3)とb(i+3)の演算
  i番目の結果のストア
  i+1番目の結果のストア
  i+2番目の結果のストア
  i+3番目の結果のストア
end do
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
4段の展開 : 8クロックで8要素の処理が完了
2020年4月23日 計算科学技術特論B 
23
並列処理と依存性の回避
< ソフトウェアパイプラインニング> コンパイラ
 
do i=1,100,2
  a(i)のロード
a(i+1)のロード
  b(i+1)のロード
  b(i+2)のロード
  
  a(i)とb(i)の演算 
  a(i+1)とb(i+1)の演算
  
  i番目の結果のストア
  i+1番目の結果のストア
 
end do
(1)
(2)
(3)
(4)
2段の展開 : 8クロックで4要素の処理が完了
2020年4月23日 計算科学技術特論B 
24
並列処理と依存性の回避
< ソフトウェアパイプラインニング>
<実行時間>
・前後の処理及びメインループの立ち上がり部分を除くと
・1クロック×100要素=100クロックで処理できる
コンパイラ
 
do i=1,100,4
  a(i)のロード
a(i+1)のロード
  a(i+2)のロード
  a(i+3)のロード
  b(i+1)のロード
  b(i+2)のロード
  b(i+3)のロード
  b(i+4)のロード
  a(i)とb(i)の演算 
  a(i+1)とb(i+1)の演算
  a(i+2)とb(i+2)の演算
  a(i+3)とb(i+3)の演算
  i番目の結果のストア
  i+1番目の結果のストア
  i+2番目の結果のストア
  i+3番目の結果のストア
end do
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
2020年4月23日 計算科学技術特論B 
25
ループi+1
ループi ループi
ループi+1
計算時間 計算時間
効率が良い
効率が悪い
(4)効率の良い命令スケジューリング
リカレンスがあるとソフトウェア
パイプラインニングはできな
い!
2020年4月23日 計算科学技術特論B 
26
乗算と加算を2×2個同時に計算可能
( 1  +  1 ) × 4 = 8
1コアのピーク性能:8演算×2GHz =16G演算/秒
この条件に
近い程高効率
(5)演算器の有効利用(京の場合)
2SIMD Multi&Add演算器×2本
• SIMD化(ベクトル化)が必要.
• リカレンスがあるとSIMD化できない.
2020年4月23日 計算科学技術特論B 
27
乗算と加算を8×2個同時に計算可能
( 1  +  1 ) × 16 = 32
1コアのピーク性能:32演算×2GHz =64G演算/秒
この条件に
近い程高効率
(5)演算器の有効利用(富岳の場合)
8SIMD Multi&Add演算器×2本(倍精度の場合)
• SIMD化(ベクトル化)が必要.
• リカレンスがあるとSIMD化できない.
2020年4月23日 計算科学技術特論B 
28
要求B/F値と5つの要素の関係
2020年4月23日 計算科学技術特論B 
29
要求B/F値と5つの要素の関係
アプリケーションの要求B/F値の大小によって性
能チューニングにおいて注目すべき項目が異なる
B/F値
=移動量(Byte)/演算量(Flop)
=8*2N2/2N3
=8/N
×=
行列行列積の計算(要求B/F値が小さい)
2N3個の演算 N2個のデータ N2個のデータ
原理的にはNが大きい程小さな値
(a) (b)
B/F値
=移動量(Byte)/演算量(Flop)
=8*(N2+N)/2N2
≒8/2=4
行列ベクトル積の計算(要求B/F値が大きい)
2N2個の演算 N2個のデータ N個のデータ 原理的には8/Nより大きな値
×=
(a) (b)
(*)1要素が8Byteとする
29
2020年4月23日 計算科学技術特論B 
30
要求B/F値と5つの要素の関係
要求B/F値の大小によって,CPU単体
性能チューニングのための優先順位が
異なる!
2020年4月23日 計算科学技術特論B 
31
要求B/F値と5つの要素の関係
原理的にキャッシュの有
効利用が可能
まずデータをオンキャッ
シュにするコーディング:
(3)が重要
つぎに2次キャッシュのラ
イン上のデータを有効に
利用するコーディング:(2)
が重要
それが実現できた上で
(4)(5)が重要
要求するB/Fが小さいアプリケーションについて
128byte
1
128byte
128byte
1
128byte
< ソフトウェアパイプラインニング>
左の処理を以下のように構成し直す事を
ソフトウェアパイプラインニングという
a(1)a(2)a(3)のロード
b(1)b(2)のロード
(1)の演算
do i=3,100
  a(i+1)のロード
  b(i)のロード
  (i-1)の演算
i-2番目の結果のストア
end do
b(100)のロード
(99)(100)の演算
(98)(99)(100)のストア !
(3)(1) (2) (4)(5)(6)(7)(8)
( 1 + 1 ) × = 8
1 8 ×2GHz =16G /
2SIMD Multi&Add演算器×2本
2020年4月23日 計算科学技術特論B 
32
要求B/F値と5つの要素の関係
・メモリバンド幅を使い切る
事が大事
要求するB/Fが大きいアプリケーションについて
演算とロード・ストア比の改善
レイテンシーが隠れた状態にする事.この状態でメモリ
バンド幅のピーク(京の場合の理論値は64GB/sec)が
出せる.レイテンシーが見えているとメモリバンド幅の
ピーク値は出せない.
2020年4月23日 計算科学技術特論B 
33
要求B/F値と5つの要素の関係
一番重要なのは(1)(2)
次にできるだけオン
キャッシュする(3)が重要
これら(1)(2)(3)が満たされ
計算に必要なデータが演
算器に供給された状態
で、それらのデータを十
分使える程度に(4)のス
ケジューリングができて、
さらに(5)の演算器が有
効に活用できる状態であ
る事が必要
要求するB/Fが大きいアプリケーションについて
128byte
1
128by
128byte
1
128byte
< ソフトウェアパイプラインニング>
例えば以下の処理をを考える。
 do i=1,100
  a(i)のロード
  b(i)のロード
  a(i)とb(i)の演算
  i番目の結果のストア
 end do
(1) (2)
< ソフトウェアパイプラインニング>
左の処理を以下のように構成し直す事を
ソフトウェアパイプラインニングという
a(1)a(2)a(3)のロード
b(1)b(2)のロード
(1)の演算
do i=3,100
  a(i+1)のロード
  b(i)のロード
  (i-1)の演算
i-2番目の結果のストア
end do
b(100)のロード
(99)(100)の演算
(98)(99)(100)のストア !
(3)(1) (2) (4)(5)(6)(7)(8)
( 1 + 1 ) × = 8
1 8 ×2GHz =16G /
2SIMD Multi&Add演算器×2本
128byte
1
128byte
128byte
1
128byte
2020年4月23日 計算科学技術特論B 
34
性能予測手法
(要求B/F値が大きい場合)
2020年4月23日 計算科学技術特論B 
35
CPU単体性能チューニング手順
オリジナル
性能
AICS サマースクール 2012
JITSU CONFIDENTIAL 14
diffusion
usion
L2$ )
L2$ L2$
L2$
(3)性能推定(要求B/Fが高いアプリについて)
(1)プロファイラーを使った測定
(2)プロファイラー測定結果を
 使った問題の発見
(4)性能チューニング
(6)更なる性能チューニング
(5)改良コーディングの性能予測
(要求B/Fが高いアプリについて)
性能
高
低
オリジナル
コーディング
の予測性能
改良
コーディング
の予測性能
2018年4月26日 計算科学技術特論B 
2020年4月23日 計算科学技術特論B 
36
ルーフラインモデル
mine sustainable DRAM bandwidth.
They include all techniques to get the
best memory performance, including
them to include memory optimiza-
tions of a computer into our bound-
and-bottleneck model. Second, we
l
n
-
d
n
-
y
e
-
-
h
”
-
t
e
n
e
d
-
s
n
e
m
-
p
e
-
Figure 1: Roofline model for (a) AMD Opteron X2 and (b) Opteron X2 vs. Opteron X4.
(a)
peak memory bandwidth (stream) peak floating-point performance
Operational Intensity (Flops/Byte)
OperationalIntensity1
(memory-bound)
OperationalIntensity2
(compute-bound)
AttainableGFlops/sec
128
64
32
16
8
4
2
1
1/2
1/4 1/2 1 2 4 8 16
(b)
Opteron X4
Opteron X2
AttainableGFlops/s
128
64
32
16
8
4
2
1
1/2
• ハードウェアの実効的なメモリバンド幅:B
• ハードウェアのピーク性能:F
• アプリケーションの演算強度:X=f/b
• アプリケーションの要求フロップス値:f
• アプリケーションの要求バイト値:b
B*X=B*(f/b)=B*F*f/(b*F)=(B/F)/(b/f)*F
アプリケーションのピーク性能比 :min(1.0 , (B/F)/(b/f) )
S. Williams, A. Waterman, and D. Patterson: Roofline: an
insightful visual performance model for multicore architectures.
Commun. ACM, 52:65–76, 2009.
アプリケーションの性能:
        min(F,B*X)
ハードウェアのB/F値をアプリ
ケーションのb/f値で割る.
2020年4月23日 計算科学技術特論B 
37
ルーフラインモデルの別の見方
(1)メモリ
• メモリデータ転送量:Mdata
• 実効メモリバンド幅:Mband,
• メモリデータ移動時間:Mtime
(2)演算
• プログラム演算量:Ca
• 演算ピーク性能:Ppeak
• 最小演算時間:Ctime
Mdata
Mband
演算器の処理とメモリのデータ
の処理が同時に終わるモデル
Mtime=Mdata/Mband
Ctime=Ca/Ppeak
A+
BSPbP% B P]SO_TP % A+SPbP A+ P]SO_TP 9P
E_TP y s
ww BbX T A+ s
ww A+bX T 9bX T t
y
Mtime=Mdata/Mband_peak
L2time=L2data/L2band_peak
Ctime=Ca/Ppeak
× * × + × ,
BbX T A+bX T 9bX T
fObX T 9_
Ex_time=max(Mtime,L2time,Ctime)
Cp= Ca/(max(Mtime,L2time,Ctime)*Ppeak)
(3)実行時間 : Ex_time
2020年4月23日 計算科学技術特論B 
38
ルーフラインモデルの別の見方
Ex_time=Mtimeの場合 Ex_time=Ctimeの場合
2020年4月23日 計算科学技術特論B 
39
メモリとキャッシュ混合状態での性能予測モデル
s s
A+
A+
A+
BSPbP% B P]SO_TP % A+SPbP A+ P]SO_TP 9P
E_TP y s
ww BbX T A+ s
ww A+bX T 9bX T t
y
Mtime=Mdata/Mband_peak
L2time=L2data/L2band_peak
Ctime=Ca/Ppeak
× * × + × ,
BbX T A+bX T 9bX T
fObX T 9_
Ex_time=max(Mtime,L2time,Ctime)
Cp= Ca/(max(Mtime,L2time,Ctime)*Ppeak)
BbX T6A+bX T r x A+ x u z r
Ex_time=L2timeの場合
L2dataMband
L2band
(1)メモリ
• メモリデータ転送量:Mdata
• 実効メモリバンド幅:Mband
• メモリデータ移動時間:Mtime
(2)L2キャッシュ
• L2データ転送量:L2data 
• 実効L2バンド幅:L2band
• L2データ移動時間:L2time
(3)演算
• プログラム演算量:Ca
• 演算ピーク性能:Ppeak
• 最小演算時間:Ctime
「キャッシュの効果を考慮したルーフラインモデルの
拡張によるプログラムの性能予測」南一生他,情報処理学会論文誌 
コンピューティングシステム,第9巻,第2号,1-14(2016年6月)
Mtime=Mdata/Mband
Ctime=Ca/Ppeak
L2time=L2data/L2band
(4)実行時間 : Ex_time
2020年4月23日 計算科学技術特論B 
40
ベースとなる性能値(京の場合)
メモリ
チップ
共用L2キャッシュ 6MB/12WAY
 コア            
L1キャッシュ32K/2WAY
SIMD演算器 ×8コア
 BF比=0.5(実効値:0.36)
BF比=4(理論値)
 BF比=2(理論値)
レイテンシ(相対値)
10
100
1
16GFLOPS
バンド幅(BF比)
2020年4月23日 計算科学技術特論B 
41
メモリとキャッシュアクセス(1)
do J = 1, NY
do I = 1, NX
do K = 3, NZ-1
DZV (k,I,J) = (V(k,I,J) -V(k-1,I,J))*R40 &
- (V(k+1,I,J)-V(k-2,I,J))*R41
end do
end do
end do
メモリ:ロード1,ストア1
メモリ:ロード1
$L1:ロード2
$L1:ロード1
2020年4月23日 計算科学技術特論B 
42
do J = 1, NY
do I = 1, NX
do K = 3, NZ-1
DZV (k,I,J) = (V(k,I,J) -V(k-1,I,J))*R40 &
- (V(k+1,I,J)-V(k-2,I,J))*R41
end do
end do
end do
ルーフラインモデルによる性能見積り
n 最内軸(K軸)が差分
n 1ストリームでその他の3配列は$L1に載っ
ており再利⽤できる。
要求flop:
add : 3 mult : 2 = 5
要求B/F 12/5 = 2.4
性能予測 0.36/2.4 = 0.15
実測値 0.153
要求Byteの算出:
1store,2loadと考える
4x3 = 12byte
アプリケーションのピーク性能比の予測値
: ハードウェアのBF値(実効値)/アプリの要求BF値
2020年4月23日 計算科学技術特論B 
43
具体的テクニック
(以降のハードウェア・コンパイラについての
話題は京を前提とした話ですが富岳にも通じます)
(1)ロード・ストアの効率化
(2)ラインアクセスの有効利用
(3)キャッシュの有効利用
(4)効率の良い命令スケジューリング
(5)演算器の有効利用
2020年4月23日 計算科学技術特論B 
44
スレッド並列化
do i=1,n
x(i, j) = a(i, j)*b(i, j)+ c(i, j)
do j=1,n
j
i jループをブロック分割
Ti:スレッドiの計算担当
T0 T1 T2 T3 T4 T5 T7T6
2020年4月23日 計算科学技術特論B 
45
CG法前処理のスレッド並列化
以下は前処理に不完全コレスキー分解を用いたCG法のアルゴリズムである.
前処理には色々な方法を使うことが出来る.
例えば前回説明したガウス・ザイデル法等である.
CG法の本体である行列ベクトル積・内積・ベクトルの和等の処理は簡単に前頁の
ブロック分割されたスレッド並列化を行うことが出来る.
しかしガウス・ザイデル前処理は前回講義で示したようにリカレンスがある.1.ICCG法のアルゴリズム
ステップ1:    αk
= (ri
k
•(LLT
)−1
ri
k
)/(Api
k
•pi
k
)
ステップ2:     xi
k+ 1
= xi
k
+α
k
pi
k
ステップ3:     ri
k+1
= ri
k
− αk
Api
k
ステップ4:     βk
= (ri
k+1
•(LLT
)−1
ri
k+1
)/(ri
k
•(LLT
)−1
ri
k
)
ステップ5:     pi
k+1
= (LL
T
)
−1
ri
k+1
+β
k
pi
k
2020年4月23日 計算科学技術特論B 
46
後退代入の例
10
9
8
7
6
5
4
3
2
1
: 求解
: 参照
後退代入
リカレンス
上三角行列
2020年4月23日 計算科学技術特論B 
47
リカレンスがあると, 前回講義のように依存関係があり並列処理がで
きない.
つまりこのままではスレッド並列化もできない.
CG法前処理のスレッド並列化
do j=1,n
黄色ループをブロック分割
RED-BLACKスイープ
そこで例えばRED-BLACKスィープに書換えリカレンスを除去しそれぞ
れのループをブロック分割によるスレッド並列化を行う.
do j=1,n
青色ループをブロック分割
2020年4月23日 計算科学技術特論B 
48
ロード・ストアの効率化
演算とロード・ストア比の改善 < 内側ループアンローリング>
• 以下の様な2 つのコーディングを比較する。
do j=1,m
do i=1,n
x(i)=x(i)+a(i)*b+a(i+1)*d
end do
end do
do j=1,m
do i=1,n,2
x(i)=x(i)+a(i)*b+a(i+1)*d
x(i+1)=x(i+1)+a(i+1)*b+a(i+2)*d
end do
end do
• 最初のコーディングの演算量は4 ,ロード/ストア回数は4 である.2 つ目のコ ーディン
グの演算量は8 ,ロード/ストア回数は7 である.
• 最初のコーディングの演算とロード/ ストアの比は4/4,2つ目のコーディングの演算と
ロード/ストアの比は8/7となり良くなる.
本例は教科書的なもので、キャッシュ
の考慮、コンパイラの処理の考慮、レ
ジスタ数の考慮により一概に効果があ
るものではない。
同じもの
2020年4月23日 計算科学技術特論B 
49
ロード・ストアの効率化
演算とロード・ストア比の改善
• この場合a(i,j)、y(i)の2個をロードし、さらにy(i)をストアし2個の演算を実施する.
• したがって演算とロード/ストアの比は2/3である.
<外側ループストリップマインニング>
• ij型のコーディングを以下のようなものとする.
do i=1,n
do j=1,m
y(i)=y(i)+a(j,i)*x(j)
end do
end do
• この場合a(i,j)、x(j)の2個をロードし2個の演算を実施する.y(i)はレジスタに保持する.
• したがって演算とロード/ストアの比は1である.
• ji型のコーディングを以下のようなものとする.
do j=1,m
do i=1,n
y(i)=y(i)+a(j,i)*x(j)
end do
end do
本例は教科書的なものであり、キャッ
シュの考慮、コンパイラの処理の考
慮、レジスタ数の考慮により最適な
コーディングが必要になる。
2020年4月23日 計算科学技術特論B 
50
ロード・ストアの効率化
演算とロード・ストア比の改善
• この場合a(j,is)・・a(j,is+9)とx(j)の
11個をロードする.さらにy(is)等は
レジスタに保持する.
• その間を20個の演算を実施する.
• したがって演算とロード/ストアの比
は20/11となり改善する.
本例は教科書的なものであり、キャッ
シュの考慮、コンパイラの処理の考
慮、レジスタ数の考慮により最適な
コーディングが必要になる。
• 以下のようなコーディングを外側ループストリップマインニングという.
do is=1,m,10
do j=1,n
do i=is,min(is+9,m)
y(i)=y(i)+a(j,i)*x(j)
end do
end do
end do
do is=1,m,10
do j=1,m
y(is)=y(is)+a(j,is)*x(j)
y(is+1)=y(is+1)+a(j,is+1)*x(j)
  ・・・・
y(is+9)=y(is+9)+a(j,is+9)*x(j)
end do
end do
• このコーディングの最内ループをアンローリングする.
2020年4月23日 計算科学技術特論B 
51
ロード・ストアの効率化
プリフェッチの有効利用
プリフェッチにはハードウェアプリフェッチとソフトウェアプリフェッチがある.
ハードウェアプリフェッチは連続なキャッシュラインのアクセスとなる配列に
ついて自動的に機能する.
ソフトウェアプリフェッチはコンパイラが必要であれば自動的に命令を挿入
する.
ユーザーがコンパイラオプションやディレクティブで挿入する事もできる.
ハードウェアプリフェッチはループ内の配列アクセス数が一定の数を超える
と効かなくなる.
その場合はアクセスする配列を統合する配列マージで良い効果が得られ
る場合がある.
do i=1,n
x(i) = a(i)*b(i)+ c(i)
x(i) = abc(1,i)*abc(2,i)+ abc(3,i)・・・・・・
・・・・・・
do i=1,n
・・・・・・
・・・・・・
do i=1,n
・・・・・・
・・・・・・
x(i) = abc(i,1) * abc(i,2) + abc(i,3)
2020年4月23日 計算科学技術特論B 
52
Cache
改善前 0.01% 42.62% 2.13E+08 97.24% 2.76% 0.00% 6.67% 3.34E+07
改善後 0.01% 24.37% 2.19E+08 37.55% 5.69% 56.76% 5.82% 5.24E+07
L1D ミス数
L1D ミス dm率
(/L1D ミス数)
L1D ミス hwpf 率
(/L1D ミス数)
L1D ミス率
(/ロード・ストア命令数)
L1I ミス率
(/有効総命令数)
L1D ミス swpf 率
(/L1D ミス数)
L2 ミス数
L2 ミス率
(/ロード・ストア命令数)
改善後ソース(最適化制御行チューニング)
51 !ocl prefetch
<<< Loop-information Start >>>
<<< [PARALLELIZATION]
<<< Standard iteration count: 616
<<< [OPTIMIZATION]
<<< SIMD
<<< SOFTWARE PIPELINING
<<< PREFETCH : 32
<<< c: 16, b: 16
<<< Loop-information End >>>
52 1 pp 2v do i = 1 , n
53 1 p 2v a(i) = b(d(i)) + scalar * c(e(i))
54 1 p 2v enddo
prefetch指示子を指定することでインダイレクトアクセス(リストアクセス)
します。その結果、データアクセス待ちコストが改善されました。
インダイレクトアクセスプリフェッチの効果
(最適化制御行チューニング)
浮動小
数点ロー
ドキャッ
シュアク
セス待ち
0.0E+00
5.0E-02
1.0E-01
1.5E-01
2.0E-01
2.5E-01
3.0E-01
3.5E-01
4.0E-01
改善前
[秒]
インダイレクトアクセス(配列
b, c)に対するプリフェッチが
生成された
ロード・ストアの効率化
プリフェッチの有効利用
ユーザーがコンパイラオプションやディレクティブで挿入する事もできる.
以下ディレクティブによるソフトウェアプリフェッチ生成の例.
R-CCSチューニングチュートリアルより
2020年4月23日 計算科学技術特論B 
53
ラインアクセスの有効利用
リストアクセスでx,y,z,u,v,wの座標をアクセスするような場合配列マージに
よりキャッシュラインのアクセス効率を高められる場合がある.
103
配列マージとは
配列マージとは、同一ループ内でアクセスパターンが共通の配列が複数ある
場合、1個の配列に融合することです。データアクセスを連続化して、キャッ
シュ効率を向上させます。
改善前ソース 改善後(コンパイラ最適化イメージ)
parameter(n=1000000)
real*8 a(n), b(n), c(n)
integer d(n+10)
:
do iter = 1, 100
do i = 1 , n
a(d(i)) = b(d(i)) + scalar * c(d(i))
enddo
enddo
:
parameter(n=1000000)
real*8 abc(3, n)
integer d(n+10)
:
do iter = 1, 100
do i = 1 , n
ii = d(i)
abc(1,ii) = abc(2,ii) + scalar * abc(3,ii)
enddo
enddo
:
abc( 1, d(i))
abc( 2, d(i))
abc( 3, d(i))
・・・
abc( 1, d(i+1))
abc( 2, d(i+1))
abc( 3, d(i+1))
・・・
b( d(i))
・・・
c( d(i+1))
・・・
・・・
a( d(i))
・・・
a( d(i+1))
・・・
b( d(i+1))
・・・
c( d(i))
配列マージ
異なるキャッシュライン
のアクセス
同じキャッシュライン
のアクセス
(L1Dキャッシュ)
(L1Dキャッシュ)
キャッシュへのアクセス順番
Copyright 2012 RIKEN AICS
R-CCSチューニングチュートリアルより
2020年4月23日 計算科学技術特論B 
54
ラインアクセスの有効利用
ストライドアクセス配列を連続アクセス化することによりラインアクセスの
有効利用を図る.
97
ループ交換のチューニング内容
改善前ソース
do j=1,n1
do i=1,n2
a(i) = s1 + c(j,i) / (s1 + s2 / d(j,i))
enddo
do i=2,n2
b(j,i) = a(i) / (s2 + s1 / a(i-1))
enddo
enddo
① 配列aを2次元配列にする
do j=1,n1
do i=1,n2
a(j, i) = s1 + c(j,i) / (s1 + s2 / d(j,i))
enddo
do i=2,n2
b(j,i) = a(j, i) / (s2 + s1 / a(j,i-1))
enddo
enddo
② ループ1とループ2を分割する
do j=1,n1
do i=1,n2
a(j, i) = s1 + c(j,i) / (s1 + s2 / d(j,i))
enddo
enddo
do j=1,n1
do i=2,n2
b(j,i) = a(j, i) / (s2 + s1 / a(j,i-1))
enddo
enddo
ループ1
ループ2
③ ループを交換する
do i=1,n2
do j=1,n1
a(j, i) = s1 + c(j,i) / (s1 + s2 / d(j,i))
enddo
enddo
do i=2,n2
do j=1,n1
b(j,i) = a(j, i) / (s2 + s1 / a(j,i-1))
enddo
enddo
配列b、c、d はストライドア
クセスなので、キャッシュ効
率が悪い
配列b、c、d が連続ア
クセスになりキャッシュ
効率が改善される
ループ分割の阻害
要因である配列a
の依存がなくなる
Copyright 2012 RIKEN AICS
2020年4月23日 計算科学技術特論B 
55
キャッシュの有効利用
ブロッキング
B/F値
=移動量(Byte)/演算量(Flop)
=8*2N2/2N3
=8/N
×=
行列行列積の計算
2N3個の演算 N2個のデータ N2個のデータ
原理的にはNが大きい程小さな値
現実のアプリケーションではNがある程度の大きさになるとメモリ配置的には(a)は
キャッシュに乗っても(b)は乗らない事となる
(a) (b)
×=
(a) (b)
そこで行列を小行列にブロック分割し(a)も(b)もキャッシュに乗るようにして
キャッシュ上のデータだけで計算するようにする事で性能向上を実現する.
(*)1要素が8Byteとする
2020年4月23日 計算科学技術特論B 
56
N
N
N2
	
(1)
(2)
(3)
キャッシュの有効利用
ブロッキング
不連続データの並び替えによ
るブロッキング
(1)N個の不連続データをブ
ロッキングしながら連続領域
にコピー
(2)N個のデータを使用してN2
回の計算を実施
(3)N個の計算結果を不連続領
域にコピー
一般的に(1)(3)のコピーはN
のオーダーの処理であるため
N2オーダーの計算時間に比べ
処理時間は小さい.
2020年4月23日 計算科学技術特論B 
57
L1キャッシュの動作Overview
キャッシュの有効利用
・・・・・・・・・・
LineNo
0
1
2
3
4
5
6
7
8
9
10
124
125
126
127
・・・
128
byte
メモリ空間の
物理アドレス
メモリ空間の物理アドレスには
各々LineNoが割り当てられる.
そのLineNoがキャッシュのアドレ
スに使用される.
INDEX=[ADDR/128]
LineNo=MOD[INDEX/128]
2020年4月23日 計算科学技術特論B 
58
L1キャッシュの動作Overview	[Hitの場合]	
キャッシュの有効利用
0 1
Line0
Line1
Line2
Line127
Way
・・・ ・・・ ・・・
L1キャッシュ容量32KB,	
1ライン128Byte,	2Wayの例
1. アドレス49500の値を要求	
2. 要求アドレスをラインの

インデックスに変換	
ADDR=49500	
↓	
INDEX=[ADDR/128]=386	
3. インデックスをライン番号に変
換LINE=MOD(INDEX,128)=2	
4. Line2のWay0かWay1に要求アドレ
ス(index)のデータが入っていたら
Hit
386
・・・
・
・
・
・・・
13186
・・・
・・・
・・・
Hit
2020年4月23日 計算科学技術特論B 
59
L1キャッシュの動作Overview	[Missの場合(1)]	
キャッシュの有効利用
0 1
Line0
Line1
Line2
Line127
Way
・・・ ・・・ ・・・
1. アドレス49500の値を要求	
2. 要求アドレスをラインの

インデックスに変換	
ADDR=49500	
↓	
INDEX=[ADDR/128]=386	
3. インデックスをライン番号に変
換LINE=MOD(INDEX,128)=2	
4. 入っていなければ次のレベル(L2
やメモリ)からデータを持ってく
る
・・・
・
・
・
・・・
13186
・・・
・・・
・・・
Wayに空きがあればそこに入れる
386
L1キャッシュ容量32KB,	
1ライン128Byte,	2Wayの例
2020年4月23日 計算科学技術特論B 
60
L1キャッシュの動作Overview	[Missの場合(2)]		キャッシュ競合	
キャッシュスラッシング	
キャッシュの有効利用
0 1
Line0
Line1
Line2
Line127
Way
・・・ ・・・ ・・・
1. アドレス49500の値を要求	
2. 要求アドレスをラインの

インデックスに変換	
ADDR=49500	
↓	
INDEX=[ADDR/128]=386	
3. インデックスをライン番号に変
換LINE=MOD(INDEX,128)=2	
4. 入っていなければ次のレベル(L2や
メモリ)からデータを持ってくる
・・・
・
・
・
・・・
13186
・・・
・・・
・・・
Wayに空きがなければ一番使
われてないものをどかして,
そこに入れる
642 386
※ここには書かれていないが,どちらの
Wayがより古いか?を表すフラグがある
L1キャッシュ容量32KB,	
1ライン128Byte,	2Wayの例
2020年4月23日 計算科学技術特論B 
61
キャッシュの有効利用
スラッシング
キャッシュスラッシングとは
ソース例
subroutine sub(a, n, m) ※n=256, m=256
real*8 a(n, m, 4)
do j = 1 , m
do i = 1 , n
a(i, j, 4) = a(i, j, 1) + a(i, j, 2) + a(i, j, 3)
enddo
enddo
End
キャッシュスラッシングとは、キャッシュ上の特定のインデックス(キャッシュ上の
情報)のデータだけが頻繁に上書きされる現象のことです。この現象は、配列サ
が2のべき乗の場合およびループ内のストリーム数が多い場合に発生しやすく
す。 注:ストリームとは、ループの回転に伴って参照定義される一連のデータの
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
キャッシュへの格納
キャッシュへの格納(競合)
実行
(L1Dキャッシュ) (メモリ上のデー
a( 1, 1,
・ ・ ・
a ( 16, 1
・ ・ ・
a( 1, 1,
・ ・ ・
a ( 16, 1
・ ・ ・
a( 1, 1,
・ ・ ・
1WAY
128エントリ
2WAY
L1Dキャッシュスラッシングの目安
24
スラッシングとは
※n=256, m=256
(i, j, 2) + a(i, j, 3)
ングとは、キャッシュ上の特定のインデックス(キャッシュ上の位置
が頻繁に上書きされる現象のことです。この現象は、配列サイズ
合およびループ内のストリーム数が多い場合に発生しやすくなりま
注:ストリームとは、ループの回転に伴って参照定義される一連のデータのことです。
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
キャッシュへの格納
キャッシュへの格納(競合)
実行順序①~④
(L1Dキャッシュ) (メモリ上のデータ配置)
a( 1, 1, 1)
・ ・ ・
a ( 16, 1, 1)
・ ・ ・
a( 1, 1, 2)
・ ・ ・
a ( 16, 1, 2)
・ ・ ・
a( 1, 1, 3)
・ ・ ・
a ( 16, 1, 3)
・ ・ ・
a( 1, 1, 4)
・ ・ ・
a ( 16, 1, 4)
・ ・ ・
実行順序
④
①
②
③
1WAY
128エントリ
2WAY
ッシングの目安
L1D ミス dm率
(/L1D ミス数)
20%以上
2回に1回ミスをする)
6回に1回ミスをする)
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
24
ソース例
broutine sub(a, n, m) ※n=256, m=256
al*8 a(n, m, 4)
o j = 1 , m
do i = 1 , n
a(i, j, 4) = a(i, j, 1) + a(i, j, 2) + a(i, j, 3)
enddo
nddo
nd
情報)のデータだけが頻繁に上書きされる現象のことです。この現象は、配列サイズ
が2のべき乗の場合およびループ内のストリーム数が多い場合に発生しやすくなりま
す。 注:ストリームとは、ループの回転に伴って参照定義される一連のデータのことです。
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
キャッシュへの格納
キャッシュへの格納(競合)
実行順序①~④
(L1Dキャッシュ) (メモリ上のデータ配置)
a( 1, 1, 1)
・ ・ ・
a ( 16, 1, 1)
・ ・ ・
a( 1, 1, 2)
・ ・ ・
a ( 16, 1, 2)
・ ・ ・
a( 1, 1, 3)
・ ・ ・
a ( 16, 1, 3)
・ ・ ・
a( 1, 1, 4)
・ ・ ・
a ( 16, 1, 4)
・ ・ ・
実行順序
④
①
②
③
1WAY
128エントリ
2WAY
L1Dキャッシュスラッシングの目安
L1D ミス率
(/ロード・ストア数)
L1D ミス dm率
(/L1D ミス数)
単精度 3.125%以上
倍精度 6.250%以上
20%以上
単精度:1/32(32回に1回ミスをする)
倍精度:1/16(16回に1回ミスをする)
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
ht 2012 RIKEN AICS
24
ソース例
subroutine sub(a, n, m) ※n=256, m=256
real*8 a(n, m, 4)
do j = 1 , m
do i = 1 , n
a(i, j, 4) = a(i, j, 1) + a(i, j, 2) + a(i, j, 3)
enddo
enddo
End
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
キャッシュへの格納
キャッシュへの格納(競合)
実行順序①~④
(L1Dキャッシュ) (メモリ上のデータ配置)
a( 1, 1, 1)
・ ・ ・
a ( 16, 1, 1)
・ ・ ・
a( 1, 1, 2)
・ ・ ・
a ( 16, 1, 2)
・ ・ ・
a( 1, 1, 3)
・ ・ ・
a ( 16, 1, 3)
・ ・ ・
a( 1, 1, 4)
・ ・ ・
a ( 16, 1, 4)
・ ・ ・
実行順序
④
①
②
③
1WAY
128エントリ
2WAY
L1Dキャッシュスラッシングの目安
L1D ミス率
(/ロード・ストア数)
L1D ミス dm率
(/L1D ミス数)
単精度 3.125%以上
倍精度 6.250%以上
20%以上
単精度:1/32(32回に1回ミスをする)
倍精度:1/16(16回に1回ミスをする)
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
Copyright 2012 RIKEN AICS
24
subroutine sub(a, n, m) ※n=256, m=256
real*8 a(n, m, 4)
do j = 1 , m
do i = 1 , n
a(i, j, 4) = a(i, j, 1) + a(i, j, 2) + a(i, j, 3)
enddo
enddo
End
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
a( 1, 1, 1)
・ ・ ・
a ( 16, 1, 1)
・ ・ ・
a( 1, 1, 2)
・ ・ ・
a ( 16, 1, 2)
・ ・ ・
a( 1, 1, 3)
・ ・ ・
a ( 16, 1, 3)
・ ・ ・
a( 1, 1, 4)
・ ・ ・
a ( 16, 1, 4)
・ ・ ・
④
①
②
③
1WAY
128エントリ
2WAY
L1Dキャッシュスラッシングの目安
L1D ミス率
(/ロード・ストア数)
L1D ミス dm率
(/L1D ミス数)
単精度 3.125%以上
倍精度 6.250%以上
20%以上
単精度:1/32(32回に1回ミスをする)
倍精度:1/16(16回に1回ミスをする)
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
Copyright 2012 RIKEN AICS
24
3)
キャッシュ上の特定のインデックス(キャッシュ上の位置
上書きされる現象のことです。この現象は、配列サイズ
ープ内のストリーム数が多い場合に発生しやすくなりま
注:ストリームとは、ループの回転に伴って参照定義される一連のデータのことです。
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
キャッシュへの格納
キャッシュへの格納(競合)
実行順序①~④
(L1Dキャッシュ) (メモリ上のデータ配置)
a( 1, 1, 1)
・ ・ ・
a ( 16, 1, 1)
・ ・ ・
a( 1, 1, 2)
・ ・ ・
a ( 16, 1, 2)
・ ・ ・
a( 1, 1, 3)
・ ・ ・
a ( 16, 1, 3)
・ ・ ・
a( 1, 1, 4)
・ ・ ・
a ( 16, 1, 4)
・ ・ ・
実行順序
④
①
②
③
1WAY
128エントリ
2WAY
目安
m率
数)
する)
する)
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
24
=256, m=256
j, 2) + a(i, j, 3)
グとは、キャッシュ上の特定のインデックス(キャッシュ上の位置
が頻繁に上書きされる現象のことです。この現象は、配列サイズ
およびループ内のストリーム数が多い場合に発生しやすくなりま
注:ストリームとは、ループの回転に伴って参照定義される一連のデータのことです。
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
キャッシュへの格納
キャッシュへの格納(競合)
実行順序①~④
(L1Dキャッシュ) (メモリ上のデータ配置)
a( 1, 1, 1)
・ ・ ・
a ( 16, 1, 1)
・ ・ ・
a( 1, 1, 2)
・ ・ ・
a ( 16, 1, 2)
・ ・ ・
a( 1, 1, 3)
・ ・ ・
a ( 16, 1, 3)
・ ・ ・
a( 1, 1, 4)
・ ・ ・
a ( 16, 1, 4)
・ ・ ・
実行順序
④
①
②
③
1WAY
128エントリ
2WAY
シングの目安
L1D ミス dm率
(/L1D ミス数)
20%以上
回に1回ミスをする)
回に1回ミスをする)
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
1way 2way
L1Dキャッシュ
128バイト×128エントリ×2way=32Kバイト
24
キャッシュスラッシングとは
ソース例
subroutine sub(a, n, m) ※n=256, m=256
real*8 a(n, m, 4)
do j = 1 , m
do i = 1 , n
a(i, j, 4) = a(i, j, 1) + a(i, j, 2) + a(i, j, 3)
enddo
enddo
End
キャッシュスラッシングとは、キャッシュ上の特定のインデックス(キャッシ
情報)のデータだけが頻繁に上書きされる現象のことです。この現象は、
が2のべき乗の場合およびループ内のストリーム数が多い場合に発生し
す。 注:ストリームとは、ループの回転に伴って参照定義される一連の
今回の例の場合、a(1,1,1)、
a(1,1,2)、a(1,1,3)、a(1,1,4)はそ
れぞれ32×16KBずつ離れている
(16KB境界にある)ため4つが同
じインデックスに割り当てられる。
そのため1つ目、2つ目のデータが
3つ目、4つ目のデータに上書きさ
れる。
キャッシュへの格納
キャッシュへの格納(競合)
(L1Dキャッシュ) (メモリ
a(
a
a(
a
a(
a
a(
a
1WAY
128エントリ
2WAY
L1Dキャッシュスラッシングの目安
L1D ミス率
(/ロード・ストア数)
L1D ミス dm率
(/L1D ミス数)
単精度 3.125%以上
倍精度 6.250%以上
20%以上
単精度:1/32(32回に1回ミスをする)
倍精度:1/16(16回に1回ミスをする)
Copyright 2012 RIKEN AICS
メモリ
アクセス時にキャッシュの追い出しが発生(スラッシング)
32×16KBのアドレス差
256*256*8B/1024=512KB=32*16KB
2020年4月23日 計算科学技術特論B 
62
キャッシュの有効利用
スラッシングの除去(配列マージ)
28
改善前ソース例
parameter(n=256,m=256)
real*8 a(n, m),b(n,m),c(n,m),d(n,m)
common /com/a,b,c,d
do j = 1 , m
do i = 1 , n
a(i, j) = b(i, j) + c(i, j) + d(i, j)
enddo
enddo
配列マージとは、複数の配列を1つの配列とするチューニングです。
使用条件
配列の要素数が同じである。
a( 1, 1)
a( 2, 1)
・・・
a(256, 256)
b( 1, 1)
b( 2, 1)
・・・
(L1Dキャッシュ) (メモリ上のデータ配置)
b(256, 256)
c( 1, 1)
c( 2, 1)
・・・
c(256, 256)
d( 1, 1)
d( 2, 1)
・・・
d(256, 256)
改善後ソース例
parameter(n=256,m=256)
real*8 abcd(4, n, m)
common /com/abcd
do j = 1 , m
do i = 1 , n
abcd(1,i, j) = abcd(2,i, j) +
abcd(3,i, j) + abcdd(4,i, j)
enddo
enddo
改善前 改善後
L1Dキャッシュス
ラッシング発生
狙い
ストリーム数削減。
副作用
ロード、ストア命令のSIMD化が難しくなる。
abcd(1, 1, 1)
abcd(2, 1, 1)
・・・
abcd(1,256, 1)
(L1Dキャッシュ) (メモリ上のデータ配置)
・・・
abcd(3, 1, 1)
abcd(4, 1, 1)
abcd(2,256, 1)
abcd(3,256, 1)
abcd(4,256, 1)
abcd(1, 1, 2)
abcd(2, 1, 2)
abcd(3, 1, 2)
abcd(4, 1, 2)
abcd(1, 2, 1)
abcd(4,256,256)
キャッシュへの格納 キャッシュへの格納(競合) メモリへのアクセス順番
4つとも同一キャッシュライン上の
ためデータを有効利用できる
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
Copyright 2012 RIKEN AICS
28
配列マージとは
改善前ソース例
parameter(n=256,m=256)
real*8 a(n, m),b(n,m),c(n,m),d(n,m)
common /com/a,b,c,d
do j = 1 , m
do i = 1 , n
a(i, j) = b(i, j) + c(i, j) + d(i, j)
enddo
enddo
配列マージとは、複数の配列を1つの配列とするチューニングです。
使用条件
配列の要素数が同じである。
a( 1, 1)
a( 2, 1)
・・・
a(256, 256)
b( 1, 1)
b( 2, 1)
・・・
(L1Dキャッシュ) (メモリ上のデータ配置)
b(256, 256)
c( 1, 1)
c( 2, 1)
・・・
c(256, 256)
d( 1, 1)
d( 2, 1)
・・・
d(256, 256)
改善後ソース例
parameter(n=256,m=256)
real*8 abcd(4, n, m)
common /com/abcd
do j = 1 , m
do i = 1 , n
abcd(1,i, j) = abcd(2,i, j) +
abcd(3,i, j) + abcdd(4,i, j)
enddo
enddo
改善前 改善後
L1Dキャッシュス
ラッシング発生
狙い
ストリーム数削減。
副作用
ロード、ストア命令のSIMD化が難しくなる。
abcd(1, 1, 1)
abcd(2, 1, 1)
・・・
abcd(1,256, 1)
(L1Dキャッシュ) (メモリ上のデータ配置)
・・・
abcd(3, 1, 1)
abcd(4, 1, 1)
abcd(2,256, 1)
abcd(3,256, 1)
abcd(4,256, 1)
abcd(1, 1, 2)
abcd(2, 1, 2)
abcd(3, 1, 2)
abcd(4, 1, 2)
abcd(1, 2, 1)
abcd(4,256,256)
キャッシュへの格納 キャッシュへの格納(競合) メモリへのアクセス順番
4つとも同一キャッシュライン上の
ためデータを有効利用できる
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
Copyright 2012 RIKEN AICS
28
改善前ソース例
parameter(n=256,m=256)
real*8 a(n, m),b(n,m),c(n,m),d(n,m)
common /com/a,b,c,d
do j = 1 , m
do i = 1 , n
a(i, j) = b(i, j) + c(i, j) + d(i, j)
enddo
enddo
配列マージとは、複数の配列を1つの配列とするチューニングです。
使用条件
配列の要素数が同じである。
a( 1, 1)
a( 2, 1)
・・・
a(256, 256)
b( 1, 1)
b( 2, 1)
・・・
(L1Dキャッシュ) (メモリ上のデータ配置)
b(256, 256)
c( 1, 1)
c( 2, 1)
・・・
c(256, 256)
d( 1, 1)
d( 2, 1)
・・・
d(256, 256)
改善後ソース例
parameter(n=256,m=256)
real*8 abcd(4, n, m)
common /com/abcd
do j = 1 , m
do i = 1 , n
abcd(1,i, j) = abcd(2,i, j) +
abcd(3,i, j) + abcdd(4,i, j)
enddo
enddo
改善前 改善後
L1Dキャッシュス
ラッシング発生
狙い
ストリーム数削減。
副作用
ロード、ストア命令のSIMD化が難しくなる。
abcd(1, 1, 1)
abcd(2, 1, 1)
・・・
abcd(1,256, 1)
(L1Dキャッシュ) (メモリ上のデータ配置)
・・・
abcd(3, 1, 1)
abcd(4, 1, 1)
abcd(2,256, 1)
abcd(3,256, 1)
abcd(4,256, 1)
abcd(1, 1, 2)
abcd(2, 1, 2)
abcd(3, 1, 2)
abcd(4, 1, 2)
abcd(1, 2, 1)
abcd(4,256,256)
キャッシュへの格納 キャッシュへの格納(競合) メモリへのアクセス順番
4つとも同一キャッシュライン上の
ためデータを有効利用できる
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
Copyright 2012 RIKEN AICS
R-CCSチューニングチュートリアルより
2020年4月23日 計算科学技術特論B 
63
キャッシュの有効利用
スラッシングの除去(ループ分割)
do i=1,n do i=1,n
…  =  a(i)  +  b(i)                                      …  =  z(1,i)  +  z(2,i)
enddo enddo
ストリ
リスク
do i=1,n do i=1,n
…  =  a(I,1)  +  a(I,2)                          …  =  a(1,i)  +  a(2,i)
enddo enddo
do i=1,n do i=1,n
…  =  a(i)  +  b(i)                                      …  =  a(i)  +  b(i)  
…  =  c(i)  +  d(i)                                  enddo      
enddo do i=1,n
…  =  c(i)  +  d(i)    
enddo
common //a(n),b(n) common //a(n),p(64),b(n)
配列マージ
配列次元移動
ループ分割
パディング
ループ内でアクセスされる配列数が多いとスラッシング
が起きやすい.
ループ分割する事でそれぞれのループ内の配列数を削減
する事が可能となる.
配列数が削減されることによりスラッシングの発生を抑
えられる場合がある.
2020年4月23日 計算科学技術特論B 
64
キャッシュの有効利用
スラッシングの除去(パディング)
26
enddo enddo
リスクそのものを改善する解決型のアプロー
長所:パラメタ変更等、問題規模の変化に
順応できる
do i=1,n do i=1,n
…  =  a(I,1)  +  a(I,2)                          …  =  a(1,i)  +  a(2,i)
enddo enddo
do i=1,n do i=1,n
…  =  a(i)  +  b(i)                                      …  =  a(i)  +  b(i)  
…  =  c(i)  +  d(i)                                  enddo      
enddo do i=1,n
…  =  c(i)  +  d(i)    
enddo
common //a(n),b(n) common //a(n),p(64),b(n)
do i=1,n do i=1,n
…  =  a(i)  +  b(i)                                      …  =  a(i)  +  b(i)  
enddo enddo
パディングを行うことで、配列のアドレスを
ずらして改善する回避型のアプローチ
短所:修正量が多い。SIMD化が複雑
注意:ループ分割は除
長所:修正量が少ない、SIMD化が容易
短所:パラメタ変更等、問題規模が変化す
度に調整が必要になる
配列次元移動
ループ分割
パディング
Copyright 2012 RIKEN AICS
L1Dキャッシュへの配列の配置の状況を変更する事でス
ラッシングの解消を目指す.
そのためにcommon配列の宣言部にダミーの配列を配置
することでスラッシングが解消する場合がある.
また配列宣言時にダミー領域を設けることでスラッシン
グが解消する場合がある.
42
キャッシュへの格納 キャッシュへの格納(競合) メモリへのアクセス順番
改善前ソース例
ter(n=256,m=256)
a(n,m,4),b(n,m,4),c(n,m,4),d(n,m,4)
n /com/a
, m
= 1 , n
j, 1) = a(i, j, 2) + a(i, j, 3) + a(i, j, 4)
o
前 改善後
ャッシュス
ング発生
a( 1, 1, 1)
a( 2, 1, 1)
・・・
a(256, 256, 1)
a( 1, 1, 2)
a( 2, 1, 2)
・・・
(L1Dキャッシュ) (メモリ上のデータ配置)
a(256, 256, 2)
a( 1, 1, 3)
a( 2, 1, 3)
・・・
a(256, 256, 3)
a( 1, 1, 4)
a( 2, 1, 4)
・・・
a(256, 256, 4)
もしくは
複数の配列が存在している。
副作用
問題規模変更ごとにパディング量の変更が
(L1Dキャッシュ)
a( 1
a( 2
・
a(256,
a( 1
a( 2
・
(メモリ上の
a(257,
改善後ソース例
parameter(n=257,m=256)
real*8 a(n,m,4),b(n,m,4),c(n,m,4),d(n,m,4)
common /com/a
do j = 1 , m
do i = 1 , n
a(i, j, 1) = a(i, j, 2) + a(i, j, 3) + a(i, j, 4)
enddo
enddo
配列で複数のストリームが存在している例
格納場所が
ずれたことで
L1Dキャッ
シュスラッシ
ングは発生
せず
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
256×256×8B
=32×16KB
離れたアクセス
・
a(257,
a(256,
パディン
でキャッ
される場
12 RIKEN AICS
2020年4月23日 計算科学技術特論B 
65
キャッシュの有効利用
リオーダリング
メモリ
データ
2次キャッシュ
1次キャッシュ
データ
データ
細かい要素毎
のアクセス
キャッシュライン
128byte毎の
アクセス
メモリと2次キャッシュはキャッ
シュライン128バイト単位のアクセ
スとなる.
1次キャッシュは128バイトより細
かい単位のアクセスとなる.
以下のような疎行列とベクトルの積
があるときベクトルはとびとびにア
クセスされる.
このベクトルがメモリや2次キャッ
シュにある場合アクセス効率が非常
に悪化する.
1次キャッシュは,アクセスされる
単位が細かいため,この悪化が緩和
される.
ベクトルを1次キャッシュへ置くた
めの並び替えが有効になる.
do i=1,n
do j=1,l(i)
k = k +1
buf = buf + a(k)*v(L(k))
x(i) = buf
buf = 0
2020年4月23日 計算科学技術特論B 
66
効率の良いスケジューリング・演算器の有効利用
カラーリング
ソフトウェアパイプラインニングやsimd等のス
ケジューリングはループに対して行われる.
ループのインデックスについて依存関係がある
とソフトウェアパイプラインニングやsimd化は
できなくなる.
例えばガウス・ザイデル法の処理等がその例で
ある.
その場合は「CG法前処理のスレッド並列化」
で説明したred-blackスィープへの書換えで依
存関係を除去することが効果的である.
red-blackは2色のカラーリングであるが2色以
上のカラーリングも同様な効果がある.
2020年4月23日 計算科学技術特論B 
67
点ガウス・ザイデル法
⑨を⑫のように変形する. (D − E)x = Fx + k
(D − E)x(m+1)
= Fx(m)
+ k
aii xi
(m+1)
= − aij xj
(m+1)
j=1
i−1
∑ − aij xj
(m)
+ kj
j=1+1
n
∑
・・・⑫
⑫を④の反復法にすると⑬を得る.
この反復法を点ガウス・ザイデル法という.
具体的には⑭の計算法となる.
注目すべきは(m+1)世代の解を得るため
に(m+1)世代の下三角行列を使用してい
る点である(リカレンスの発生).
右図のように, iを定義するのにi-1の値を
参照するコーディングは下図のような参照
関係となり,リカレンス(回帰参照)が発生し
ている.
・・・⑬
・・・⑭
x(i) = a(i)* x(i −1)+ b(i)
do i=1,n
リカレンスがあると, iにつ
いては依存関係があり並
列処理ができない. 67
2020年4月23日 計算科学技術特論B 
68
IF文の除去
IF文も-Ksimd=2オプションや!ocl simdディレクティブを
使う事でsimd化やソフトウェアパイプラインニングを行
うことが出来る.
しかしIF文が複雑になった場合は以下のような方法での
IF文の除去が有効な場合がある.
IF(体系内部の場合) THEN 
   速度の配列 UL の7点差分式
IF(外部境界の場合) THEN 
   ULと速度境界条件の配列 VELBN の混合式
MIM
UL
VELBN
5 -1 -999
5 1
イレギュラー
  ○:UL X:VELBN
<変更後>
MIM 5 -1
イレギュラー
0
10-1 5
ULD
=0
0=
ダミー領域
        
内点と縁の点で参照点の数が違うため計
算式が違う.そのため内点と縁の点を区
別するIF文が存在する.
計算領域の外側にダミー領域を設定しその中に
0を格納する.こうすることにより内点と縁の点
が同じ式となりIF文は必要でなくなる.
効率の良いスケジューリング・演算器の有効利用
2020年4月23日 計算科学技術特論B 
69
インデックス計算の除去
例えば粒子を使ったPIC法のアプリケーションの場合,
粒子がどのメッシュに存在するかをインデックスで計算
するような処理が頻発する.
このような複雑なインデックス計算を使用しているとソ
フトウェアパイプラインニングやsimd化等のスケジュー
リングがうまく行かない場合がある.
このような場合には以下のような方法でのインデックス
計算の除去が有効な場合がある.
1. 粒子が隣のメッシュに動く可
能性がある.
2. そのため全ての粒子につい
てどのメッシュにいるかのイ
ンデックス計算がある.
3. しかし隣のメッシュに動く粒
子は少数.
4. まず全粒子は元のメッシュに
留まるとしてインデックス計
算を除去して計算する.
5. その後隣のメッシュに移動し
た粒子についてだけ再計算
する.
do i=1,N
インデックス
なしの計算
do i=1,移動した粒子数
インデックス
ありの計算
効率の良いスケジューリング・演算器の有効利用
2020年4月23日 計算科学技術特論B 
70
ループ分割
do i=1,n do i=1,n
…  =  a(i)  +  b(i)                                      …  =  z(1,i)  +  z(2,i)
enddo enddo
ストリ
リスク
do i=1,n do i=1,n
…  =  a(I,1)  +  a(I,2)                          …  =  a(1,i)  +  a(2,i)
enddo enddo
do i=1,n do i=1,n
…  =  a(i)  +  b(i)                                      …  =  a(i)  +  b(i)  
…  =  c(i)  +  d(i)                                  enddo      
enddo do i=1,n
…  =  c(i)  +  d(i)    
enddo
common //a(n),b(n) common //a(n),p(64),b(n)
配列マージ
配列次元移動
ループ分割
パディング
ループ内の処理が複雑すぎるとソフトウェアパイプライ
ンニングやsimd化が効かない場合がある.
ループ分割する事でループ内の処理が簡略化されスケ
ジューリングがうまくいくようになる場合がある.
効率の良いスケジューリング・演算器の有効利用
2020年4月23日 計算科学技術特論B 
71
do i=1,n
do j=1,10
ループ交換
ループの回転数が少ないとソフトウェアパイプラインニ
ングが効かない場合がある.
ループ交換し長いループを最内にする事でソフトウェア
パイプラインニングがうまくいくようになる場合があ
る.
do j=1,10
do i=1,n
効率の良いスケジューリング・演算器の有効利用
2020年4月23日 計算科学技術特論B 
72
do i=1,n
関数・サブルーチン展開
ループ内に関数やサブルーチン呼出しがあるとスケ
ジューリングが進まない.
その場合はコンパイラオプションにより関数やサブルー
チンをループ内に展開する.
ハンドチューニングで展開した方がうまく行く場合もあ
る.
do i=1,n
効率の良いスケジューリング・演算器の有効利用
call subroutines
2020年4月23日 計算科学技術特論B 
73
まとめ
• スレッド並列化
• CPU単体性能を上げるための5つの要素
• 要求B/F値と5つの要素の関係
• 性能予測手法(要求B/F値が高い場合)
• 具体的テクニック

More Related Content

What's hot

[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読
Deep Learning JP
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
Yusuke Fujimoto
 
第6回 配信講義 計算科学技術特論A(2021)
第6回 配信講義 計算科学技術特論A(2021)第6回 配信講義 計算科学技術特論A(2021)
第6回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
智啓 出川
 
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
智啓 出川
 
Fugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons LearnedFugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons Learned
RCCSRENKEI
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
Sho Takase
 
TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?
Mr. Vengineer
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
Ryosuke Okuta
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
 
アップルの特許に見るUI特許のポイント
アップルの特許に見るUI特許のポイントアップルの特許に見るUI特許のポイント
アップルの特許に見るUI特許のポイント
kurikiyo
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
ManaMurakami1
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
gree_tech
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
Kota Matsui
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
Rui Watanabe
 
第15回 配信講義 計算科学技術特論A(2021)
第15回 配信講義 計算科学技術特論A(2021)第15回 配信講義 計算科学技術特論A(2021)
第15回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
 
Deeplearning輪読会
Deeplearning輪読会Deeplearning輪読会
Deeplearning輪読会
正志 坪坂
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
 

What's hot (20)

[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読[Dl輪読会]dl hacks輪読
[Dl輪読会]dl hacks輪読
 
Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化Tensor コアを使った PyTorch の高速化
Tensor コアを使った PyTorch の高速化
 
第6回 配信講義 計算科学技術特論A(2021)
第6回 配信講義 計算科学技術特論A(2021)第6回 配信講義 計算科学技術特論A(2021)
第6回 配信講義 計算科学技術特論A(2021)
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
 
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算(移流方程式)
2015年度先端GPGPUシミュレーション工学特論 第9回 偏微分方程式の差分計算 (移流方程式)
 
Fugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons LearnedFugaku, the Successes and the Lessons Learned
Fugaku, the Successes and the Lessons Learned
 
Transformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法についてTransformerを多層にする際の勾配消失問題と解決法について
Transformerを多層にする際の勾配消失問題と解決法について
 
TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?TensorFlow XLAは、 中で何をやっているのか?
TensorFlow XLAは、 中で何をやっているのか?
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
CuPy解説
CuPy解説CuPy解説
CuPy解説
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
アップルの特許に見るUI特許のポイント
アップルの特許に見るUI特許のポイントアップルの特許に見るUI特許のポイント
アップルの特許に見るUI特許のポイント
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正前 typoあり)」
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 
Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2Recent Advances on Transfer Learning and Related Topics Ver.2
Recent Advances on Transfer Learning and Related Topics Ver.2
 
Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
第15回 配信講義 計算科学技術特論A(2021)
第15回 配信講義 計算科学技術特論A(2021)第15回 配信講義 計算科学技術特論A(2021)
第15回 配信講義 計算科学技術特論A(2021)
 
Deeplearning輪読会
Deeplearning輪読会Deeplearning輪読会
Deeplearning輪読会
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 

Similar to アプリケーションの性能最適化2(CPU単体性能最適化)

第1回 配信講義 計算科学技術特論B(2022)
第1回 配信講義 計算科学技術特論B(2022)第1回 配信講義 計算科学技術特論B(2022)
第1回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
アプリケーションの性能最適化の実例1
アプリケーションの性能最適化の実例1 アプリケーションの性能最適化の実例1
アプリケーションの性能最適化の実例1
RCCSRENKEI
 
第3回 配信講義 計算科学技術特論B(2022)
第3回 配信講義 計算科学技術特論B(2022)第3回 配信講義 計算科学技術特論B(2022)
第3回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
【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 つのヒント ~
日本マイクロソフト株式会社
 
200514material minami
200514material minami200514material minami
200514material minami
RCCSRENKEI
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
Hitoshi Sato
 
kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
swkagami
 
電子動力学アプリケーションの最適化2
電子動力学アプリケーションの最適化2電子動力学アプリケーションの最適化2
電子動力学アプリケーションの最適化2
RCCSRENKEI
 
CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能
CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能
CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能Computational Materials Science Initiative
 
VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-Takeshi Yamamuro
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
 
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
智啓 出川
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
Hitoshi Sato
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
openrtm
 
200702material hirokawa
200702material hirokawa200702material hirokawa
200702material hirokawa
RCCSRENKEI
 
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2Computational Materials Science Initiative
 
20180415 LinuC Level2 技術解説セミナー(SlideShare Version)
20180415 LinuC Level2 技術解説セミナー(SlideShare Version)20180415 LinuC Level2 技術解説セミナー(SlideShare Version)
20180415 LinuC Level2 技術解説セミナー(SlideShare Version)
Takahiro Kujirai
 
Awamoto master thesis
Awamoto master thesisAwamoto master thesis
Awamoto master thesis
pflab
 
Linux on Power と x86 Linux との技術的な相違点
Linux on Power と x86 Linux との技術的な相違点Linux on Power と x86 Linux との技術的な相違点
Linux on Power と x86 Linux との技術的な相違点
Shinichiro Arai
 

Similar to アプリケーションの性能最適化2(CPU単体性能最適化) (20)

CMSI計算科学技術特論B(3) アプリケーションの性能最適化2
CMSI計算科学技術特論B(3) アプリケーションの性能最適化2CMSI計算科学技術特論B(3) アプリケーションの性能最適化2
CMSI計算科学技術特論B(3) アプリケーションの性能最適化2
 
第1回 配信講義 計算科学技術特論B(2022)
第1回 配信講義 計算科学技術特論B(2022)第1回 配信講義 計算科学技術特論B(2022)
第1回 配信講義 計算科学技術特論B(2022)
 
アプリケーションの性能最適化の実例1
アプリケーションの性能最適化の実例1 アプリケーションの性能最適化の実例1
アプリケーションの性能最適化の実例1
 
第3回 配信講義 計算科学技術特論B(2022)
第3回 配信講義 計算科学技術特論B(2022)第3回 配信講義 計算科学技術特論B(2022)
第3回 配信講義 計算科学技術特論B(2022)
 
【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 つのヒント ~
 
200514material minami
200514material minami200514material minami
200514material minami
 
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
第162回情報処理学会ハイパフォーマンスコンピューティング研究発表会
 
kagamicomput201814
kagamicomput201814kagamicomput201814
kagamicomput201814
 
電子動力学アプリケーションの最適化2
電子動力学アプリケーションの最適化2電子動力学アプリケーションの最適化2
電子動力学アプリケーションの最適化2
 
CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能
CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能
CMSI計算科学技術特論B(1) スーパーコンピュータとアプリケーションの性能
 
VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
2015年度GPGPU実践基礎工学 第5回 ハードウェアによるCPUの高速化技術
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
1.コース概要
1.コース概要1.コース概要
1.コース概要
 
200702material hirokawa
200702material hirokawa200702material hirokawa
200702material hirokawa
 
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
CMSI計算科学技術特論B(5) アプリケーションの性能最適化の実例2
 
20180415 LinuC Level2 技術解説セミナー(SlideShare Version)
20180415 LinuC Level2 技術解説セミナー(SlideShare Version)20180415 LinuC Level2 技術解説セミナー(SlideShare Version)
20180415 LinuC Level2 技術解説セミナー(SlideShare Version)
 
Awamoto master thesis
Awamoto master thesisAwamoto master thesis
Awamoto master thesis
 
Linux on Power と x86 Linux との技術的な相違点
Linux on Power と x86 Linux との技術的な相違点Linux on Power と x86 Linux との技術的な相違点
Linux on Power と x86 Linux との技術的な相違点
 

More from RCCSRENKEI

第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第14回 配信講義 計算科学技術特論B(2022)
第14回 配信講義 計算科学技術特論B(2022)第14回 配信講義 計算科学技術特論B(2022)
第14回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第10回 配信講義 計算科学技術特論B(2022)
第10回 配信講義 計算科学技術特論B(2022)第10回 配信講義 計算科学技術特論B(2022)
第10回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第9回 配信講義 計算科学技術特論B(2022)
 第9回 配信講義 計算科学技術特論B(2022) 第9回 配信講義 計算科学技術特論B(2022)
第9回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第8回 配信講義 計算科学技術特論B(2022)
第8回 配信講義 計算科学技術特論B(2022)第8回 配信講義 計算科学技術特論B(2022)
第8回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第7回 配信講義 計算科学技術特論B(2022)
第7回 配信講義 計算科学技術特論B(2022)第7回 配信講義 計算科学技術特論B(2022)
第7回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第6回 配信講義 計算科学技術特論B(2022)
第6回 配信講義 計算科学技術特論B(2022)第6回 配信講義 計算科学技術特論B(2022)
第6回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
Realization of Innovative Light Energy Conversion Materials utilizing the Sup...
Realization of Innovative Light Energy Conversion Materials utilizing the Sup...Realization of Innovative Light Energy Conversion Materials utilizing the Sup...
Realization of Innovative Light Energy Conversion Materials utilizing the Sup...
RCCSRENKEI
 
Current status of the project "Toward a unified view of the universe: from la...
Current status of the project "Toward a unified view of the universe: from la...Current status of the project "Toward a unified view of the universe: from la...
Current status of the project "Toward a unified view of the universe: from la...
RCCSRENKEI
 
第4回 配信講義 計算科学技術特論B(2022)
第4回 配信講義 計算科学技術特論B(2022)第4回 配信講義 計算科学技術特論B(2022)
第4回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
第2回 配信講義 計算科学技術特論B(2022)
第2回 配信講義 計算科学技術特論B(2022)第2回 配信講義 計算科学技術特論B(2022)
第2回 配信講義 計算科学技術特論B(2022)
RCCSRENKEI
 
210603 yamamoto
210603 yamamoto210603 yamamoto
210603 yamamoto
RCCSRENKEI
 
第14回 配信講義 計算科学技術特論A(2021)
第14回 配信講義 計算科学技術特論A(2021)第14回 配信講義 計算科学技術特論A(2021)
第14回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
 
第12回 配信講義 計算科学技術特論A(2021)
第12回 配信講義 計算科学技術特論A(2021)第12回 配信講義 計算科学技術特論A(2021)
第12回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
 
第13回 配信講義 計算科学技術特論A(2021)
第13回 配信講義 計算科学技術特論A(2021)第13回 配信講義 計算科学技術特論A(2021)
第13回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
 
第11回 配信講義 計算科学技術特論A(2021)
第11回 配信講義 計算科学技術特論A(2021)第11回 配信講義 計算科学技術特論A(2021)
第11回 配信講義 計算科学技術特論A(2021)
RCCSRENKEI
 

More from RCCSRENKEI (20)

第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
 
第14回 配信講義 計算科学技術特論B(2022)
第14回 配信講義 計算科学技術特論B(2022)第14回 配信講義 計算科学技術特論B(2022)
第14回 配信講義 計算科学技術特論B(2022)
 
第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)第12回 配信講義 計算科学技術特論B(2022)
第12回 配信講義 計算科学技術特論B(2022)
 
第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)第13回 配信講義 計算科学技術特論B(2022)
第13回 配信講義 計算科学技術特論B(2022)
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
第10回 配信講義 計算科学技術特論B(2022)
第10回 配信講義 計算科学技術特論B(2022)第10回 配信講義 計算科学技術特論B(2022)
第10回 配信講義 計算科学技術特論B(2022)
 
第9回 配信講義 計算科学技術特論B(2022)
 第9回 配信講義 計算科学技術特論B(2022) 第9回 配信講義 計算科学技術特論B(2022)
第9回 配信講義 計算科学技術特論B(2022)
 
第8回 配信講義 計算科学技術特論B(2022)
第8回 配信講義 計算科学技術特論B(2022)第8回 配信講義 計算科学技術特論B(2022)
第8回 配信講義 計算科学技術特論B(2022)
 
第7回 配信講義 計算科学技術特論B(2022)
第7回 配信講義 計算科学技術特論B(2022)第7回 配信講義 計算科学技術特論B(2022)
第7回 配信講義 計算科学技術特論B(2022)
 
第6回 配信講義 計算科学技術特論B(2022)
第6回 配信講義 計算科学技術特論B(2022)第6回 配信講義 計算科学技術特論B(2022)
第6回 配信講義 計算科学技術特論B(2022)
 
第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)
 
Realization of Innovative Light Energy Conversion Materials utilizing the Sup...
Realization of Innovative Light Energy Conversion Materials utilizing the Sup...Realization of Innovative Light Energy Conversion Materials utilizing the Sup...
Realization of Innovative Light Energy Conversion Materials utilizing the Sup...
 
Current status of the project "Toward a unified view of the universe: from la...
Current status of the project "Toward a unified view of the universe: from la...Current status of the project "Toward a unified view of the universe: from la...
Current status of the project "Toward a unified view of the universe: from la...
 
第4回 配信講義 計算科学技術特論B(2022)
第4回 配信講義 計算科学技術特論B(2022)第4回 配信講義 計算科学技術特論B(2022)
第4回 配信講義 計算科学技術特論B(2022)
 
第2回 配信講義 計算科学技術特論B(2022)
第2回 配信講義 計算科学技術特論B(2022)第2回 配信講義 計算科学技術特論B(2022)
第2回 配信講義 計算科学技術特論B(2022)
 
210603 yamamoto
210603 yamamoto210603 yamamoto
210603 yamamoto
 
第14回 配信講義 計算科学技術特論A(2021)
第14回 配信講義 計算科学技術特論A(2021)第14回 配信講義 計算科学技術特論A(2021)
第14回 配信講義 計算科学技術特論A(2021)
 
第12回 配信講義 計算科学技術特論A(2021)
第12回 配信講義 計算科学技術特論A(2021)第12回 配信講義 計算科学技術特論A(2021)
第12回 配信講義 計算科学技術特論A(2021)
 
第13回 配信講義 計算科学技術特論A(2021)
第13回 配信講義 計算科学技術特論A(2021)第13回 配信講義 計算科学技術特論A(2021)
第13回 配信講義 計算科学技術特論A(2021)
 
第11回 配信講義 計算科学技術特論A(2021)
第11回 配信講義 計算科学技術特論A(2021)第11回 配信講義 計算科学技術特論A(2021)
第11回 配信講義 計算科学技術特論A(2021)
 

アプリケーションの性能最適化2(CPU単体性能最適化)