計算科学技術特論B

大規模量子化学計算(1)小林 正人(北海道大学理学研究院)
K-masato@mail.sci.hokudai.ac.jp
2016/07/07
1

講義概要
 7/7 量子化学計算の概要と構成要素、高速化
 量子化学計算の目的と種類
 量子化学計算ソフトウェア

 量子化学計算の手順、構成要素と高速化
 SCF計算: 2電子積分の高速計算アルゴリズム
 Post HF計算: MP2エネルギー計算のOpenMP並列化

 7/14 大規模系に適用するための量子化学計算法
 フラグメント分割に基づく方法
 ラプラス変換MP2法
 2電子積分の密度フィッティング法(2)

量子化学計算とは
 化学(物質科学)の対象 ＝ 分子(集団)・固体
 構成要素原子核
電子(原子核と)電子の量子論的な振舞い

数値的に求める =物質のあらゆる性質量子化学計算 典型的量子化学計算(ab initio)
 入力: 原子の座標、電子数、 計算手法・基底関数
 出力: 分子のエネルギー、電子分布(分子軌道)、

プロパティ、エネルギー微分(場合によって)(3)量子化学計算ソフトウェア
 商用ソフトウェア
 Gaussian 09, Q-Chem, MOLPRO, Molcas, Turbomole, ADF

 無料ソフトウェア
 バイナリのみ提供
 NTChem, ORCA, Firefly, CONQUEST

 ソースコード開示 (ライセンス制限あり)
 GAMESS, DIRAC, SIESTA オープンソース (GPL, Apache license等)
 NWChem, ACES III, SMASH, OpenMX(4)

入力ファイルの例
 SMASHプログラムによる水分子の計算
 SMASH: 高並列量子化学計算パッケージ(by Dr. K. Ishimura, IMS)
計算法の指定(B3LYPは密度汎関数の一種)

基底関数系の指定

job runtype=energy method=B3LYP basis=cc-pVDZ
geom
O 0.000
0.000
0.122
H 0.000
0.793 -0.487
H 0.000 -0.793 -0.487(5)量子化学計算の種類
 Hartree-Fock (HF)法: 量子化学計算の基本
 非経験的な電子状態の平均場理論
 2電子積分計算と密対称行列対角化

 密度汎関数理論(DFT)計算: 現在主流の計算法
 形式的にはほぼHFと同じだが、高精度化が可能
 HF + 密度汎関数の空間数値積分

 Post-HF法: HF計算の後に実行する高精度計算
 前二者とは基本的に異なる演算タイプ
 MP法, CC法: 積分変換とテンソル縮約
 CI法: 大規模疎行列の対角化(6)量子化学計算にかかる時間と精度
分子の大きさの3乗に比例して計算時間増大
方法

Hartree-Fock
(HF)法

密度汎関数
理論(DFT)

MP2法
(摂動法)

CCSD法

CCSD(T)法

計算時間

O(N3)

O(N3)

O(N5)

O(N6)

O(N7)

近似レベル

計算精度

平均場理論

定性的

電子相関理論正確

計算時間は
 精度の低い理論でもO(N3) 精度が上がるにつれて莫大に
7

Hartree-Fock(-Roothaan)法: 基本 分子中の電子のSchrödinger方程式

Hˆ Ψ (r1 , r2 , rN ) =E Ψ (r1 , r2 , rN )
 直接N電子波動関数Ψを決定するのは難しい

 1体近似 (Hartree-Fock近似)

Ψ (r1 , r2 , , rN ) ≈ ψ 1 (r1 )ψ 2 (r2 )ψ N (rN )Hˆ ψ (r ) = ε ψ (r )
eff

p

1

p

p

1

 電子が作る平均の場の中で運動する1電子問題に帰着
 ψを所与の関数(基底関数)で展開: Roothaan法ψ p (r ) = ∑ Cµ pφµ (r )µ(8)

量子化学計算の基底関数
 原子に局在した関数(原子軌道)
 「分子 = 原子の集まり」という描像に一致
 基底関数の数を大幅に削減
 行列要素の計算に必要な分子積分が複雑化

 スレーター型関数: χS = N xl ym zn exp(−ζ r) 水素原子の正確な波動関数に一致 分子積分の計算が非常に面倒 ガウス型関数: χG = N xl ym zn exp(−α r2) ガウス型関数の積がガウス型関数になるので、計算が簡略
 量子化学計算のスタンダード 原子様数値基底 (cf: 尾崎先生)

 有限要素基底, Wavelet基底, 平面波基底(9)量子化学計算の手順
Atomic coordinates, # electrons,
method, basis set

N: system size (# atoms)

Guess electron density D
Construct Hamiltonian F from D

・・・ O(N2-4) time

Diagonalize F to get MOs {ψp}・・・ O(N3) timeocc

Dµν = 2∑ Cµi Cν i (BLAS3)

Construct density D from MOsiNo

D converged?
Yes
HF or DFT?
No
Accurate post-HF calculation

Self-consistent field (SCF)
Yes

End

・・・ O(N5-7) time

End
(10)

SCFの構成要素(1): Fock行列生成
 Fock行列: F = Hcore + G (対称行列)
 Hcore: 電子密度に依存しない定数項(メモリに保存) Gμν = Σλσ Dλσ [2Γμν,σλ − Γμλ,σν]

クーロン項 J（古典的な項） 交換項 K（量子力学的な項）
 密度行列Dに依存 [繰り返し計算される] Γμν,σλ: 2電子積分(後述) [4階のテンソル、メモリ保存不可] Γμν,λσ = Γμν,σλ = Γνμ,λσ = Γνμ,σλ = Γλσ,μν = Γσλ,μν = Γλσ,νμ = Γσλ,νμ : 高い対称性

2つの方針
 Conventional SCF: Γ を外部記憶に保存 Direct SCF: Γ を毎回計算して捨てる(11)

Fock行列生成(Direct SCF)の擬似コード
1: F ← 0
2: Loop over μνλσsh (μsh ≥ νsh, λsh ≥ σsh, [μν]sh ≥ [λσ]sh)sh: シェル（同中心のいくつかの基底関数をまとめた単位）
3:
If (MOD(μνλσsh,NPROC)==MYRANK) Then4:
If (Estimate_Magnitude(μνλσsh,D)>=thresh) Then
5:
Call ConstructGamma(gamma,μνλσsh)
6:
Loop over μνλσ
7:F(μν) ← F(μν) + 4*D(λσ)*gamma(μνλσ)
8:F(λσ) ← F(λσ) + 4*D(μν)*gamma(μνλσ)
9:F(μλ) ← F(μλ) - D(νσ)*gamma(μνλσ)
10:F(μσ) ← F(μσ) - D(νλ)*gamma(μνλσ)
Fはthread private
11:F(νλ) ← F(νλ) - D(μσ)*gamma(μνλσ)にしてReduction
12:F(νσ) ← F(νσ) - D(μλ)*gamma(μνλσ)
13:
End Loop 様々な並列化パターンが検討
14:
End If15:
End If OpenMP並列も同時に可
16: End Loop
17: Call MPI_AllReduce(F)  対称性を利用
18: F ← F + HCORE Dを用いたスクリーニング(12)

Fock行列計算のスクリーニング
 Cauchy-Schwarzの不等式の利用
x1 y1 + x2 y2 +  ≤( x + x + )( y + y + )
2
1

2
2

2
1

2
2

Γ µν ,λσ ≤ Γ µν , µν ⋅ Γ λσ ,λσ Γμν,λσにかけられる密度行列の最大絶対値:

Dmax = Max(4|Dμν|, 4|Dλσ|, |Dμλ|, |Dμσ|, |Dνλ|, |Dνσ|)

Dmax Γ µν , µν ⋅ Γ λσ ,λσ ≥ ε threshを満たすΓμν,λσのみ計算
 実際にはシェルごとに見積もり(13)ガウス型基底に対する2電子積分Γ µν ,λσ =∫∫ dr1dr2φµ (r1 )φν (r1 )r φ (r2 )φσ (r2 )−1
12 λ 4重ループ(μ, ν, λ, σ)内で計算
 演算量: 形式的にO(N4) → スクリーニングでO(N2-3)
 MPIおよびOpenMP並列化
 計算量が一定でなく、スクリーニングも存在するため、ロードバランシングはそれほど簡単ではない

 各2電子積分の計算については、並列化不要iχ 縮約の存在: 計算が複雑化µ (r ) : 原始ガウス関数)
φµ (r=∑ cµ ( x − R ) ( y − R ) ( z − R ) exp ( −α µ r − R
Kµ

i

i =1

µ nx

µ ny

µ nz

x

y

z

i

µ 2

)
(14)

ガウス型基底に対する2電子積分Γ µν λσ =∫∫ dr dr φµ (r )φν (r )r φλ (r )φσ (r )
,

1

=

2

K µ , Kν , K λ , Kσ∑i , j , k ,l

1

1

−1
12

2

2

cµi cνj cλk cσl ∫∫ dr1dr2 χ µi (r1 ) χνj (r1 )r12−1 χ λk (r2 ) χσl (r2 ) 原始ガウス関数に対する積分: Rys求積法
 Kが大きい場合に計算量が大幅に[O(K4)]増加

 軌道角運動量量子数Lに応じて、expの中身は同じで方向だけが異なる関数をいくつも計算
 L=0 (s) → 1, L=1 (p) → 3, L=2 (d) → 6(5), L=4 (f) → 10(7)縮約と角運動量計算の演算順序を最適化して高速化できる余地あり(15)

新しい2電子積分計算アルゴリズムの開発
 2電子積分の随伴座標展開(ACE)表式
ABCD
ABCD
C
N
Γ λµ ,νξ =
{
}
H
∑ 4
3
4 λµνξ {N 3 }
{N3 }

H

ABCD
4 

AB{N3 }  S S

随伴座標部[O(K0)]
CD G 
i1

i2

i1i2

核部 [O(K4)]bA dAAa B cBB

dC bCCK : Gauss関数の縮約長cD a DD

1M A M B i1 2MC M D i2(1  2 )M i1 i2i  j k  h 





a
b
c
d




B
A  DC
1   2 
 
 
 

  ()s1 s2 



s
s







1
2

  1  2   1  2 s1s2

 核部に対して2つの漸化関係式(RR)を導出
 ACE水平漸化関係式(ACE-HRR)
 ACE垂直漸化関係式(ACE-VRR)

ACE-RR法

RRの計算はKのループの外側で実行!
(16)

2電子積分の計算コスト
K µ , Kν , K λ , Kσ

Γ µν ,λσ =∑i , j , k ,lcµi cνj cλk cσl ∫∫ dr1dr2 χ µi (r1 ) χνj (r1 )r12−1 χ λk (r2 ) χσl (r2 ) 浮動小数点演算(FLOP)数で評価
 FLOP = x K4 + y K2 + z (K一定の場合)例) (sp sp | sp sp ) タイプの2電子積分計算コスト

Algorithmxyz

ACE-RR (Kobayashi & Nakai)

155

774

4 548

ACE-b3k3 (Ishida)

349

572

4 282

Ishimura & Nagase

180

1 100

5 330

Ten-no

180

510

4 040

Pople & Hehre

220

2 300

4 000

Gill, Head-Gordon, & Pople

450

1 300

1 700

1 056

30

0

Dupuis, Rys, & King

昨今では、必ずしもFLOPが適切な指標とは言えない(17)

2電子積分の計算時間
 タキソール分子を計算した時の2電子積分計算にかかる時間[1] 基底関数: STO-KG (K = 1-6)
 Direct SCF (スクリーニングあり)

MethodTaxolTime [s]
K=1

K=2

K=3

K=4

K=5

K=6

ACE-RR

11.0

42.1

91.4

187.7

360.5

631.4

Pople-Hehre

13.0

47.4

111.5

237.7

463.1

814.0

Dupuis-Rys-King

10.0

96.4

376.1 1075.7 2462.2 4855.0
Pentium4/3.06 GHz (1 node)

Kが大きくなるほどACE-RRにより計算時間短縮[1] M. Katouda, M. Kobayashi, H. Nakai, and S. Nagase, J. Theor. Comput. Chem. 4, 139 (2005).
(18)

高速多重極展開法(FMM)の利用
 古典ポテンシャルでも用いられるFMMは、電荷分布に対して拡張可能[1] 系全体の空間を多段階のboxに分割 注目するboxからの距離に従ってboxの大きさを変化
 分割されたboxごとに多重極展開を行い、クーロン項評価
 交換項には利用できない
 が、絶縁体では指数関数的に寄与が減衰するため、打ち切りによる近似が可能[2][1] C.A. White and M. Head-Gordon, J. Chem. Phys. 101, 6593 (1994).
[2] E. Schwegler and M. Challacombe, J. Chem. Phys. 105, 2726 (1996).

(19)

SCFの構成要素(2): 一般化固有値問題
 SCF方程式: FC = SCε (一般化固有値問題)
 F: Fock行列 (一般に密行列) S: 重なり積分行列 (Sμν = ∫dr ϕμ(r) ϕν(r))

 Sに小さい固有値がある場合は、線形従属性を回避する必要あり
 全根が必要 SCFだけでよければ、占有軌道だけでも良いが、それでも全体の1/5程度は必要

既存の線形代数ライブラリを利用(20)

線形従属性を回避したコード SCF方程式: FC = SCε (一般化固有値問題)
 重なり積分Sを対角化: SU = Us (s: 対角行列)
 X = Us−1/2を用いて直交化
 固有値sが小さい部分を除去 (線形従属回避)

U × s−1/2

 F’ = XTFX の通常固有値問題 F’C’ = C’ε に帰着
 C = XC’ で元の固有ベクトルに逆変換

1: call calc_Fprime(F,X,Fpr) ;密行列積(blas3)
2: call dsyev(Fpr,Cpr,eps) or dsyevd ;(lapack)3: call dgemm(X,Cpr,C) ;密行列積(blas3)

行列積部分は簡単にMPI並列化可能(21)

SCFの構成要素(3): 密度汎関数の積分 Hartree-Fock法
 エネルギー: E = ½ Tr [D(F + Hcore)] ハミルトニアン(=フォック行列): F = Hcore + 2J − K Jμν = ½ Σλσ Dλσ Γμν,σλ , Kμν = ½ Σλσ Dλσ Γμλ,νσ 密度汎関数理論
 エネルギー: E = ½ Tr [D(2Hcore + 2J)] + Exc[ρ(r)] Exc = ∫dr Vxc[ρ(r), ∇ρ(r), …]

 ハミルトニアン: HKS = Hcore + 2J + Vxc
 (Vxc)μν = ∫dr ϕμ(r) Vxc ϕν(r)𝛿𝛿𝐸𝐸xc 𝑉𝑉xc =𝛿𝛿𝛿𝛿

数値積分が必要(22)

5

密度汎関数の空間積分
 原子中心の極座標グリッドを用いた求積
atom grid∫ drV (r) ≈ ∑ ∑ ω p (r )V (r )
xc

g

A

A

g

xc

g

g

 ωg: グリッドの重みOH グリッドの重なりによる多重カウントをH回避するため、分割関数pを導入[1]atom∑ p (r ) = 1
AgA 計算量: O(NA) [NA: 原子数]
 並列化は容易

1.0
2

3

4

5

k=1

0.8

0.6
0.4
0.2
0.0
-1.0

-0.6

-0.2

0.2

0.6

1.0

[1] A.D. Becke, J. Chem. Phys. 88, 2547 (1988).
(23)

SCFの構成要素(4): DIIS
 Direct inversion in the iterative subspace (DIIS) 必須の要素ではないが、繰り返し回数の削減に有効(HF計算時間 ∝ 繰り返し回数 なので重要)
 Fock行列を過去数回分の線形結合として予測n

Fn,DIIS= ∑ xi F

n

i

i =1

∑ x =1i =1i∆e
 予測に用いる条件: 誤差ベクトルe =

n

i
x
e
∑ i →0i =1

 (1) ei = Fi − Fi−1 (Anderson mixingと一致)
 (2) ei = FDS − SDF 0 −1−1 B11iTj Bij = e ∙e として   −1 Bn1−1  −1   −λ   −1 
B12  B1n   x1   0 
(lapack)を解く=          
Bn 2  Bnn   xn   0 (24)Post HF計算: MP2法の構成要素
 もっとも簡単なpost HF計算
occ vir∆EMP2 =∑∑

(ia | jb) [ 2(ia | jb) − (ib | ja ) ]εi + ε j − εa − εbi , j a ,b=
(ai | bj )Cµ Cν Cλ Cσ Γ µν λσ
∑
µν λσ
a

i

b

j

,

, , ,

 ボトルネック: 分子積分(ai|bj)の計算 [積分変換]
 演算量: 段階的に積和すればO(N5) メモリ量: すべてを一度に実行するにはO(N4)必要 μ, ν: 原子軌道(AO) i, j: 占有軌道(occ) a, b: 仮想(非占有)軌道(vir)

軌道の数:
AO > vir > occ(25)

MP2計算手続きの例: GAMESSの場合
 MP2計算コードの実装が4種類存在
 計算量はすべてO(N5) GAMESSの並列化はmessage passingのみ

N: 原子軌道数
O: 占有軌道数
V: 仮想軌道数

コード

ローカル
メモリ

グローバル
メモリ

スクラッチ
ディスク

SERIAL

O(N3)

-

-

DDI

O(N2)

O(N4)

-

IMS

O(NO2)-O(NVO2)RIMP2(近似MP2計算)
SERIAL, DDI, IMSをOpenMP化(26)

OpenMP版SERIAL MP2の擬似コード

MPI parallel
1: DO IBATCH=1, NBATCH
OpenMP parallel
2: DO μSH=1, NSHELL
3:
DO νSH=1, μSH
Hybrid parallel
4:
DO λSH=1, νSH
5:IF ([μSH,νSH,λSH].EQ.MYTASK) THEN ;(OpenMP)
6:
DO σSH=1, λSH
7:calculate gamma [μSH,νSH,λSH,σSH]8:
1st(occ) transform. [σ → I] for my I -> ローカルメモリ
9:
END DO
10:
END IF
Atomic演算
11:
END DO
12:
END DO
13: END DO
14: 2nd&3rd&4th transform. for my I ;(BLAS3)
15: evaluate energy for my I ;(OpenMP)
16: END DO
17: accumulate energy over MPI processes(27)MP2アルゴリズムにおけるAtomic演算 μ ≥ ν ≥ λ ≥ σを満たすAOのセット(μ, ν, λ, σ)に対して
 Γμν,λσ, Γμλ,νσ, Γμσ,νλに関する演算を実行

μ, ν, λ: スレッド並列

 (μν|λi) += Cσi Γμν,λσ (足しこみ演算) Γμν,λσ = Γμν,σλ = Γλσ,μν = Γλσ,νμ

スレッドセーフでない

1: (Loop over all (μ,ν,λ,σ) quartet)(同時メモリアクセスの可能性)
2:
Calculate gamma(μν,λσ)3:
DO I=MyOCCb, MyOCCf
4:!#OMP ATOMIC
5:
int1(μν,λ,I) += gamma(μν,λσ)*C(σ,I)
6:
int1(μν,σ,I) += gamma(μν,λσ)*C(λ,I)
7:
int1(λσ,μ,I) += gamma(μν,λσ)*C(ν,I)
8:
int1(λσ,ν,I) += gamma(μν,λσ)*C(μ,I)
9:
END DO
10:
Calculate gamma(μλ,νσ) ...
11:
Calculate gamma(μσ,νλ) ...
12: (End loop)(28)

OpenMP版SERIALコードの改良

MPI parallel
1: DO IBATCH=1, NBATCH
DOとIFを交換
OpenMP parallel
2: DO μSH=1, NSHELL
ループ長を延長3:
DO νSH=1, μSH
Hybrid parallel4:
IF ([μSH,νSH].EQ.MYTASK) THEN ;(OpenMP)
5:
DO λSH=1, NSHELL
6:
DO σSH=1, λSH
7:calculate gamma [μSH,νSH,λSH,σSH]8:
1st(occ) transform. [σ → i] for my I -> ローカルメモリ
9:
END DO
10:
END IF
Atomic演算なし!
11:
END DO
12:
END DO
13: END DO
14: 2nd&3rd&4th transform. for my I ;(BLAS3)
15: evaluate energy for my I ;(OpenMP)
16: END DO
17: accumulate energy over MPI processes(29)OpenMP版IMS MP2の擬似コード
1: DO μSH=1, NSHELL
2: IF (μSH.EQ.MYTASK) THEN ;(MPI parallel)
MPI parallel
3:
DO λSH=1, NSHELL
OpenMP parallel
4:
DO σSH=1, λSH
Hybrid parallel
5:!$OMP DO6:
DO νSH=1, NSHELL
7:
calculate gamma [μSH,νSH,λSH,σSH]
8:
END DO9:
1st&2nd(occ) transform. [νσ → IJ] ;(OpenMP)
10:
END DO
11:
END DO12:
3rd(vir) transform. [λ → B] ;(BLAS3) -> ディスク
13: END IF
14: END DO
15: 4th(vir) transform. [μ → A] for my IJ ;(BLAS3) <- ディスク
16: evaluate energy for my IJ ;(BLAS3)
17: accumulate energy over MPI processes(30)OpenMP版DDI MP2の擬似コード
1: DO μSH=1, NSHELL
2: DO νSH=1, μSH
3:
IF (μνSH.EQ.MYTASK) THEN ;(MPI parallel)
4:!$OMP DO
ループ長を延長して5:
DO λSH=1, NSHELL
atomic演算回避
6:
DO σSH=1, NSHELL
7:
calculate gamma [μSH,νSH,λSH,σSH]
MPI parallel8:
1st(occ) transform. [σ → J]
OpenMP parallel
9:
END DO
Hybrid parallel
10:
END DO11:
2nd(vir)&3rd(occ) transform. [νλ → IA] ;(OpenMP)-> グローバルメモリ
12:
END IF
13: END DO
14: END DO
15: 4th(vir) transform. for my IJ ;(BLAS3) <- グローバルメモリ
16: evaluate energy for my IJ ;(OpenMP)
17: accumulate energy over DDI processes(31)OpenMP並列MP2の効率
 計算時間のスレッド数依存性
 計算対象: ポリエンC30H32 (DC-MP2/6-31G)
 Intel Xeon X5650 x 2 (1 node)Wall-clock time [s]400IMS
DDI (atomic)
DDI (no atomic)
SERIAL (atomic)
SERIAL (no atomic)

300
200

 12スレッド利用時

SERIAL < IMS < DDI(MPI並列効率は考慮なし)
 Atomic演算を回避する

ことにより、大幅にパフォーマンス改善

100
0

0

2

4
6
8
10
Number of threads

12
(32)

Post HF計算: CI法の構成要素
occ vir

occ vir CI波動関数: Ψ CI = t0Φ 0 + ∑∑ t Φ + ∑∑ tijab Φ ijab + 
a
i

i

a

a
i

i , j a ,b𝑎𝑎

 Φ0 : HF配置関数, Φ𝑖𝑖 : i → aの励起配置関数, …
 変分的にtを決定: Ht = E0t

 Φ | Hˆ | Φ
0
0



0
H=

ab
ˆ
Φ

ij | H | Φ 0




0

Φ 0 | Hˆ | Φ cdkl

Φ ia | Hˆ | Φ ck

Φ ia | Hˆ | Φ cdkl

Φ ijab | Hˆ | Φ ck

Φ ijab | Hˆ | Φ cd
kl

 








 大規模対角化が必要
 必要な根の数は数本(33)疎行列の対角化: Davidson法
 試行ベクトルを用いた繰り返し計算
M

×

H

×

t

H’

M

試行ベクトルt†

M
全配置数

M

求根数

全配置数

 準Newton法に基づき、数状態の固有解のみ求根 Hをメモリに載せて対角化することを回避

 H’の対角化 → tのアップデート
 基底状態に対してはt0 = 1 (その他は0)が良い出発点

Hをスクラッチに載せる必要あり？
(34)

CI法: Knowles-Handyアルゴリズム
 試行ベクトルを用いた繰り返し計算
M

×

H

×

t

≡

σ

全配置数

試行ベクトルt†

全配置数

M

M

全配置数

 Hの行列要素: 分子積分[Γpq,rs, Hcorepq]の線形結合
 分子積分はスクラッチに保存[O(N4)] Hを保存せずにHt ≡ σを構築可能

要求メモリ量:

配置数×配置数 → 配置数 × M
 分子積分と配置に対する並列化が可能(35)

本日のまとめ(1) 量子化学計算は手法に応じて様々な計算技術が利用される HF, DFT: 2電子積分計算[O(N2-4)] と密行列対角化[O(N3)] Gauss型基底の2電子積分計算は特に特殊な演算で、さまざまな計算アルゴリズムが開発
 密行列対角化は(ほぼ)全根が必要
 MP2, CC: 積分変換[O(N5)]、テンソル縮約
 積分変換は2電子積分計算+縮約を含む
 DGEMM等を用いた実装が可能

 CI: 積分変換、大規模疎行列対角化
 Davidson法のように全根を求めない疎行列対角化(36)

本日のまとめ(2) 量子化学計算の効率化における注意点
 演算量の削減
 対称性の高いテンソルの再利用
 高並列化を考える場合には副作用も FLOP数による見積もりを鵜呑みにする必要はないが有用 SIMD化、キャッシュミスの削減も重要

 繰り返し計算の収束性の向上
 計算時間は(1サイクルの時間)×(繰り返し回数)

 基礎的な演算(行列積、密行列対角化等)はライブラリコール
 並列化
 OpenMPではatomic演算の回避が性能に重要
 データ分散も考えたMPI並列化(37)