ファイル(dlfsp.zip) をダウンロードして、
適当なフォルダに展開してください。ファイル構成は以下の通りです。
図5-1にシステム構成図を示します。
モーメント法計算、深層学習、図形出力の3つから成ります。
ファイルMain.cを編集して計算条件を設定してください。
リスト5-1 モーメント法プログラムのデータ入力(Main.cの一部)
const int Ndata = 1000; // データ数 const int Rect[] = {4, 2, 8}; // 長方形パラメーター(数,最小,最大) const int Ny = 20; // Y方向セル数 const int Nz = 20; // Z方向セル数 const double Ly = 0.20; // Y方向長さ const double Lz = 0.20; // Z方向長さ const double Rad = 0.002; // 導線半径 const double Freq = 3e9; // 周波数 const double Thinc = 90; // 入射方向θ[度] const double Phinc = 0; // 入射方向φ[度] const int Pol = 1; // 偏波(1/2=V/H) const int The[] = {40, 180}; // θ方向分割数,角度(0...180度) const int Phi[] = {40, 180}; // φ方向分割数,角度(-90...+90度) const int Nch = 4; // 遠方界成分数(2/4, 通常4) const int Ncr = 1; // 電流分布成分数(1/4, 通常1)
モーメント法プログラムをビルドするには、
ターミナル(コマンドプロンプト)で以下のコマンドを実行してください。
ビルドコマンド | OS | コンパイラー | 実行プログラム |
---|---|---|---|
$ nmake.exe -f Makefile_cl | Windows | cl.exe | mom.exe |
$ make -f Makefile_gcc | LinuxまたはWSL2 | gcc | mom |
モーメント法プログラムはデータに関して独立した計算なので、
OpenMP(共有メモリー環境、スレッド並列)を用いて並列計算することができます。
計算時間はスレッド数分の1になります。
それぞれの環境で以下のコマンドのいずれかを実行してください。
Windows
$ mom.exe 1スレッド, mom1.bin, mom2.bin出力 $ mom.exe 8 8スレッド, mom1.bin, mom2.bin出力 $ mom.exe 8 foo1.bin foo2.bin 8スレッド, foo1.bin, foo2.bin出力
LinuxまたはWSL2
$ ./mom 1スレッド, mom1.bin, mom2.bin出力 $ ./mom 8 8スレッド, mom1.bin, mom2.bin出力 $ ./mom 8 foo1.bin foo2.bin 8スレッド, foo1.bin, foo2.bin出力
(注1)
デバッグを行って図形出力するときは、
OpenMOM等に付属している2次元図形表示プログラムev2d.exeを用いて以下のコマンドを実行してください。
$ ev2d.exe fig1.ev2 $ ev2d.exe fig2.ev2 $ ev2d.exe fig3.ev2
(注2)
両方動くWSL2でテストした結果、gccはcl.exeより約1.5倍速くなります。
ファイルdlfsp.pyを編集して計算条件を設定してください。
リスト5-3 深層学習プログラムのデータ入力(dlfsp.pyの一部)
# 計算パラメーター load_model = 0 # 通常0, 前回保存したmodelfileからrestartするとき1 save_model = 1 # 通常1, 計算終了時にmodelfileを保存しないとき0 ndata = -1 # データ数, -1のときはすべてのデータ batch_size = 60 # バッチサイズ(通常50-100程度) num_epochs = 30 # エポック数 train_ratio = 0.8 # 訓練データの割合(通常0.8程度)
深層学習プログラムはPythonで記述されているのでビルド作業は不要です。
実行する前に、python, pip, numpy, matplotlib, torch, torchvision をインストールしてください。
深層学習を行うには下記のコマンドのいずれかを実行してください。
$ python dlfsp.py (ソースコード内でImode=1とし、datafileとmodelfileを指定する) $ python dlfsp.py 1 datafile(ソースコード内でmodelfileを指定する) $ python dlfsp.py 1 datafile modelfile
計算結果を図形出力するには下記のコマンドのいずれかを実行してください。
$ python post.py (mom1.binを使用したときはImodel=1、mom2.binを使用したときはImodel=2とする) $ python post.py 1 (mom1.bin(label1)を使用したとき) $ python post.py 2 (mom2.bin(label2)を使用したとき)
(注3)
コマンドpythonは環境によってはpython.exeまたはpython3となります。
モーメント法の計算時間は以下のように評価されます。
モーメント法の計算時間 ∝ (Nx, Ny, Nθ, Nφ に依存) * データ数 / スレッド数
計算時間の1例として以下のようになります。
・計算条件:Ny=Nz=20, Nθ=Nφ=40, データ数=100,000
・ハードウェア: AMD Ryzen 7 7840HS, 8コア16スレッド
・計算時間: 197秒
深層学習の計算時間は以下のように評価されます。
深層学習の計算時間 ∝ エポック数 * データ数 * パラメータ数
計算時間の1例として以下のようになります。
・計算条件:エポック数=60, データ数=100,000, ResNet18, パラメーター数=11,384,848
・ハードウェア: NVIDIA GeForce RTX 4060 Laptop, 3072コア
・計算時間: 1143秒