図5.6:
我々のアルゴリズムではD(i,j)は図5.6に書くような形で定めて いる. すなわち, 各プロセッサに同じ数だけの(i,j)の組が割り当てられる. そして,
とする. すなわち, を書き込むプロセッサと, を求める プロセッサを同一にする. これは,
となることから非常に自然なやり方であり, こうすることで, 求まった の, への書き込みがローカルになることが保証される. 一方で を求めるために必要な, と の読み出しはほと んど全てリモートである. つまり, をおくプロセッサを決めたら, 後は, そのプロセッサが, を求めるのに必要な全てのデータ ( と )を自分の手元に取り寄せて計算する, というのがこの データ/タスク配置で現れる通信パターンになる. 逆に, 読み出しをローカル に行なうということも考えられるが, このデータ配置のもとでは,ある を求めるのに, と の両方の読み出しが常にロー カルになることを保証することはできない. 読み出しをローカルにする, した がって書き込みをリモートに行なうデータ配置は, PAX [5] において行なわれており, 5.6.8節で比較 する.
なお, D(i,j)に関して, 各プロセッサに同じ数だけの(i,j)の組を割り当 てるだけであれば, 何も図5.6のようにする必要はない. 図5.6 のようにcyclicに, しかも三角形の頂点から底辺に向かって cyclicに割り当てるのは, 頂点に近い部分は, j - iの値が大きく, したがっ て処理の量(割り当てられたC(i, k, j)の数)が多い)ため, それらの間で C(i,k,j)が等しくなるのを避けるためである.