マルチコアCPU環境でマルチスレッド未対応バッチプログラム実行した場合のCPU利用について

Anonymous
2023-10-25T13:50:27+00:00

すみません。ご存じの方いたら教えてください。

Windows Server 2016(24コア)で、マルチスレッド未対応のVB.NETのバッチプログラムが動いています。

この場合、マルチコアCPUの環境であっても利用されるのはシングルコアCPUとなるのでしょうか?

**モデレーター注**

この質問は Windows / その他/不明 / プログラム の他の Windows アプリ に投稿されましたが、内容から判断してこちらのカテゴリに移動いたしました。

適切なカテゴリに投稿すると、返信や回答が得られやすくなり、同じ質問を持つ他のユーザーの参考にもなります。

Windows Server のパフォーマンスとメンテナンスのアプリケーション テクノロジと互換性

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。 プライバシーを保護するために、移行された質問のユーザー プロファイルは匿名化されます。

0 件のコメント コメントはありません
{count} 件の投票

6 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2023-10-25T15:23:38+00:00

    マルチスレッド未対応のVB.NETのバッチプログラムが動いています。

    この質問で一番重要な「マルチスレッド未対応のVB.NETのバッチプログラム」が、どの様なプログラムなのかが不明で、何を心配しているのかがサッパリわかりませんが、現在ははかなり複雑な、C++やC#等と組み合わせて難易度が高い構造にわざわざしない限り、VB.NETだけで純粋に「シングルコア」だけしか使わないプログラムを作るのは困難なため、一般的には複数スレッド(複数コアとほぼ同義)で動作すると推測します。

    現在はファイル入出力や通信処理、キーボードマウス、画像処理が入るだけで、複数スレッド(複数コア)で動作します。

    0 件のコメント コメントはありません
  2. Anonymous
    2023-10-25T22:04:50+00:00

    「マルチコア CPU」というのは「処理できるプロセッサ(コア)が物理的に複数存在する CPU」を指す名称です。

    物理的な存在に対する名称ですので、それがソフトウェアによって「シングルコア CPU」に変わることはあり得ません。
    (実行状況によって、物理的な存在・状態が変わることはあり得ません)

    いわゆる「マルチスレッド」は、進捗を表示したり、キャンセル可能な状態を維持したりしながらも処理を実行する、あるいは複数のスレッドで処理を並列に実行して合計処理時間を短縮するなど、スレッドを2つ以上、明示的に活用することを指すと考えられます。

    これに非対応ということは、処理が単一のスレッドで実行されるので、時間短縮効果がない、あるいは GUI が固まったように見えると言うだけです。

    たくさんあるはずのコアを活用せず、どれか1つのコアだけを使って実行するイメージです。

    (わかりやすさ優先で、正確な表現ではありません)

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  3. Anonymous
    2023-10-26T00:15:16+00:00

    ご回答有難うございます。

    言葉足らずで申し訳ありません。

    「マルチスレッド未対応のVB.NETのバッチプログラム」の性能の提示を求められています。

    パフォーマンスモニタで確認した所、OSのtotalのCPU使用率の最大値を

    「マルチスレッド未対応のVB.NETのバッチプログラム」のCPU使用率が上回っていました。

    OSのtotalのCPU使用率は各コアのCPU使用率の平均値だと考えているのですが

    「マルチスレッド未対応のVB.NETのバッチプログラム」はシングルコアCPUの使用率

    になっているためCPU使用率が上回って見えているのではないか知りたかったのです。

    0 件のコメント コメントはありません
  4. Anonymous
    2023-10-26T01:21:52+00:00

    『OSのtotal』といっているのは、[Processeor]の[%Processor Time]のことで、

    『「マルチスレッド未対応のVB.NETのバッチプログラム」のCPU使用率』が[Process]の[%Processor Time]の特定のプロセスの値であるなら意味が違います。

    [Processeor]の[%Processor Time]の[_Total]は、プロセッサがアイドル以外のスレッドを実行するために使用した経過時間の割合です。 「プロセッサ単位で集計されているアイドル以外の経過時間の合計」の「アイドル状態を含めた経過時間の合計」に対する比率といってもいいです。

    [Process]の[%Processor Time]は、該当プロセスのスレッドすべてが、命令を実行するためにプロセッサを使用した経過時間の割合です。 「プロセッサ単位で集計されているアイドル以外の経過時間の合計」に対する「該当するプロセスが使用した経過時間の合計」の割合とも言えます。

    ようするに、[Processeor]の[%Processor Time]のうちのプロセス毎の内訳が[Process]の[%Processor Time]になります。ベースが違うので直接には比較できる数値ではありません。

    ベースをそろえるならば、[Processeor]の[%Processor Time]に[Process]の[%Processor Time]を掛け合わせればいいでしょう。[Processeor]の[%Processor Time]が80%で[Process]の[%Processor Time]が90%なら、

    0.80*0.90=0.72

    CPUの稼働時間の80%で各プロセスが実行されていて、該当するプロセスがCPUの時間の72%を消費して他のプロセスが残りの8%を消費しているということです。

    0 件のコメント コメントはありません
  5. Anonymous
    2023-10-26T08:23:55+00:00

    「マルチスレッド未対応のVB.NETのバッチプログラム」の性能の提示を求められています。

    問題は、2つあります。

    ひとつ目は、このまま押し通すつもりでしょうが「マルチスレッド未対応のVB.NETのバッチプログラム」に関する情報が一切ないこと。

    もう一つは、なぜ(何を目的として)(何の役に立つ?)その様な時代遅れの性能評価基準を求められるのか?ですね。

    そして解決策です。

    アプリケーションの挙動を評価したり、マルチスレッドの問題点を究明することが目的であれば、「CPU使用率」などという大雑把なツールの表示に悩むのではなく、Windows Performance Monitor の様な専門ツールを使用することをお勧めします。

    パフォーマンスの監視を構成する

    Windows Server のパフォーマンスを監視する - Training

    0 件のコメント コメントはありません