LoginSignup
LKet261
@LKet261

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

科学計算でワークステーションを使う理由

このサイトでこのような質問するのもどうかと思うのですが、科学計算でワークステーションを使う利点って何なのでしょう。私の学校の量子力学系の研究室ではどうもXeonを積んでいるようなワークステーションを何台も並べているようなのですが、同じ計算能力を発揮しようと思えばマイニングマシンのようにゲーミング用のGPUを並べた方が柔軟に使えて安く済みます。私も科学計算を行ったりする(ROCmでtorchを使うのが主です)のですが、まだ学部生だからなのかワークステーションならではの必要性を感じたことがありません...

どのような理由からワークステーションが量子力学や流体力学の計算で用いられるのですか?

0

2Answer

Xeon で計算したことがあります.
当時は GPU で計算するという発想自体を持っていませんでしたが,
いずれにせよ次の理由で選択肢に入らなかったと思います:

  • やりたい計算は大規模に並列化できないので CPU を使う方がずっと速い
  • GPU は倍精度実数の演算が遅い(という印象がある)
  • 既存のコードを GPU のために作り直す手間が割に合わない
  • できれば ECC メモリを使いたい
2

@satomineさんの回答に賛成です。

流体のごく限られた分野でHPCを齧っていますが、その立場から回答いたします。

一方はアルゴリズム的な観点からですが、流体を扱う際、特に非圧縮近似した場合には部分的にでも陰解法(一点の更新に他の多く、または全ての点の情報が必要)が用いられることが多いです。
よって10000コアを超えるような規模になるとノード間の通信が隠蔽しきれずボトルネックになってくるため、演算ユニットによる差は隠れる傾向があります。
最近はこれを克服するような手法(圧縮近似による完全陽解法)も出てきていますが、まだ主流にはなっていません。
また既存の流体ソルバに色々と複雑なアルゴリズムをくっつけて使うことも多く、その際OpenACCの機能では足りないのでCUDAで書く場合が多いですが、スレッド競合やキャッシュサイズ、warp divergenceなどを考慮してアルゴリズムを実装するのは結構大変で、結果GPUではかえって遅くなることもあります。

他方は現実的な観点からですが、(特に基礎研究を行っている)研究室は論文を書くのが至上目標で、それには手法なり物理なりの新規性が必要です。
新しい手法を開発したとしてそれ自体は論文になりますが、GPU上で性能を出すために諸々を考慮してチューニングすること自体は基本的に論文にならない上に、必要となる知識も全く異なります。
GPU用によくチューニングされた既存のコードがあったとしてもそこに新手法がフィットする保証はありません。
また物理メインの論文を書く場合、コードの高速化には時間を使いたくありません。
よって研究室規模ではとりあえずさっさと実装してワークステーション(CPU)でパラメータを振って計算を回そう、となることが多いのだと思います。

昔流体のとある手法をCPUとGPUの両方でスクラッチから実装して試したことがありますが、(私の実装の仕方が悪いのもあって)二倍弱しか性能が変わらず、じゃあCPUでさっと書いて計算させて他に時間を使ったほうがいいよね、と自己完結した記憶があります。
意欲的で優秀な学生さんがどこからともなく現れて手法開発とその論文執筆、さらにはGPU高速化とそれを使った物理の論文執筆まで通してやってくれれば理想ですが、現実にはなかなか難しいです(あとそうした人々は概してアカデミアに残りません)。
質問者様に期待いたします笑

2

Comments

  1. 流体が専門ではありませんがxeonのCPU搭載のワークステーションとGPU(TESLAシリーズ)を載せた計算機を使って研究をしていました。
    市販ソフトの場合は、そもそも並列計算の機能のオプションが利用可能なソフトなのかというというところがポイントになります。GPGPUは並列計算の歴史においても超新星的なスーパー新人なので、ライセンス費が高くなったりします。

    自作コードの場合は上記のようなオプションの制約がなくなります。(コンパイル時の自動最適化の違いはあるかもですが)、しかしながら、並列数で全てが決まるかというとそうではありません。先に回答頂いているように、並列計算のパフォーマンスはボトルネックによって決まります。加えて、並列度を上げて理想的な状態で効率化できるのは数値解法は限定されます。
    互いに独立した10000個の計算式を10000スレッドで分割できる場合はいいのですが、1つの式を計算するのに他の計算式の内容を加味して計算しないといけない場合どうしても上にのようなシンプルな分割ができません。テクニックとして並列化する手法はあるようですが、パフォーマンスは大幅に低下します。シンプルな拡散方程式を陽解法で解くようなケースでは並列化しやすいですが、行列計算等になると劇的なパフォーマンスアップはは得られないと聞きます。(最近は多少は進歩したのかな…?)
    その場合はシングルスレッドの計算性能が高いCPUが圧倒的に有利です。

    なので、使用する計算機のスペックは予算、数値解析手法、計算規模に応じて決まります。
    質問者さんの場合も上記のいずれかが理由になっていると思われます。

    超大規模計算でCPUの並列数だと一生終わらない計算はお金がかかりますがGPU並列なら現実的な計算時間で計算できるからという理由でGPU並列計算機を使いますが、それ以外はCPUで計算したほうが、楽なんです。
    そして、GPGPU用の拡張言語の様なものを使って並列化したいループ処理を書き換えてあげる必要があったりで地味に大変という…なのでコストメリットがどんなもんかが見えてないとなかなか手を付けにくい領域だったりします。

Your answer might help someone💌