物理学特殊講義I（MC向け集中）AMR編
松本倫明（法政大学人間環境学部）

AMRとは• Adaptive	  Mesh	   Refinement	  (AMR)– 適合格子細分化法– 解適合格子(Solution	  Adaptive	  Mesh)• 骨子– 高解像度が必要な領域を高解像度に。
– それ以外を低解像度に。
– 「高解像度が必要な領域」を動的に変更する。
– トータルで格子点数を節約する。
– 計算機性能の割に、高解像なシミュレーションが可能。
例：256^3	  -­‐>	  (256*1024)^3=(1.80144e+16)^3

AMRの模式図（例）
高解像度が必要な領域を高解像度に連星系の形成★

星の運動とともに格子を動的に更新する。

★

AMRを使う目的•

自己重力による構造形成：– 形成される天体を分解したい。
– 空間スケール∝密度－1/2•

惑星間空間のプラズマ：– カレントシートを分解したい。

•超新星爆発：– 燃焼波（デトネーション・デフラグレーション）を分解したい。

•乱流：– パワースペクトルを長いレンジで書きたい。

••

つまり、ダイナミックレンジが欲しい。
格子点数の割りに高解像度が欲しい。

なぜAMRか
ハードウェア vs ソフトウェア
ソフトウェア(AMR)は性能を桁で向上。
100～1,000倍

ムーアの法則
性能は1.5	  – 2	  年で2倍古い資料でごめんなさいスーパーコンピュータの性能の推移 日立製作所2004

AMRコードを作るか作らないか作る場合•

利点： 新しい物理の導入が容易。
新しい解析手法の導入が容易。

•欠点： 膨大なテスト計算の必要性。
開発時間の必要性•

開発期間： 流体（MHD）を「書く」だけなら1カ月以内。
– 松本は流体部分を2週間で集中的に書いた。
– 自己重力部分は大変だった。

•

効率よく開発するには– 一様格子コードでCFDを勉強してからがお勧め（総研大の講義を活用など）。
– 流体などの既存のソルバを流用する。
– はじめから並列版を作る。

AMRコードを作るか作らないか作らない場合•

既存の公開コードを利用する。
現在の主流になりつつある。シミュレーションコードの複雑化が原因。

•利点： 手軽に利用できる。開発の不要（テスト計算は必要）。

•欠点： 改造の困難さ。新しい物理を導入場合。
科学計算のコードは汚い！
（一般のソフトウェアと異なる点）。

•

アイディア勝負な人は作らない方が良いと思う。

•

開発者を共同研究者にして、いろいろ頼むのが吉か？
ブレイクスルーな仕事では、開発者が共同研究者であることが多い。

コード開発史Now	  developing	  SFUMATO	  (AMR)
MHD,	  Seflgravity

sink	  particle,	  etc.
(Matsumoto)(Matsumoto 2007)

Resistivity	  Some	  NG	  codes	  were	  ported	   to	  AMR.

(Machida,	   Inutsuka,	  &	  Matsumoto 2006)

MHD	  (Machida,	   Tomisaka,	  &	  Matsumoto 2004)

Hydrodynamics
Selfgravity	  (Matsumoto &	  Hanawa 2003)

Hydrodynamics,	  Seflgravity(Matsumoto &	  Hanawa 1999)

AMRコードとその他のコードの比較
コード種別

3dhd

Nested	  grid

AMR

行数

3,524
（自動生成後6,994)

14,037

31,637

言語

Fortran77	  +	  Perl
コード自動生成

Fortran77	  +	  自作cpp

Fortran90

並列化

VPP Fortran
指示行の挿入なし/自動並列
指示行の挿入MPI並列バージョン-­‐2.123.6

実装機能

流体, 自己重力HD, MHD,	  registivity,自己重力HD,	  MHD,	  自己重力,sink	  粒子分類

全てのAMRは
この論文起源AMRの分類A)

Level	  =	  0	  ～ 2

パッチ型ブロック構造格子– パッチ指向– 最初のAMR	  	  – Berger	  &	  Oliger 1984,	  – Berger	  &	  Colella 1989

B)

八分木型ブロック構造格子– 八分木構造C)(A) パッチ型
ブロック構造格子(B)	  八分木型
ブロック構造格子

セル分割型格子– 八分木構造

D) 三角形非構造格子– あまり用いられていない。
– 機体に沿った境界条件に有利。
(C)	  セル分割型格子(D)	  三角形非構造格子

AMRの分類A)

パッチ型ブロック構造格子––––B)

セル数は少なめ。
ブロック配置のアルゴリズムが複雑。
袖のセルが少なく、効率が良い。
メモリを動的に使う。

八分木型ブロック構造格子–––––C)

Level	  =	  0	  ～ 2

セル数多め。
ブロック配置のアルゴリズムが単純。
袖のセルが多くい。
メモリを静的に使う。
キャッシュの有効活用。

(A) パッチ型
ブロック構造格子(B)	  八分木型
ブロック構造格子

セル分割型格子– セル数は必要最低限。
– オーバーヘッドが大きいか？
– メモリを静的に使う。

(C)	  セル分割型格子(D)	  三角形非構造格子

天体物理学における主なAMR（古いかも？）
現在では、MHD  と 自己重力は多くのAMRに実装されている。

ほかにも沢山。国内にも下記以外に２コード存在。
Code  nameAuthor(s)Main  targets

Grid  type

LicenseMHD

Self-­
gravity

Dark  Matter

Radiation  transfer

ORION

R.  Klein

Star  formation

A

Limited

Y

Y

N

Y

Enzo

M.  Norman

Cosmology

A

open

Y

Y

Y

LimitedFLASH

ASC/U-­Chicago

Any

B

open

Y

Y

LimitedLimited

BATS-­R-­US

K.  G.  Powell

Space  weather

B?

Y

Y

N

N

NIRVANA

U.  Ziegler

AnyB(A) パッチ型
openY
ブロック構造格子

RIEMANND.  Balsara

ISM

A

LimitedYY

NN

RAMSES

R.  Teyssier

Cosmology

Copen

YY

Y

LimitedCASTRO

A.  S.  Almgren
CCSE.LBL

Supernovae

A

Limited

NY

NY

PLUTO

A.  Mignone

AnyA

open

YNN

NAthenaJ.  Stone

Any

Coming  seen

open

YComing  soon

SFUMATOT.  MatsumotoStar  formation

B

LimitedYYY(B)  八分木型
N
N
ブロック構造格子(C)  セル分割型格子 (D)  三角形非構造格子

N

N

14

What	  is	  Sfumato
Self-­‐gravitational	  Fluid-­‐dynamics	  Utilizing	  Mesh	  Adaptive	  Technique	  with	  Oct-­‐tree.	  
•••••Sfumato は本来、絵画の技法。レオナルド・ダ・ビンチ (1452−1519)	  によって完成された。
その後、ルネサンス－バロック期の多くの画家に用いられた。
モチーフの輪郭をぼかし、空気を表現。
我々のAMRコードもガス(空気)を表現。
Matsumotoのアナグラムではない。
Mona	  Lisa,	  Leonardo	   da	  Vinci	  ( 1503–1507)	  TypeB

二重マッハ反射問題みるタイプ別の解
密度分布

密度分布ORION?

TypeA

Type
B

SFUMATO

Type
B
密度分布

ノード（コア）分布0,  1,  2,  3
SFUMATO
Matsumoto  07
17最近の動向AMRは当たり前の時代になった。
• AMRが特別ではなくなってきた。
– メッシュ法自己重力系では必須• 方法論– 新しい物理モデルで勝負する人– アイディアで勝負する人

乱流コアでの多重星形成
ORION:	  流体+自己重力+輻射

Type
A

Krumholz,	  Klein,	  &	  McKee	  (2007)

Enzo (M.	  Norman)
Block-­‐structured	  grid	  (patch-­‐oriented	  type)First	  star	  formation	   (Abel	   et	  al.	   2003)

Gas

Dark	  matter

TypeA

First	  star	  formation	  by	  Enzo
Abel	  et	  al.	  (2003)
ブロックの分布（一部）6	  kpc	  ⇒ 100	  AU	  (1,2000倍)

Type
A

Type
BATS-­‐R-­‐US	  (K.	  G.	  Powell)
Block-­‐structured	  grid	  (self-­‐similar	  oct-­‐tree	  type) B
Space	   Weather

Type
Coronal	  Mass	  Ejection	  by	  BAT-­‐R-­‐US
B
Manchester	  IV	  et	  al.	  (2004)

太陽地球

FLASH	  (ASC,	  U-­‐Chicago)
Block-­‐structured	  grid	   (self-­‐similar	  oct-­‐tree	   type)
Rayleigh-­‐Taylor	   Instability8x8	  cells

TypeB

Type
タイプIa超新星爆発（FLASH）
B

色：反応率と密度

Jordan	  et	  al.,	  2007 astro-­‐ph/0703573

SFUMATOによる乱流星形成シミュレーション
HD	  +	  自己重力Type
B

AMRは乱流が不得意であるという
「定説」

細分化
結合化!2!
v は保存するが、 | v | は保存しない。
全エネルギー (EK+Eth)	  は保存する。
運動エネルギー(EK)が熱エネルギー(Eth)になる。

AMRコード：Enzo
解法：
PPM
細分化比 ： 4

TypeA

AMRコード：Enzo
解法：
PPM
細分化比 ： 4

超音速乱流ではOK
亜音速乱流は微妙

TypeA

密度のPDF	  (確率分布関数)
AMRと一様格子の比較

この辺が改善大変満足な結果

TypeA

Kritsuk et	  al.	  2006

AMRはちゃんと作れば「波は反射しない」という「誤解」
U

細かいセル

波を表現可能粗いセル波を表現不可能x

保存形式で解いているけど波のエネルギーはどこへ？
→ 反射するしかないConvergence	  test	  for	  MHD	  (1/2)
Alfven	  wave

紙面に垂直なvとBが振動する
sin波

BkType
しかし、波は境界で反射する。
B

Fast	  wave	  の反射実験。

AMR	  h	  =	  1/32,	  1/16

一様格子h	  =	  1/16

SFUMATO

波は境界で反射する。
AMRでは減衰が少ない。

AMR	  h	  =	  1/64,	  1/32

一様格子h	  =	  1/32

TypeB
SFUMATO

格子が細かくなると反射は少なくなる。

AMR	  h	  =	  1/128,	  1/64

一様格子h	  =	  1/64

TypeB
SFUMATO

格子が細かくなると、ほとんど反射は目視できない。

TypeB

SFUMATOAMR	  h	  =	  1/256,	  1/128

一様格子h	  =	  1/128

反射してもスキームの精度を達成する。
２次精度 @	  h	  <<	  1SFUMATO
１次精度 @	  h～110-­41

L1ノルム
error  of L   norm

10-­5(a)  Left  side
uniform  grid
AMR  gridslow
fastAlfven
entropy∝h10-­610-­7

黒：一様格子赤：AMR∝ h2
10-­80.001

0.010

h
セル幅(level=0)base

0.100TypeB

解法

AMR上の解法•ブロック構造格子– ブロック自体は普通の一様格子。
– 問題は、粗細（親子）ブロックの関係（時間的・空間的）•流体・MHD	  （双曲型偏微分方程式）∂U ∂F ∂G ∂H+++=S∂t ∂x ∂y ∂z– 基本コンセプトは Berger	  &	  Colella (1989)	  に尽きる。
– MHDでは、∇・B の処方箋に複数の流儀がある。
– TVD,	  Roe法,	  predictor-­‐corrector	  法 (時間空間2次精度)•自己重力（楕円型偏微分方程式）∇Φ = 4πGρ– 解像度が異なる格子が混在する下で、解を求める。
全てのグリッドを同時に更新する反復法が必要。
– お勧め参考書「MULTIGRID」 Trottenberg et	  al.	  (2001)– Multigrid	  法 (FMG-­‐cycle,	  V-­‐cycle)

AMRが一様格子と異なる点• 空間の分割方法（格子の配置）• 時間の分割方法（時間ステップ）• 細かい格子と粗い格子の境界の扱い

AMRの分類A)

Level	  =	  0	  ～ 2ブロック構造格子– パッチ指向– 最初のAMR	  	  – Berger	  &	  Oliger 1984,	  – Berger	  &	  Colella 1989

B)

自己相似型ブロック構造格子– 八分木構造C)(A)	   ブロック構造格子(B)	  自己相似型ブロック構造格子(C)	  直交非構造格子(D)	  三角形非構造格子

直交非構造格子– 八分木構造

D) 三角形非構造格子– あまり用いられていない。
– 機体に沿った境界条件に有利。

Type
パッチ指向ブロック構造格子 A
Level	  2ブロックの大きさは様々（可変長）。

Level	  1同じレベルのブロックが重なってもOK。

Level	  0AMROC	  細分化比=	  2,	  4,	  8…

自己相似型ブロック構造格子
Level	  0Level	  1TypeBブロックの大きさは固定（固定長）。
八分木によるデータ管理。
同じレベルのブロックは重ならない。

SFUMATO

細分比 =	  2

Block	   Structure	  (BAT-­‐R-­‐US)
Self-­‐similar	  oct tree	  type

Each block is NxNxN

TypeB

Blocks communicate with neighbors
through “ghost” cells

双曲型方程式の解法AMRにおける時間発展•

Adaptive	   time	  step
– 親のタイムステップ≧子のタイムステップ– C.f.,	  Berger	  &	  Coleｌla	  (1989)– 自己重力なし•Synchronous	  time	  step
– 全てのグリッドレベルが同じタイムステップを持つ。
– C.f.,	  FLASH– 自己重力系、輻射流体、（長距離相互作用）

CFL条件

ΔxΔt <v

適合時間ステップ(adaptive	  time	  step)
時間も適合細分化

粗細適合時間ステップ(adaptive	  time	  step)
オプション
Adaptive	  time	  step子グリッドの時間刻み Δt子 = Δt親/2n (n=0, 1, 2, ...)
子グリッドがCFL条件を破るのを防ぐ子グリッドが律儀に親のCFL条件を守る制限を解除する。

同期時間ステップ(synchronous	  time	  step)
時間を適合細分化しない
時刻 t
レベル0

1

レベル12

レベル2

3

Δt
ΔtΔt

同期粗細同期Adaptive	  vs synchronous	  time	  steps
Adaptive	  time	  step
もっとも細かいグリッドレベルが1ステップ進むためのコスト
親のグリッドレベルは1/2ステップ
祖父のグリッドレベルは1/4ステップ
l max
1 1
1
1
1 + + + ! + l max = ∑ l ≈ 22 42
l =0 2(lmax >> 1)

トータルで2倍コストがかかる
Synchronous	  time	  step

もっとも細かいグリッドレベルが1ステップ進むためのコスト
親のグリッドレベルも1ステップ
祖父のグリッドレベルの1ステップ
l max

1 + 1 + 1 + ! + 1 = ∑1 = lmax + 1 ≈ lmax

(lmax >> 1)

l =0

トータルで段数倍コストがかかる
特別な理由がない限り、adaptive	  time	  step	  を採用するべき。
特別な理由の例：自己重力、輻射細分化のアルゴリズム
1. 細分化するセルの探査
a.

b.
c.

レベル l に属するセルを順に探査し、細分化条件を満たすセルに印をつける。
印がついたセルの周囲のセルにも印をつける。
レベル l + 2 にブロックと重なるセルにも印をつける。

2. ブロック配置の決定a.

印がついたセルを含むようにレベル l + 1 のブロックを作る

3. ブロックの生成a.
b.

当該セルがすでに細分化されていれば、その値をコピーする。
新たに細分化する場合には、レベル l の値を内挿する。

4. 古いブロックの破棄
5. 手順1～4を同期しているレベルで行う。
a.

粗いレベルから細かいレベルの順に繰り返す。

TypeA

細分化のアルゴリズム
レベル０を細分化してレベル1を生成
レベル２

レベル１

レベル 0	  1.	   レベル0のセルに注目する。

TypeA

Type1-­‐a.	  レベル0の細分化。
レベル0のセルに対して細分化条件を評価する。 A

Type1-­‐b.	  レベル0の細分化。
A
周囲の１～２セルにも印をつける。マージンの確保。

1-­‐c.	  レベル0の細分化。
レベル2と重なるセルにも印をつける。

TypeA

2.	  レベル１のブロック配置を決定。
ここはいろいろな流儀がある。

TypeA

3-­‐a.	  ブロックの生成。
既存のセルの値をコピー。

TypeA

3-­‐b.	  ブロックの生成。
レベル０から内挿。

TypeA

4.	  古いブロックを破棄して完成。

TypeA

細分化条件
どこを細分化するべきか？
• 何を見たいかに依存する。
• 打切り誤差が閾値を超える部分を細分化 (Berger	   &	  Colella 1989)• 物理量の2階微分が閾値を超える部分を細分化(Flash	  など)
• 星形成分野の業界標準– Jeans	  条件： Jeans	  波長を4メッシュ以上で分解する(Truelove	  et	  al.	  )ブロックの決定方法
パッチ指向AMRには様々な流儀が存在する。
たとえば、

TypeA

ブロックの決定方法
印がついたセルをすべて覆うブロックを考える

TypeA

ブロックの決定方法

TypeAセル数のヒストグラムを書き、最小値部分でブロックを分割する。

ヒストグラム最小ブロックの決定方法
余分な部分を取り除く

TypeA

ブロックの決定方法

TypeA

別の方向からセル数のヒストグラムを書き、分割する。
ヒストグラム

最小値

ブロックの決定方法
余白を取り除く。

こんなことを繰り返してゆく。
この操作を繰り返すほど、ブロックは小さくなる。
ブロックの最小サイズを決めておこう。

TypeAとっても面倒ですType
Bを採用しよう！

双曲型方程式の解法
細粗ブロックの境界•

粗いブロックと接する細かいブロック– 粗いブロックを時間的に空間的に補間し、細かいブロックの境界条件にセット。

•細かいブロックと接する粗いブロック– 細かいブロックの数値流速を使って、時間発展。

細粗境界での数値流束の保存

HHHFΔS
Δt=数値流束保存∑hhhが成立するように、
FΔSΔt∑

sub −cycle surface

細かいブロックと隣接した粗いセルを補正する

UH , new⎞1 ⎛hhhHHH⎜=U −F ΔS Δt − F ΔS Δt ⎟⎟∑H ⎜ ∑ΔV ⎝ sub−cycle surface⎠H時間推進の方法
1.

時間を進めるべきレベルを探す。
a.

2.

3.

もっとも時間が進んでいないレベルのうち、もっとも粗いレベル。

4.

5.

通常の方法で時間推進する。
a.

親レベルと同期した場合：

時間刻み幅dtを求める。

a.

a.
b.

b.

レベル0はクーラン条件から。
それ以外は親のdtの半分境界条件の設定a.
b.
c.

兄弟ブロックからコピー。
親ブロックから時間・空間的に内挿。
ユーザの境界条件。

6.

たとえば、predictor-­‐corrector	  法など。

自分の解を親セルに代入する。
隣接する親セルの値を修正する（数値流束保存）。

同期している全てのレベルを用いて細分化をする。
lsync ～ lmax − 1 を細分化して、lsync + 1 ～ lmax を生成する。
lsync =	   同期している最粗レベル

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

初期t

2次精度物理量コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

親：予測ステップt

2次精度物理量
1次精度物理量

1次精度数値流束

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

親：修正ステップt
保存

2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束
click

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：予測ステップt子の境界条件2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：修正ステップt子の境界条件2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束
click

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：修正ステップt
保存

2次精度物理量2次精度数値流束

1次精度物理量

1次精度数値流束
click

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：予測ステップ（2回目）
t子の境界条件2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：予測ステップ（2回目）
t

2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：修正ステップ（2回目）
t子の境界条件2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束
click

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子：修正ステップ（2回目）
t

保存

2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束
click

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

親子：境界で数値流束保存t
ブロック境界のセルを更新

2次精度物理量

2次精度数値流束1次精度物理量

1次精度数値流束

コードの詳細： 流体部分
数値流束補正・マルチタイムステップ

子⇒親：Restrictiont

2次精度物理量

2次精度数値流束

1次精度物理量

1次精度数値流束

Type
B

実装
ブロックの八分木構造
物理空間

親

親のID×1
子供のID×8
隣のID×6
グリッドレベル
ブロックの位置(i,j,k)

ID=69子891011

セル Nx×Ny×Nz 個

メモリ空間
567

フラットな構造
8910111213

14151617

並列化の方法• Block	  structured	  gridの場合– ブロックをノードに割りつける。
– 通信量を少なくするために• 近所のブロックを同じノードに割り付ける。
• 近所のブロックを近所のノードに割りつける。

• それ以外の場合– よく知りません。

TypeBノード

並列化
良くない方法

82ブロック=	  64	  ブロック
=13	  ブロック/ノード×5ノード-­‐1ブロック

12345678910111213141516171819202122232425262728293031323334353637383940

4142

43444546474849505152535455

565758596061626364

TypeBノード

並列化
良くない方法

82ブロック=	  64	  ブロック
=13	  ブロック/ノード×5ノード-­‐1ブロック

123456789101112131415161718192021222324252627282930

313233

3435

3637

38

3940

4142

43

4445

46

47

48

4950

5152535455

5657585960

61626364

TypeB

同じノードに割り付けられるブロックが細長く分布。
通信量は多いブロック数・ノード数が多くなると、不利になる。
泣き別れのブロックなど。

ノード

並列化
良くない方法

82ブロック=	  64	  ブロック
=13	  ブロック/ノード×5ノード-­‐1ブロック

123456789101112131415161718192021222324252627282930

3132

33

3435

3637

38

3940

41

42

43

44

45

46

47

48

49

50

51

5253

54

55

56

57

58

59

60

6162

6364

Type
B

Hillbert 空間充填曲線
によるオーダリング

なるべく近くを通る
一筆書き

ノード

並列化
良い方法

82ブロック=	  64	  ブロック
=13	  ブロック/ノード×5ノード-­‐1ブロック

1

2

3

45

678

9

10111213

14151617181920

21

22232425

262728

2930

3132

33

3435

3637383940414243444546

4748495051525354555657

5859

60

61626364

TypeB

同じノードに割り付けられるブロックがコンパク
トに分布。
通信量は少ない。

ノード

並列化
良い方法

82ブロック=	  64	  ブロック
=13	  ブロック/ノード×5ノード-­‐1ブロック2223262738

3942432124252837

40

41

44

201930293635

4645

17183132

3334

47

48

16131211545352

49

151491055

56

51

50

23875857

6263

145659

60

6164

Type
B

並列化
グリッドレベル横断

Hillbert 空間充填曲線
によるオーダリング

なるべく近くを通る
一筆書き

ノード

=	  43	  ブロック
=	  8	  ブロック/ノード×5ノード+3ブロック

123456789101112131415161718192023242526272831325354555661626364

Type
B

=	  43	  ブロック
=	  8	  ブロック/ノード×5ノード+3ブロック

並列化
グリッドレベル横断

Hillbert 空間充填曲線
によるオーダリング

1011141523242728

912131622252629

8718173130

56192032

33

4
なるべく近くを通る
一筆書き

ノード

12132353437364142383940

43

Type
B

3次元でも同様

2次元のHillbert 空間充填曲線

3次元のHillbert 空間充填曲線

ブロックのオーダリングまとめ• Hillbert空間充填曲線によるオーダリングは、面倒そうですが、意外に簡単な工夫です。
• グリッドレベルごとに行う。
– Adaptive	  time	  step• グリッドレベルを横断して行う。
– Synchronous	  time	  step

Type
B

Type
B

袖の転送
ノード間をまとめて転送する
ノード１

送信ノード

受信ノード

荷造り

荷ほどき

ノード２

バッファ
ノード1→2便

利点：
・ 通信回数を減らす。
性能は通信量ではなく通信回数で決まる。
・ MPI通信タグの枯渇を回避する。
ブロックが個別に通信するとタグ数が上限を超える。

おしまい