torcwa(RCWAシミュレーション)の負荷解析:Fourier次数によるPC性能の確認

Python

はじめに

メタサーフェスの設計において計算の軽さからRCWA(Rigorous Coupled Wave Analysis;厳密結合波解析)による計算が注目されている。幣ブログにおいても過去にRCWA理論の解説pythonによるRCWAツール;torcwaの紹介などを行ってきた。本記事ではtorcwaの計算を行っていく。

RCWAにおいて様々な電場計算を行っていくが、その中で重要なパラメータの一つにフーリエ次数が存在する。詳細は理論の解説を参考にしていただきたいがフーリエ次数\(n\)としたときに計算オーダーは\( O(n^2) \)である。よって、計算の制限としてフーリエ次数が重要であり、この次数を変えながらPCのCPU/RAM/GPUの使用率をリアルタイムで取得した。

今回の計算にあたってはGPT5によるcodexにより元コードを書き、全体の監修と詳細部分の改変については自分で行った。また、自分の知見の少なさからPCの性能解析部分についてもGPT5による手を一部借りた。

実験条件

PC性能

CPU: Ryzen 5 5600X 6-core professor
RAM: 16 GB
GPU: RTX 4060ti (VRAM:8 GB)

その他実験条件

計算の仕方: Forier order sweep(次数 N = 0〜28)

計測指標:
GPU利用率 / VRAM使用量
CPU使用率
RAM消費率
処理時間

プログラムについての簡易解説

基本的にはexample2の構造を使ってフーリエ次数を振った。

以下のようなピラー構造となっており、これにモニター関連の関数を加えた構成となっている。具体的なファイルはこちらで共有を行っている。

結論

図1. 計算結果

今回のベンチマークでは、Fourier展開次数 N を段階的に増やしながら、GPU・CPU・RAMそれぞれの利用率を時系列的にモニタリングした。図に示したのは、その平均的な使用率を次数ごとに整理した結果である。

以下結果についてのまとめを行う。

最も顕著なのは、GPUメモリ使用率の変化である。低次数領域(N ≦ 16)では20%前後と余裕があり、GPUの演算器も比較的低い負荷で動作している。しかし、N が 18 を超えるあたりから利用率が急激に上昇し、N = 24 では既に 95 % に到達している。この段階で RTX 4060 Ti のVRAM(8 GB)はほぼ埋まり、以降の次数では演算の増加とともにメモリ使用量も限界に張り付いたまま推移した。N = 26 や 28 では、PyTorch がホストメモリ側にテンソルを退避する挙動を示し、システムRAMの使用率も同時に増加していると考えられる。

>>PyTorch がホストメモリ側にテンソルを退避する挙動
についてはpytorchの公式ドキュメントを参考

PyTorch uses a caching allocator to speed up memory allocations.
When no GPU memory is available, allocations may fall back to host (CPU) memory.

CPU利用率は対照的で、N ≦ 12 の低次数では50〜60%程度まで上昇するものの、N が増えるにつれて急速に低下し、N = 20以降では10%を下回る。これは演算の主導権が完全にGPUに移行したと考えられ、CPUはデータ転送やメモリ確保などの補助的な処理に留まっていると考えられる。

RAMの使用量はN < 26では40%台で安定していたが、N = 26以降で急激に増加し、最終的には全体の約80%に達した。これは、GPUメモリが上限に達したことでPyTorchが中間テンソルをホスト側に退避したためであり、PyTorchのメモリ管理仕様と一致する挙動である。

このように、N > 24 ではGPUメモリが物理的な制約となり、RAMも同時に圧迫されることで、計算全体がメモリ容量によって律速されることが確認できた。これ以上の計算としては、より大きなVRAMを搭載したGPUを用いることしかないと考えている

また、N>28ではメモリオーバーとなり計算が不可能となることも確認された。

他参考文献

torcwaの元論文[changyun2023]にも、ゲーミングPCとワークステーションPCによる計算結果の比較があり、有料購入のため詳細は述べないが、CPU性能による影響差はあまり存在しないことが確認される。

コメント

タイトルとURLをコピーしました