- 締切済み
計算機のスペックとプログラム実行速度について
以下のような2つのPCがあります。 A Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81 GHz B Intel(R) Core(TM) i9-10900X CPU @ 3.70GHz 3.70 GHz この計算機に全く同じソースコードで同じコンパイラで実行させてみました。両者とも高速化に関する工夫を全くしない状態です。 言語はFortranで、コンパイラはgfortranです。時間発展計算で、計算の実行時間は1時間ぐらいでしょうか。 私はコンパイラの性能の分だけの違いが出るはずだと思っていましたのでBの方が3割ぐらい早いかなと思っていたのですが。実行の様子をみるとほぼ互角でひょっとするとAが勝っているような感じです。 計算の進行に従って画面にプリント表示する時間ステップの進行速度での印象です。 高性能のCPUの力を出し切るような環境になっていないとその性能は引き出せないし、逆の結果にさえなるということでしょうか。 CPUの性能をフルに引き出すにはソースコードの工夫、高機能コンパイラ、最適なコンパイラオプションの選択ということになるのでしょうか。Aの方も同様に工夫しても高速化が改善されずBがどんどん早くなる、ということなのでしょうか。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- superside0
- ベストアンサー率64% (461/714)
10コア20スレッド(マルチコア、マルチスレッド)のCPUを使っているのに シングルスレッドのプログラムを1プロセスだけ動かしているだけ ということなら、そのプロセスでは、1つのコアしか使っていないので 残りのコアは ほとんど使われていないのでしょう。 (OSやサービスやアンチウィルスぐらいには割り当てられているでしょうけど) なので、CPUを有効に使いたいということであれば、 複数のコアに処理を分散させるように プログラム自体をマルチスレッド化するべきではないでしょうか。 もしくは、シリアルに実行しないで、条件範囲を変えたプログラムを並列実行して、 後処理で結果をまとめることで、事実上 高速化するとか。 なお、ハイパースレッディングしているCPUで シングルスレッドのプログラムを1本だけ実行するままならば、 スレッド切り替えサイクルが発生するだけ無駄でしょうしから BIOS設定にハイパースレッディングを無効化できる設定があれば それを使ってどうなるか試してみてもよいかもしれません。
- f272
- ベストアンサー率46% (8529/18254)
どういう環境でどのようなプログラムを実行しているのか定かではないので、明確に言えるわけではありませんが、実行時に何が律速しているのかくらいは確認してください。 「ソースコードの工夫、高機能コンパイラ」を考える前に、タスクマネージャでCPU使用率がどうなっているのかとか、どの程度のメモリを使用しているのかとかいろいろとチェックすべき項目はあるでしょう。 コンパイラオプションについても-O2 -march=nativeくらいは最初からつけるべきでしょうね。
- superside0
- ベストアンサー率64% (461/714)
スペックを確認してみたのですが、 i5-8400 コア数6 スレッド数6 GPU=IntelUHD630 i9-10900X コア数10 スレッド数20 GPUなし でした。 しかし、GPUを使うようにコンパイルされている訳でも ないなら、GPUの有無は関係なさそうですね。失礼しました。 ただ、シングルスレッドのプログラムを1本実行しているだけ ということなのでしょうか? それなら、コス数が増えてもあまり意味がなく、 逆に1コアで2スレッドを実行させてるハイパースレッディングの i9-10900X のほうが無駄にスイッチしている分だけ 不利になっているのかもしれませんね。 またプログラムによってはCPUでなくメモリーやI/Oのほうが ボトルネックになっているのかもしれません。
お礼
回答ありがとうございます。新しい計算機(ハード)のほうが遅くなる可能性があるということであり、コード編集も含めて高速化のためのソフト的な対応も進める必要があると理解しました。計算機購入という資本の投下に見合った時間の投入が必要なようです。 WindowsでもGPUが使えるFortranコンパイラってどんなものがあるんでしょうか。ちゃんとグラフィックドライバを認識して高速化してくれるものということですが。
- superside0
- ベストアンサー率64% (461/714)
Core i9-10900X ってGPUを搭載してないモデルですよね。 浮動小数点演算にGPUが使えなくて、CPUにやらせていることになるので せっかくCPU性能が上がっても相殺されてしまっているのでは ないでしょうか。
お礼
回答ありがとうございます。当該機はGPUも搭載されており、ファイナルファンタージベンチⅣで15000ぐらいで、ゲームを実行する上でのほぼ最上位カテゴリにランクされます。Windowsでのドライバはちゃんと起動しているとは思いますが、コンパイラでGPUを利用(CUDAとかでしょうか?)するようにはしていません。利用するのはCPUです。当該機も比較機もGPUを使わないという点で同じだと思っているので、CPU性能比だけが速度に現れるはずだと思っていました。ところが同等か負けているってことなので驚いております。
お礼
回答ありがとうございます。実行時にタスクマネージャで稼働率のグラフを見てみると20%ぐらいであり、CPUのコアをフルに使っていないことが分かりました。律速段階(ホットスポット)についてはどこということはなく、時間発展に関して足踏み(反復処理)をしているところはありません。1000x1000ぐらいの2次元配列を掃過して時間発展を求めていくので負荷は一様だと思われます。とにかくCPUのパワーを引き出すようなコードになっていないようです。ただ、CPUのパワーを引き出してないにしてもそれも同じ条件なのだからCPUのスペックが違うならその差は出るだろうと思ったのですが。