SX Aurora TSUBASAでは、VH(ベクトルホスト)とVE(ベクトルエンジン)を同時に利用してMPIプログラムを実行することができます。VHとVEのアーキテクチャは全く違いますので、基本的には、異なるデータに対して異なるプログラムをそれぞれVHとVEで実行するMPMD(Multi-Program, Multi-Data)方式での実行が原則となります。すなわち、VH側、VE側で動作するMPIのプログラムをそれぞれ作成する必要があります。SQUIDでも上記の実行方法をサポートしており、ジョブスケジューラNQSVを通じて、お試しいただけます。
なお、SQUIDのVHはAMD EPYC 7402P (2.8 GHz 24コア) を1基搭載しておりますが、VEの制御に1コアを使用するため、VH上の計算には16コアのみご利用いただけます。
 
以下に、簡単なプログラミング例を示します。
 

サンプル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

 

サンプル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