目次

4.6 コマンドラインでの実行法

OpenTHFDをコマンドライン実行する方法は以下の通りです。
行頭の"> "はプロンプトであり入力する必要はありません。
[]内はオプションであり省略可能です。
|で区切られた部分は一つを選択してください。
"入力データ"は必須です。
コマンドラインのオプションはWindowsとLinuxで同じです。(注1)

(注1)
Windows環境では実行プログラムに拡張子".exe"が必要になることがあります。

4.6.1 計算プログラム

OpenTHFDには使用された高速化技術によっていくつかの実行プログラムがあります。
それらは実行方法と計算時間は異なりますが、計算機能は同じなので、 同じ計算結果が得られます。

(1) 1台のコンピューターの1個以上のCPUでOpenMP版を使用するとき

> oth [-n <thread>] [-matrix|-nomatrix] 入力データ

例えば以下のようになります。
> oth 入力データ    (1スレッドで計算する)
> oth -n 4 入力データ  (4スレッドで計算する)
> oth -matrix 入力データ  (matrixモードで計算する:CPUの既定値)
> oth -nomatrix 入力データ (nomatrixモードで計算する)
> oth     (使い方の説明)
> oth --help  (使い方の説明)
> oth --version (バージョンの表示)

(2) 1台のコンピューターの1個以上のCPUでMPI版を使用するとき

1台のコンピューターで使用するときは(1)の方法で十分ですが、以下のようにMPI対応プログラムを使用することもできます。
> mpiexec -n <process> oth_mpi [-n <thread>] [-matrix|-nomatrix] 入力データ

例えば以下のようになります。(注1)
> mpiexec -n 4 oth_mpi 入力データ (4プロセス、各1スレッドで計算する)
> mpiexec -n 2 oth_mpi -n 2 入力データ (2プロセス、各2スレッドで計算する)
> oth_mpi     (使い方の説明)

(3) 複数台のコンピューターの各1個以上のCPUでMPI版を使用するとき

> mpiexec -hosts <num> ホスト名 プロセス数 ... oth_mpi [-matrix|-nomatrix] 入力データ

例えば以下のようになります。(注1)(注2)
> mpiexec -hosts 2 localhost 6 PC2 4 oth_mpi 入力データ  (2台, 6+4プロセス, 各1スレッド)

(4) 1台のコンピューターで1個のGPUを使用するとき

> oth_cuda [-hdm|-um] [-device <device>] [-nomatrix|-matrix] 入力データ

例えば以下のようになります。
> oth_cuda 入力データ
> oth -nomatrix 入力データ  (nomatrixモードで計算する:GPUの既定値)
> oth -matrix 入力データ (matrixモードで計算する)
> oth_cuda -hdm 入力データ (host-device-memoryを使用する:既定値)
> oth_cuda -um 入力データ (unified-memoryを使用する)
> oth_cuda -device 0 入力データ (デバイス番号=0:既定値)(注3)
> oth_cuda    (使い方の説明)

(5) 1台のコンピューターで2個以上のGPUを使用するとき

> mpiexec -n <process> oth_cuda_mpi [-hdm|-um] [-nomatrix|-matrix] 入力データ

プロセス数にグラフィックスボードの個数を指定します。例えば以下のようになります。(注1)(注2)
> mpiexec -n 2 oth_cuda_mpi 入力データ (2個のGPUで計算する)
> oth_cuda_mpi    (使い方の説明)

(6) 複数台のコンピューターの各1個以上のGPUを使用するとき

> mpiexec -hosts <num> ホスト名 プロセス数 ... oth_cuda_mpi -hosts <num> プロセス数 ... [-hdm|-um] [-nomatrix|-matrix] 入力データ

例えば以下のようになります。(注1)(注2)(注4)
> mpiexec -hosts 2 localhost 1 PC2 1 oth_cuda_mpi -hosts 2 1 1 入力データ  (2台、グラフィックスボードの個数=1+1)

(注1)
mpiexecの詳細についてはコマンド"mpiexec -help"または"mpiexec -help2"を参考にしてください。
(注2)
複数台のコンピュータで計算するには予めすべてのコンピューターでコマンドプロンプトで "smpd -p 8677"を起動してください。 ホスト名はコマンド"hostname"でわかります。 "localhost"はユーザーの使用しているコンピューターです。 複数台のコンピュータで計算する方法の詳細については[17]を参考にしてください。
(注3)
通常はデバイス番号は0です。 何らかのメッセージが出て実行できないときはデバイス番号を変えてみてください。 実行時に画面に表示されるデバイス名を確認してください。 CUDA対応のグラフィックボードが複数あるときはデバイス番号を正しく指定する必要があります。 デバイス番号については[17]を参考にしてください。
(注4)
2番目の"-hosts"の後に最初の"-hosts"の後の数字だけを取り出したものを並べてください。 これはMPIのプロセス番号とGPUのデバイス番号の対応をとるために必要です。

4.6.2 ポスト処理プログラム

計算終了後、以下のコマンドでポスト処理を行います。
ポスト処理は入力データのポスト処理制御部を変更して繰り返し行うことができます。

> oth_post 入力データ

(注1)
上記で引数"-html"をつけて実行するとev.ev2,ev.ev3の代わりに ev2d.htm,ev3d.htmが出力されます。 これらはHTMLファイルなのでブラウザで開いてください。

4.6.3 図形表示(Windows環境)

ポスト処理終了後、以下のコマンドで図形表示を行います。
(エクスプローラーで実行プログラムをダブルクリックしても可)

> ev2d.exe    (図形表示2D)
> ev3d_otk.exe  (図形表示3D)

4.6.4 Linux環境での使用法

Linuxでは前節の方法でビルドした後、以下のように使用してください。
(Linuxでは図形出力がHTML形式であることが必要なので操作法が異なります。 下記と同じ作業はWindowsでも行えますが、WindowsにはGUIがあるので不要です)

●計算
計算方法は4.6.1と同じです。
ただし、入力データに"plot3dgeom = 1"の一行があるときは、 物体形状がgeom3d.htmに出力され計算を行わずに終了します。 geom3d.htmをブラウザで開いて確認してください。
その後"plot3dgeom = 1"行を"#plot3dgeom = 1"とコメントアウトして計算を行ってください。

●ポスト処理
計算終了後、以下のコマンドにより、2D図形データがev2d.htmに、 3D図形データがev3d.htmに出力されます。 それらをブラウザで開いてください。

> oth_post -html 入力データ

4.6.5 LinuxとWindowsの併用

ローカル環境がWindowsで、リモートにLinuxの高速な計算環境があるときは、 リモートで計算を行い、それ以外の作業を操作しやすいWindowsで行うことができます。
ただし、計算結果ファイルoth.outは大規模な問題ではGBのオーダーになるので、 oth.outを転送するかどうかで二通りの方法があります。 (1)の方法は操作性に優れますがファイル転送に時間がかかります。

(1) oth.outを転送する方法

  1. Windows版OpenTHFDで入力データを作成する(この時点でポスト処理制御は不要)
  2. 作成した入力データ(拡張子.othの1個のファイル)をリモートに転送する
  3. 4.6.1のいずれかの方法でリモートで計算する
  4. 計算が出力したoth.outをローカルに転送しOpenTHFDフォルダに保存する
  5. Windows版OpenTHFDで[ポスト処理制御],[ポスト処理],[図形表示2D],[図形表示3D]を行う

(2) oth.outを転送しない方法

  1. Windows版OpenTHFDでデータ入力とポスト処理制御を行った入力データを作成する
  2. 作成した入力データ(拡張子.othの1個のファイル)をリモートに転送する
  3. 4.6.1のいずれかの方法でリモートで計算する
  4. 4.6.2の方法でリモートでポスト処理を行う
  5. ポスト処理が出力した図形データev.ev2とev.ev3をローカルに転送しOpenTHFDフォルダに保存する
  6. Windows版OpenTHFDで[図形表示2D]または[図形表示3D]を行う
  7. ポスト処理をやり直すには1.に戻ってポスト処理制御以降を行う、 ただしすでに計算を終えているので(リモートにoth.outがあるので)3.の計算は飛ばしてよい