2023.06.26

実行したジョブの情報(経過時間やメモリ使用量)を取得したい

SQUIDでは、acstatコマンドを使って過去に実行したジョブの経過時間を取得可能です。メモリ使用量については取得できませんので、以下のお問い合わせフォームからご連絡くださいませ。
OCTOPUSについては、経過時間・メモリ使用量ともに取得できません。同じく、以下のお問い合わせフォームからご連絡くださいませ。
 
お問い合わせフォーム

2022.12.09

SQUIDにMPIを独自にインストールして利用することは可能ですか?

OpenMPIについては独自にインストールしてご利用することが可能です。

MPIのパスを記載したmoduleファイルを作成してください。

ジョブスクリプトの中で以下のようにmoduleファイル指定してください。

2022.10.24

ONION-objectで他のユーザとバケットを共有したい

比較的簡単に実施できる方法を2点ご紹介いたします。
ブラウザで共有したファイルを確認・操作いただく場合は、ONION-fileを併用する(1)の手順となります。
S3コマンドで共有したファイルを確認・操作いただく場合は(2)の手順となります。(1)と(2)は併用可能です。
 

(1)ONION-objectとONION-fileを組み合わせて共有する場合

ONION-objectのバケットをONION-fileで連携し、アクセス用のURLを発行して共有します。
 

    1. ONION-objectにて共有するバケットを作成してください。手順はこちらをご参照ください。
    2. ONION-fileにログインし、ONION-objectで作成したバケットを連携してください。手順はこちらをご参照ください。※ONION-fileへアクセスするアカウントは、スパコンの利用者番号です。連携時にアクセスキーが必要になります。こちらの手順で作成してください。
    3. 連携したバケットにてファイル共有機能を使用し、共有用のURLを発行してください。手順はこちらをご参照ください。URLからダウンロードやアップロードが可能です。

 

(2)ONION-objectだけで共有する場合

ONION-objectのバケットに対して任意のグループ/アカウントにアクセス権を付与します。
 

    1. ONION-objectにて、共有相手のアカウントを発行可能してください。手順はこちらをご参照ください。その後、共有するバケットを作成してください。手順はこちらをご参照ください。 
    2. バケットのアクセス権を設定します。バケット名右側のプロパティを選択→個別アクセス権→「+新規追加」を選択し、グループ・ユーザー欄に、共有相手のユーザアカウントを指定します。書式はGroup|Userといったように、|で区切ります。(例えば、グループがGROUP-123でアカウント名がUSER-456でしたらGROUP-123|USER-456と記載してください)
      必要に応じて、読み出し可能/書き出し可能のチェックボックスにチェックを入れてください。アクセス権を付与したユーザからバケットが見れるようになります。

      ただし、共有相手側のONION-object管理画面には、共有したバケットは表示されず、自分自身のバケットしか見れません。基本的に、共有相手側はS3コマンドで確認いただくことになります。S3コマンドの操作はこちらをご参照ください。
2022.10.13

次のエラーの対処方法を教えてほしい。Runtime Error: Cannot allocate memory for environment variable VE_FORT_UFMTENDIAN.

本エラーは、書式なしの入出力文の並びに配列が指定されており、その配列サイズが大きい場合に発生するエラーです。
以下のコンパイラオプション、実行時環境変数を指定して実行いただくことで特定可能です。
★のように、エラーの出たファイルと行数が表示されます。

例)
$ nfort main.f90 -g -traceback=verbose
$ export VE_TRACEBACK=VERBOSE
$ ./a.out
Runtime Error: Cannot allocate memory for environment variable VE_FORT_UFMTENDIAN.
Program terminated by fatal error
[ 0] 0x600c00a58910 ? ?:?
[ 1] 0x600c00a51b38 ? ?:?
[ 2] 0x600c00cd4c78 ? ?:?
[ 3] 0x60000001f850 MAIN main.f90:28 ★
[ 4] 0x60000001fc80 ? ?:?
[ 5] 0x600c02a407a8 ? ?:?
[ 6] 0x600000002d00 ? ?:?

2022.10.13

SQUIDでwandbを使用したい

wandbについてはpipコマンドにてインストール可能です。

pip install wandb
wandb login "XXXX"

 
SQUIDでは原則計算ノードからのインターネットアクセスを許可しておりませんが、wandbに限定して許可しています。
以下のようにジョブスクリプトを記述してください。

#!/bin/bash
#PBS -q SQUID
#PBS --group=[グループ名]
#PBS -l elapstim_req=1:00:00
cd $PBS_O_WORKDIR
export http_proxy="http://ibgw1f-ib0:3128"
export https_proxy="https://ibgw1f-ib0:3128"
python test.py

 
requests-2.24を使用してください。2.26等のバージョンについては、SQUIDで正常に動作しません。

2022.01.18

Intel MPIで ppn, rr, prehostオプションを使用したい

SQUIDでは環境変数 $NQSII_MPIOPTS / $NQSV_MPIOPTによって、#PBS -l cpunum_jobで指定した値を元に、machinefileを自動生成しMPIに設定しています。ppn, rr, prehostといったオプションはmachinefileと同時に指定することが出来ないため、仮に128 MPIプロセス / 1ノードあたり64プロセス割り当てることを想定し、以下のように指定したとしても、ppn オプションは無効となります

mpirun ${NQSV_MPIOPTS} -np 128 -ppn 64 ./a.out

基本的には以下のように指定いただくことで、128 MPIプロセスを生成し、1ノードあたり64プロセス割り当てることが可能です。

#PBS -l cpunum_job=64
(中略)
mpirun ${NQSV_MPIOPTS} -np 128 ./a.out

環境変数 $NQSV_MPIOPTS は、以下のオプションとファイルが指定されています。

-machinefile /var/opt/nec/nqsv/jsv/jobfile/[リクエストID等の数値]/mpinodes

mpinodesファイルはマシンファイルとなっており、上記の場合は以下のようなホスト名、コア数が指定されています。

host001:64
host002:64

 
ただし、より細かくプロセス配置を指定したい場合(例えばピニングを設定し特定のコアにプロセスを使用せずに計算する場合など)上記のオプションでは対応出来ないケースがあります。ppn, rr, prehostオプションを使用する場合は、環境変数 $NQSII_MPIOPTS / $NQSV_MPIOPT を指定する代わりにhostfileオプションと環境変数 $PBS_NODEFILE を指定してください。128 MPIプロセスを生成し、1ノードあたり64プロセス割り当てる場合は以下のように指定します。

mpirun -hostfile ${PBS_NODEFILE} -np 128 -ppn 64 ./a.out

※PBS_NODEFILEを使う場合、#PBS -l cpunum_jobで指定した値がMPIに設定されません。ご自身でプロセス数の確認をお願いします。また、OCTOPUSではご利用いただけません。

2021.11.26

SQUID GPUノード群のGPUで使った最大メモリサイズを取得したい

以下のコマンドで取得可能です。ジョブスクリプトの最後で実行してください。

$ nvidia-smi --query-accounted-apps=timestamp,gpu_name,gpu_bus_id,gpu_serial,gpu_uuid,vgpu_instance,pid,time,gpu_util,mem_util,max_memory_usage --format=csv

出力例は以下のとおりです。最後に記載されている523MiBがGPUで使用した最大メモリサイズです。

2021/11/24 19:26:26.333, A100-SXM4-40GB, 00000000:27:00.0, 1564720026417, GPU-a3b25bed-7bb1-cbd8-89e3-3f14b6118874, N/A, 761279, 117202 ms, 2 %, 0 %, 523 MiB

ジョブクラス「SQUID-S」を使用している場合は、同じノード内で別の方のジョブが実行されている場合があるため、正しい値が取得されない可能性があります。予めご了承ください。

2021.11.08

機種変更/紛失/何らかの問題で2段階認証できなくなった

2段階認証コードのリセットには管理者の操作が必要となりますので、お問い合わせフォームからお知らせください。その際、氏名、利用者番号、メールアドレスは登録時のものを記入してください。2段階認証のリセット時にパスワードもあわせて初期化いたしますので、予めご了承ください。
お問い合わせフォーム
 

アカウントの所有者が卒業してしまった等、本人からの連絡が難しい場合に限り、当該アカウントに登録されている指導教員またはグループの申請代表者からの2段階認証リセットの依頼にも対応します。

2021.11.08

SQUIDのGPUノードでPytorchを使用したい

ご自身でインストールすることで、利用可能です。手順は以下のとおりです。

python venvを使用する

インストール手順

利用手順(ジョブスクリプト例)

 

Anacondaを使用する

インストール手順

利用手順(ジョブスクリプト例)

2021.10.11

ワークフロー実行機能で複数ジョブを順番に実行している場合、先行ジョブが障害等で再投入(Rerun)されると、後続ジョブはどのような扱いになりますか?

ワークフローにてA⇒Bの順序で制御しているときに、AがRERUNとなった場合、Aを再実行、Bは再スケジューリングされ、ワークフローの順番を保ったまま実行されます。

2021.05.18

NaNを含む無効演算例外を検知し、計算を止めたい

ベクトルノード群の場合、実行時に以下の環境変数を指定いただくことでNaNを含む無効演算例外を検知することが可能です。
(NaNを演算に使用されるとエラーとなります。)

export VE_FPE_ENABLE=INV

詳細は、以下のマニュアル 6ページ「1.9 演算例外」の項目をご参照ください。
SX-Aurora TSUBASA Fortran コンパイラ ユーザーズガイド
 

また、エラーを検知した該当箇所を確認する場合は以下も合わせてご指定ください。

 コンパイラオプション:-traceback=verbose -g
 実行時環境変数:export VE_TRACEBACK=VERBOSE

詳細は上記マニュアルの24ページに記載しております。

2021.05.14

qstatでベクトルエンジンのCPU時間、使用メモリを確認したい

qstatコマンドを実行すると、SX-Aurora TSUBASA(ベクトルエンジン)が接続されているLinux(ベクトルホスト)のCPU時間や使用メモリが表示されます。SX-Aurora TSUBASA(ベクトルエンジン)の情報を確認する場合は以下のオプションを指定してください。

1行に出力される情報は、投入するジョブクラスによって異なります。
DBGやSQUID-Sに投入した場合:ベクトルエンジン1台分の使用メモリ量、CPU時間を表示します
SQUIDやSQUID-Hに投入した場合:ベクトルエンジン8台分の使用メモリ量、CPU時間を表示します

2021.05.14

実行したプログラムのベクトル化率やメモリ情報を取得したい

SX-ACEでは標準で出力されていましたが、SX-Aurora TSUBASAではコンパイル時および実行時にオプションを設定する必要があります。
コンパイラオプションでproginfオプションを指定してください。

nfort -proginf test.f90

 
また、ジョブスクリプトで以下を指定してください。

export VE_PROGINF=YES
 または
export VE_PROGINF=DETAIL

2020.03.10

HPCI以外のグループからHPCI共用ストレージをマウントしたい / 阪大を利用しないHPCI課題で採択されたHPCI共用ストレージをマウントしたい

HPCI以外のグループからHPCI共用ストレージをマウントしたい / 阪大を利用しないHPCI課題で採択されたHPCI共用ストレージをマウントしたい場合、以下のような手順となります。事前に、マウントポイントを用意する必要がありますので、こちらからお問い合わせください。
 
1. HPCI 証明書発行システムで代理証明書を発行し、リポジトリに格納します。
 

2. フロントエンドサーバにログイン後、次のコマンドを実行し、代理証明書をダウンロードしてください。

myproxy-logon -s portal.hpci.nii.ac.jp -l hpciXXXX(HPCI-ID) -t168

 

3. 次のコマンドを実行し、HPCI共用ストレージを「/gfarm/(project ID)/(user ID)」(マウントポイント)にマウントします。

mount.hpci

 

4. 利用を終了次第、HPCI共用ストレージをアンマウントします。

umount.hpci

 

HPCI共用ストレージについては、こちらのHPCI共用ストレージ利用マニュアルをご参照ください。

2019.12.05

一度に大量のジョブを投入し、ジョブごとに入力ファイル/実行ファイルを変更したい

ファイル名に連続した数値が含まれている場合、パラメトリックジョブという投入方法で、一度に大量のジョブを投入できます。
パラメトリックジョブでは、ジョブスクリプト内の"$PBS_SUBREQNO"環境変数に、-tで指定した数値(下記の例では1から5までの数値)が格納されます。
qsubすると同時に5本のジョブが投入され、a.outに対してそれぞれ異なる入力ファイル(下記の例ではinput1からinput5)が設定されます。
 

ジョブスクリプト例

 

投入例

 

qstatの表示例:パラメトリックジョブの場合、1回のqsubにつき1件分の表示となります

 

sstatの表示例:-tで指定した数値分だけ表示されます

2019.11.25

Octaveから呼び出されるGnuplotのバージョンを設定したい

OCTOPUSには以下のGnuplotがインストールされています。

    ・4.6 (デフォルト)
    ・5.2.4 (/octfs/apl/Gnuplot/5.2.4)

 

Octaveから呼び出されるGnuplotのバージョンは、以下の2通りの方法で指定が可能です。
 
・呼び出したいバージョンのパスを設定する

    下記のジョブスクリプト例の4行目のように、Octaveの実行の前にGnuplotのバージョンのパスを設定することで、呼び出すバージョンを指定することができます。(Gnuplot5.2.4を呼び出す場合の例です)
    パスを設定しない場合、デフォルトのバージョンが呼び出されます。

 

・Octaveの設定ファイル「.octaverc」を作成する

    ホームディレクトリにOctaveの設定ファイル「.octaverc」を作成し、下記の一文を記述してください。

    gnuplot_binary="[Gnuplotの実行ファイルのパス]"

    上記のように記述することで、Octaveから呼び出されるデフォルトのGnuplotの実行ファイルを設定できます。
    例えば、5.2.4を呼び出す場合は「gnuplot_binary="/octfs/apl/Gnuplot/5.2.4/bin"」と記述してください。

2019.04.11

MPIプログラムを実行した際に"No PBS nodefile found"というエラーが出力される

MPIプログラム実行時に${NQSII_MPIOPTS}を指定していなかった場合、以下のようなエラーが出力されます。

[mpiexec@oct-***] HYDT_bscd_pbs_query_node_list (../../tools/bootstrap/external/pbs_query_node_list.c:23): No PBS nodefile found
[mpiexec@oct-***] HYDT_bsci_query_node_list (../../tools/bootstrap/src/bsci_query_node_list.c:19): RMK returned error while querying node list
[mpiexec@oct-***] main (../../ui/mpich/mpiexec.c:621): unable to query the RMK for a node list

以下のページに、MPIプログラムを実行する際のジョブスクリプトの例を掲載しておりますので、まずご参照ください。
OCTOPUSでのintel MPI実行方法

エラーメッセージ自体は、MPIプログラムの"nodefile"(実行する計算ノードを指定する設定ファイル)が存在しないことを通知しています。OCTOPUSでは、${NQSII_MPIOPTS}を指定いただくことで、自動的に設定されます。

2019.04.11

複数のジョブを同時に実行させたい

資源に空きがある限り、複数のジョブを同時に実行可能です。

qsub A.nqs
qsub B.nqs

といったように、1件1件個別にqsubしていくことで、A.nqsとB.nqsが同時に実行可能な状態となります。

2019.01.10

MPIジョブの出力ファイルにバイナリデータが書き込まれてしまう

MPI並列実行を行うプログラムで各プロセスが同名ファイルにデータを出力するよう記述していると、バイナリが書き込まれてしまう場合があります。
 

大規模計算機システムのような共有ファイルシステムにおいて各プロセスが同名のファイルにデータを出力することは、各プロセスが同一のファイルにデータを出力することと同じであるため、プロセス間で競合が発生した際にデータが破損してしまい、バイナリデータが書き込まれてしまうことがあります。各プロセスごとに別名のファイルに出力するか、MPI-IOというMPI用の入出力インターフェースを利用することで、プロセス間の競合を防ぐことが可能です。
 

MPI-IOについては下記をご覧ください。
MPIの実行結果を1つのファイルに出力したい

2018.12.20

ジョブを投入するとNQScrereq: [BSV ELIMEXCEED] Global submit limit has exceeded.というエラーが表示される

利用者単位、計算機単位でジョブの投入数上限を設定しており、いずれかの上限を超過していることによるエラーとなります。
基本的には、誤った利用方法による事故を防ぐ目的で設定しているものであり、利用を阻害するために設けているものではありませんので、本エラーを確認された場合は、以下までお知らせください。
 
お問い合わせフォーム

2018.11.16

試用制度のアカウントを一般(有償)利用に引き継ぐことはできますか?

試用制度のアカウントを一般利用へ引き継ぐことが可能です。アカウント情報、ストレージのデータなどをそのままご利用いただけます。
引継ぎを行う場合、下記の利用者管理システムから「利用資源追加申請」を行ってください。
利用者管理システム
 

「利用資源追加申請」の手順については下記のページに掲載しています。
利用資源追加申請

2018.08.02

Mac OSからXwindowを使用するアプリケーションを起動できない/動作が重い

XQuartsの仕様変更により、Xwindowを使用する場合に正しく起動しないことがあります。
 

対策

1. MacOS の xterm 上で以下のコマンドを実行してください。
XQuarts 2.7.10 以降で、iglx が標準で使えなくなったため、以下のコマンドを実行しないとエラーが出力されます。

$ defaults write org.macosforge.xquartz.X11 enable_iglx -bool true

 

2. SSH の X 転送を早くするチューニングを実施してください。
JavaFX使用する一部のアプリケーションでは、上記設定にて若干挙動が軽くなる可能性があります。

 <.ssh/config 設定例>
  Host *
  Compression yes
  ForwardX11 yes
  Ciphers blowfish-cbc,arcfour

2017.11.27

qsubやqstatコマンド実行時に"Setting locale failed."と表示される

接続を行っている端末のターミナルソフトがフロントエンドサーバ接続時に環境変数を引き継ぐように設定している場合、このメッセージが表示されます。以下の2通りの方法をお試しください。
 

使用しているターミナルソフトの設定を変更する

自身の使用しているターミナル上の/etc/ssh_configファイルの"SendEnv"の記述を下記のようにコメントアウトしてください。
 ※フロントエンドに接続していない状態で行ってください。

    Host *
    # SendEnv LANG LC_*

 

フロントエンドサーバ接続時に自動で環境変数が設定されるようにする(ターミナルの設定を変更したくない場合)

profileファイルに下記のように記述してください。
bashの場合.bash_profileに記述します。

    LC_ALL=en.US UTF=8

 

2017.10.30

Gaussianを企業との共同研究で使用できますか?

企業を含め、学外の方との共同研究でも利用可能です。

2017.06.06

MPIで並列計算を行う際に、ノード間のネットワーク的な距離の近いノード群を指定して利用できますか?

計算に使用するノードは、スケジューラ側が自動で最適なノードを割り当てるようになっており、利用者様の方では指定することはできません。
ご理解くださいませ。

2017.05.29

AVS/Expressでベクトルや流線の太さを調節したい

ラインの太さの調整には以下の2つの方法があります。
 

ライン自体の大きさを変更する

ライン自体の大きさはglyphモジュールのScaleパラメータで調整が行なえます。
ラインの太さはObjectメニューで変更します。操作手順は以下のとおりです。

1.エディター→Objectを開く
2.ObjectメニューでObject[General]を[Properties]に変更
3.PropertiesのTypeを[General]から[Point/Line]に変更
4.Line Thicknessのスライダーで太さを調整

 

tubeモジュールを使用する

ラインの太さを変更しても、OputputImageで画像サイズを大きくして出力した場合相対的にラインが細く見える場合があります。この場合はTubeモジュールを使用することで画面サイズに応じて太くなる形状を作成できます。
 

TubeモジュールはMain.Mappers登録されており、ライン表示をしているモジュールの下に接続して利用します。
TubeのメニューのScaleで太さの調節ができます。
 

以下のリンク先にtubeのサンプルデータを設置しています。
(ダウンロードして拡張子を「.v」に変更することでモジュールとしてそのまま使用することができます。)
tubeサンプル
 

以上の点で何かご不明な点がありましたら下記のWEBフォームよりご連絡くださいませ。
お問い合わせフォーム

2017.05.29

AVS/ExpressでのV言語を用いた座標の記述方法が分からない

coordinate_mathなどで座標の計算が必要な場合になる場合がありますが、V言語での計算式の記述は下記の記述例のようにExcelやC言語とほぼ同じ形式で記述することができます。

記述例
 X : (#1x*15)+12
 Y : (#1y*15)+12
 Z : (#1z*15)+16

指定の#1x,#1y,#1zが座標値の変数です。
また+,-,*,/の四則演算や()による計算順序の指定が行なえます。
 

ご不明な点がありましたら下記のWEBフォームよりご連絡くださいませ。
お問い合わせフォーム

2017.05.29

AVS/Expressで球形状に指定された領域の内側のデータを抽出し、球表面のデータを表示したい

データを球状で抽出する場合にはcrop_sphereモジュールが利用でき、抽出する球の中心、半径はcrop_sphereのメニューで指定ができます。
このモジュールは球の範囲内の要素をそのままの形状で残すため、球面の滑らかさはもとの要素の形状に依存します。
 

球面上のデータを表示する場合はinterp_dataを使用して球面にデータを補間して表示する方法があります。
こちらの場合、球内部のデータは抽出できませんが、球表面に関しては滑らかに表示されます。
また球の位置と半径はcoordinate_mathで調整することが可能です。
 

以下のリンク先にcrop_sphere,interp_dataのサンプルデータを設置しています。
(ダウンロードして拡張子を「.v」に変更することでモジュールとしてそのまま使用することができます。)
crop_sphereサンプル
interp_dataサンプル
 

ご不明な点がありましたら下記のWEBフォームよりご連絡くださいませ。
お問い合わせフォーム

2017.05.29

OpenMPで並列化していない箇所の処理時間が増加している

コンパイル時に、OpenMPや自動並列化を使用するオプションを指定した場合、並列化指示行の有無に関わらず、「並列版ライブラリ」がリンクされます。「並列版ライブラリ」の関数(並列版の関数)には通常版ライブラリと比べて、排他制御のために他スレッドのリソースへのアクセスを制限する「ロック処理」が組み込まれています。
 
並列化指示行を挿入していない箇所で並列版の関数がコールされた場合、1スレッドで動作するので、実際にロック処理に伴う「他スレッドの処理待ち」が発生するわけではないのですが、例えば、「排他が必要かどうか」といった判定を行う都合で、わずかですが通常版ライブラリより処理時間が増えることとなります。
 
一回のオーバヘッドはわずかですが、大量にコールすると、処理時間に大きく影響することとなります。
ご注意ください。

2017.05.19

MPIの実行結果を1つのファイルに出力したい

MPIを用いた場合、通常は各プロセスごとに出力ファイルが生成されます。しかしMPI-IOを用いて出力先を指定することで、各プロセスの出力を1つのファイルにまとめることができます。

基本的な利用方法

MPI-IOはMPIプログラミングを行うことを前提としています。MPIの基本的な利用方法やコマンドについてはこちらをご覧ください。
以下にfortranで書かれたプログラムを紹介します。こちらを参考に説明します。
 

ファイルへの出力(書き込み)

各プロセスごとにプロセスID(rank)を取得し、output.datの任意の位置に出力するプログラムです。
たとえば自身のプロセスIDが4の場合、output.datの16-19バイト目(INTEGER換算で5番目)に自身のプロセスIDを書き込みます。

 

プログラムのハイライト部分(8行目-11行目)が、MPI-IOプログラムになります。また7行目は直接MPI-IOに関係があるわけではないですが、9行目でコマンドに引数として渡す変数を設定している部分になりますので、必要な処理になります。
 
2行目、6行目-7行目、13行目はMPIでの処理を行うためのプログラムです。こちらについてはMPI利用方法(VCC)のページで解説を行っていますのでそちらを参考にしてください。
 
以下で8行目-11行目のコマンドについて詳しく説明していきます。
 

mpi_file_open

mpi_file_open(comm, filename, amode, info, fh, ierr)

MPI-IOでの入出力先のファイルをオープンするためのコマンドです。
MPI-IOを行う場合は最初にcallする必要があります。

引数
comm コミュニケータを指定します。通常はMPI全プロセスをあらわす「MPI_COMM_WORLD」を指定することが多いです。
filename 入出力先のファイル名を指定します。
amode アクセスモードの設定をします。「|」をはさむことで複数同時に指定することが可能です。代表的なものをいくつか紹介します。
mpi_mode_rdonly:読み込みのみ可能
mpi_mode_wronly:書き込みのみ可能
mpi_mode_rdwr :読み書き両方可能
mpi_mode_create:filenameで指定した名前のファイルがない場合、自動で作成
mpi_mode_excl :filenameで指定した名前のファイルがすでに存在する場合、エラーを返す
これ以外にも様々なモードが存在します。
info 入出力先のファイル情報を設定できますが、基本的には何も渡さない「mpi_info_null」で問題ありません。
fh ファイルハンドルです。これ以降filenameで指定したファイルは、fhで指定したファイルハンドルで指定することになります。
ierr 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます。

 

mpi_file_set_view

mpi_file_set_view(fh, disp, etype, ftype, datarep, info, ierr)

各プロセスのファイルへの入出力開始地点(ポインタ)を指定するコマンドです。
ここでうまくポインタの指定ができていないと、出力結果に変に空白ができてしまったり、上書きが発生してしまったりします。

引数
fh ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。
disp ポインタのオフセット距離をバイト数で指定します。たとえばここで4を引数として渡した場合、5バイト目にポインタがセットされます。CHARACTER型は1文字1バイトのデータ型なので、この場合はファイルの先頭から4文字分のスペースが空いていることになります。またINTEGER型で考えると、通常は1つ4バイトのデータ型なのでINTEGER1つ分のスペースが空いていることになります。
etype ファイルの基本単位を設定します。書き込む際のデータ型もしくはmpi_byteを指定します。
ftype ファイルのひとまとまりの単位を設定します。各プロセスが複数回にわたって規則的に入出力を行う際などに利用するもので、決まった型だけでなくユーザーが独自に作ったものを設定することも可能です。各プロセスが入出力を1回しか行わない場合はetypeと同じものを設定しておきます。
datarep データの表現方法を指定します。基本的にはバイナリ表現を表す「native」で問題ありません。
※必ず小文字で指定してください。
info 入出力先のファイル情報を設定できますが、基本的には何も渡さない「mpi_info_null」で問題ありません。
ierr 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます

mpi_file_write

mpi_file_write(fh, buf, count, datatype, status, ierr)

実際にファイルに出力するためのコマンドです。
MPI_File_openでオープンしたファイルにMPI_File_set_viewで指定されたポインタから書き込み始めます。

引数
fh ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。
buf 実際に書き込む内容を設定します。
count 書き込むデータの数(文字数ではない)を設定します。詳しくはdatatypeの欄で説明します。
datatype 書き込むデータの型です。ここで設定したデータ型を、countで設定した数だけ出力します。
たとえばcharacter型で「hello」と書き込む場合はcountに5を、datatypeにmpi_characterを設定します。
またinteger型で「100」と書き込む場合はcountに1を、datatypeにmpi_integerを設定します。
これはcharacterが1つで1文字を表すデータ型であるのに対し、integerは1つで-2147483648~2147483647の範囲の整数を表すデータ型だからです。
status 入出力先のファイルの通信に関する設定を行えますが、基本的には何も渡さない「mpi_status_ignore」で問題ありません。
ierr 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます

mpi_file_close

MPI_File_close(fh, ierr)

MPI-IOでの入出力先のファイルをクローズするためのコマンドです。
MPI-IOを行う場合は一連の処理の最後にcallする必要があります。

fh ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。
ierr 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます


 

ファイルからの入力(読み込み)

上記で作成したoutput.datからデータを読み込み、printで画面に表示するプログラムです。

 

プログラムのハイライト部分(8行目-11行目)が、MPI-IOプログラムになりますが、出力用のプログラムからmpi_file_writeがmpi_file_readに変わったのみでほぼ変化がありません。以下で新たに使用しているmpi_file_readについて解説します。
 

mpi_file_read

mpi_file_read(fh, buf, count, datatype, status, ierr)

ファイルから読み込むためのコマンドです。
MPI_File_openでオープンしたファイルのMPI_File_set_viewで指定されたポインタからデータを読み込みます。

引数
fh ファイルハンドルです。MPI_File_openで設定したファイルハンドルを指定します。
buf 読み込んだデータが格納されます。
count 読み込むデータの数を設定します。writeのときと同様に文字数ではないという点に注意してください。
datatype 読み込むデータの型です。ここで設定した型で、countで設定した数だけ読み込みます。
status 入出力先のファイルの通信に関する設定を行えますが、基本的には何も渡さない「mpi_status_ignore」で問題ありません。
ierr 正常終了時に0が格納されます。エラー時はそれ以外の値が格納されます


 

通常のコマンドを用いた読み込み

MPI-IOを用いて出力されたファイルは通常のreadコマンドでも読み込むことができます。mpi_file_readコマンドは本来、各プロセスにファイルの別々の箇所を読み込ませ、それぞれに並列作業を行わせるためのコマンドですので、MPI-IOによる出力結果をただ読み込むだけならば通常のreadコマンドを用いてデータの読み込みを行います。
上記同様output.datからデータを読み込み、printで画面に出力するプログラムです。

 

ご覧のとおりMPI化を行っていないシリアル実行のプログラムですので、コンパイルやスクリプトでのジョブ投入の記述に誤ってMPI用のコマンドを使わないように注意してください。
 

C言語の場合

上記と同じプログラムをC言語で記述したものも参考までに掲載します。関数はfortran版とほぼ同じですので、説明は省略します。

ファイルへの出力(書き込み)


ファイルからの入力(読み込み)


通常の関数を用いた読み込み

Next »