tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6で製作した計算用アプリを複数起動したときの挙動
記事No16682
投稿日: 2024/06/22(Sat) 21:59
投稿者やす
VB2の時代からVB6まで、30年ほど使用しているものです。
ある画像を読み込んで、そのなかから所定の画像を抽出するアプリを作成して、複数の画像をひとつづつひたすら処理を行うアプリを作りました。
たくさんの画像を手分けして処理するために、スレッド数が多い性能の高いパソコンで、アプリを複数立ち上げて処理をした場合、1つのアプリで処理するよりもスレッド数の多いCPUを積んだPCの恩恵を得られるものなのでしょうか?
もし効果あるとしたら次に購入するPCをそうした高性能PCにしようと思っています。
現在使用しているPCは、DELLノートPCで、Core i7-8565U RAM:16G です。

どうぞよろしくお願いします。

[ツリー表示へ]
タイトルRe: VB6で製作した計算用アプリを複数起動したときの挙動
記事No16683
投稿日: 2024/06/24(Mon) 13:56
投稿者魔界の仮面弁士
> たくさんの画像を手分けして処理するために、スレッド数が多い性能の高いパソコンで、アプリを複数立ち上げて処理をした場合、

EXE を複数起動するということですね?(複数プロセスの起動)


> 1つのアプリで処理するよりもスレッド数の多いCPUを積んだPCの恩恵を得られるものなのでしょうか?
実際に試さないと確かなことは言えませんが、幾らかの恩恵は受けられると思います。

しかし、それがコストパフォーマンスに見合うかどうかは、
各種条件に左右されますので、どの程度変わるのかを具体的にするには、
実際に測定しないと見えてこない話です。


ということで、無責任な物言いになってしまいますが
『各種前提条件が明確でない以上、やってみなければ分からない』
という回答になります。


> Core i7-8565U
2018年後半にリリースされた、
物理コア数 4、スレッド総数 8 のプロセッサですね。

現状の環境でパフォーマンス モニタを仕掛けて、実際に
複数の EXE を起動して測定してみた場合、
それぞれの論理プロセッサごとの負荷率はどうでしたか?
EXE を幾つ起動した時が最速でしたか?

EXE が 1 つでも 3 つでも大差無かったのであれば、
CPU の論理スレッド数を増やしても効果は薄いと想像します。


プロセッサそのものの処理速度を重視した方が良いのか、
プロセッサのコア数を重視した方が良いのか、
プログラムそのものを見直すべきなのかは、
実際に「計測」しなければ見えてきません。

たとえば
 「大量の画像をディスクから読み取る時間」
 「複数の画像をメモリにロードする時間」
が、画像処理本体部以上にボトルネックになっている場合は、
ストレージの高速化やメモリの増強の方が効果が高いかもしれません。


そうした足回りが、さほどボトルネックにならないという前提条件であれば、
マルチプロセス処理にすることで、コア数の多い CPU とすることで、
並列処理の効率はある程度得られるかと思います。


あるいはたとえば、画像一つ一つに対して起動と終了を繰り返すような
実装になっていた場合、プロセスの起動と終了のコストが高くつくため、
効率が悪くなる可能性もあるでしょう。

1 画像ごとに EXE を起動するよりは、起動されたそれぞれのプロセスが
複数の画像を順次処理する形にした方が効率的には良いわけですが、
かといって並行処理のためにプロセス間で処理状況を確認しあうような
実装にしてしまうと、今度はプロセス間のやり取りが隘路になりかねません。

(かといって VB6 だと、シングルプロセスでマルチスレッド処理を実装するのも困難…)


いずれにせよ、「どこが遅くなる要因で、どこを見直せば早くなるのか」を
見極めてから検討した方が良いと思いますよ。

[ツリー表示へ]
タイトルRe^2: VB6で製作した計算用アプリを複数起動したときの挙動
記事No16684
投稿日: 2024/06/25(Tue) 00:27
投稿者やす
魔界の仮面弁士さん

詳しいご説明ありがとうございました。


まずは既存のPC環境で複数を起動してパフォーマンスモニタで見てみようと思います。

そのうえで、

「どこが遅くなる要因で、どこを見直せば早くなるのか」

について、記載いただいたような様々な要因とそれぞれの技術的な傾向について考慮して、必要であればプログラムを変更することも検討したいと思います。

測定等、進捗がありましたらまたご報告いたします。

ありがとうございました。



> > たくさんの画像を手分けして処理するために、スレッド数が多い性能の高いパソコンで、アプリを複数立ち上げて処理をした場合、
>
> EXE を複数起動するということですね?(複数プロセスの起動)
>
>
> > 1つのアプリで処理するよりもスレッド数の多いCPUを積んだPCの恩恵を得られるものなのでしょうか?
> 実際に試さないと確かなことは言えませんが、幾らかの恩恵は受けられると思います。
>
> しかし、それがコストパフォーマンスに見合うかどうかは、
> 各種条件に左右されますので、どの程度変わるのかを具体的にするには、
> 実際に測定しないと見えてこない話です。
>
>
> ということで、無責任な物言いになってしまいますが
> 『各種前提条件が明確でない以上、やってみなければ分からない』
> という回答になります。
>
>
> > Core i7-8565U
> 2018年後半にリリースされた、
> 物理コア数 4、スレッド総数 8 のプロセッサですね。
>
> 現状の環境でパフォーマンス モニタを仕掛けて、実際に
> 複数の EXE を起動して測定してみた場合、
> それぞれの論理プロセッサごとの負荷率はどうでしたか?
> EXE を幾つ起動した時が最速でしたか?
>
> EXE が 1 つでも 3 つでも大差無かったのであれば、
> CPU の論理スレッド数を増やしても効果は薄いと想像します。
>
>
> プロセッサそのものの処理速度を重視した方が良いのか、
> プロセッサのコア数を重視した方が良いのか、
> プログラムそのものを見直すべきなのかは、
> 実際に「計測」しなければ見えてきません。
>
> たとえば
>  「大量の画像をディスクから読み取る時間」
>  「複数の画像をメモリにロードする時間」
> が、画像処理本体部以上にボトルネックになっている場合は、
> ストレージの高速化やメモリの増強の方が効果が高いかもしれません。
>
>
> そうした足回りが、さほどボトルネックにならないという前提条件であれば、
> マルチプロセス処理にすることで、コア数の多い CPU とすることで、
> 並列処理の効率はある程度得られるかと思います。
>
>
> あるいはたとえば、画像一つ一つに対して起動と終了を繰り返すような
> 実装になっていた場合、プロセスの起動と終了のコストが高くつくため、
> 効率が悪くなる可能性もあるでしょう。
>
> 1 画像ごとに EXE を起動するよりは、起動されたそれぞれのプロセスが
> 複数の画像を順次処理する形にした方が効率的には良いわけですが、
> かといって並行処理のためにプロセス間で処理状況を確認しあうような
> 実装にしてしまうと、今度はプロセス間のやり取りが隘路になりかねません。
>
> (かといって VB6 だと、シングルプロセスでマルチスレッド処理を実装するのも困難…)
>
>
> いずれにせよ、「どこが遅くなる要因で、どこを見直せば早くなるのか」を
> 見極めてから検討した方が良いと思いますよ。

[ツリー表示へ]