SX Aurora TSUBASAでは、VH(ベクトルホスト)とVE(ベクトルエンジン)を同時に利用してMPIプログラムを実行することができます。VHとVEのアーキテクチャは全く違いますので、基本的には、異なるデータに対して異なるプログラムをそれぞれVHとVEで実行するMPMD(Multi-Program, Multi-Data)方式での実行が原則となります。すなわち、VH側、VE側で動作するMPIのプログラムをそれぞれ作成する必要があります。SQUIDでも上記の実行方法をサポートしており、ジョブスケジューラNQSVを通じて、お試しいただけます。
以下に、簡単なプログラミング例を示します。
サンプル1
このプログラムでは、VH側でtestb.fを動作させ、VE側でtesta.fを動作させます。
なお、これらのプログラムは、
testa.f: 1から10000までの総和を算出します。
testb.f: 10,0001から20,000までの総和を算出します。
(注)簡単化のため、それぞれのプログラムは2プロセス固定での並列化にしています。
コンパイルはmpinfort、mpinccとベクトルエンジン用のコンパイラを使用します。コンパイルオプションに-vhを与えますと、コンパイラはgcc/gfortranに切り替わり、ベクトルホスト用のオブジェクトを作成します。実行時もベクトルホスト用のオブジェクトには-vhを指定します。以下はコンパイル例と、実行スクリプト例です。
testa.fのコンパイル
mpinfort -O3 -o a.out testa.f
testb.fのコンパイル
mpinfort -O3 -vh -o b.out testb.f
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/sh #PBS --group=XXXX #PBS -q SQUID #PBS -T necmpi #PBS -b 1 #PBS -l cpunum_job=2 #PBS -l elapstim_req=00:10:00 #PBS -l coresz_prc=10 #PBS --venum-lhost=8 #PBS -N io_test #PBS -v VE_PROGINF="detail" #PBS -v MPIPROGINF="detail" #PBS -v NMPI_SEPSELECT="3" #PBS -v MSEP="/opt/nec/ve/bin/mpisep.sh" #PBS -v VH="-vh" cd $PBS_O_WORKDIR module load BaseVEC mpirun -v -nn 1 -np 2 ${MSEP} ./a.out : \ -nn 1 ${VH} -np 2 ${MSEP} ./b.out |
サンプル2
このプログラムでは、VH側でtest1.fを動作させ、VE側でtest2.fを動作させます。
なお、これらのプログラムは、
test1.f: n=8192の配列aをallocateし、乱数を生成する。rank1~rankn(nprocs-1)に分割した配列aのデータを転送する。rank1~rankn(nprocs-1)から分割した配列baのデータを受信する。配列aとbを比較する。
test2.f: rank1~rankn(nprocs-1)の処理。rank0から配列cにデータを受信し、2.0倍してrank0に送信する。8192を割り切れるプロセス数での実行を想定。
コンパイルはmpinfort、mpinccとベクトルエンジン用のコンパイラを使用します。コンパイルオプションに-vhを与えますと、コンパイラはgcc/gfortranに切り替わり、ベクトルホスト用のオブジェクトを作成します。実行時もベクトルホスト用のオブジェクトには-vhを指定します。以下はコンパイル例と、実行スクリプト例です。
#!/bin/bash
module load BaseVEC/2021
mpinfort -vh -o test1.lm test1.f
mpinfort -o test2.lm test2.f
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash #PBS --group=(グループ名を指定) #PBS -q SQUID #PBS -T necmpi #PBS -N test #PBS -l cpunum_job=2 #PBS -l elapstim_req=00:01:00 #PBS -l coresz_prc=10 #PBS --venode=4 cd $PBS_O_WORKDIR module load BaseVEC/2021 mpirun -vh -nn 1 -np 1 ./test1.lm : -nn 1 -np 4 ./test2.lm |