私がほとんど知らないトピックについて質問して申し訳ありませんが、この考えは本当に私を悩ませており、インターネット上で答えを見つけることができませんでした.
背景: 私は、コンピューター サイエンスの研究をしている友人の 1 人と話していました。私は主にその場しのぎの開発を行っているため、CS の概念の大部分は機能レベルで理解しています (動作方法よりも使用方法を知っています)。彼は、単一のスレッドで実行されていた「十分に並列化された」アルゴリズムを複数のスレッドで実行されるアルゴリズムに変換しても、彼が期待していた処理速度の向上にはつながらなかったと述べていました。
理由: このアルゴリズムを実行しているコンピューターのアーキテクチャを尋ねたところ、16 コア (仮想化されていない) と答えました。マルチコア プロセッサについて私が知っていることによると、複数のコアで実行されるアルゴリズムの処理速度の向上は、並列化の程度にほぼ比例するはずです。
質問: 「十分に並列化」され、真のマルチコア プロセッサで実行するように正しくプログラムされたアルゴリズムが、数倍速く実行されないのはどうしてでしょうか? ここに欠けている情報がありますか、それとも実装に問題がある可能性が高いですか?
その他:スレッドが個々のコアが利用できるよりも多くの電力を消費している可能性があるかどうかを尋ねたところ、明らかに各コアは 3.4 GHz で動作していました。これは、アルゴリズムが必要とする量をはるかに超えており、診断が実行されている場合、実行時にコアが使い果たされることはありません。