0

複雑な問題を解決するプログラムを書きました。このプログラムは単なる ac# コンソール アプリケーションであり、計算部分が終了するまで console.write を実行しないため、出力がパフォーマンスに影響することはありません。プログラムは次のようになります。

static void Main(string[] args)
        {

            Thread WorkerThread = new Thread(new ThreadStart(Run), StackSize);
            WorkerThread.Priority = ThreadPriority.Highest;
            WorkerThread.Start();
            Console.WriteLine("Worker thread is runing...");
            WorkerThread.Join();
        }

実行に 3 分かかりますが、タスク マネージャーを開くと、CPU 時間の 12% しかかかっていないことがわかります。私は実際に、6G 3 チャネル DDR3 メモリを搭載した i7 Intel CPU を持っています。ハードウェアの使用率を改善するにはどうすればよいか考えています。

どうもありがとう

4

4 に答える 4

1

お使いの i7 はハイパー スレッディングをサポートしているため、クアッドコア i7 は 8 つのスレッドを同時に処理できます。

あなたのプログラムは 1 つのスレッドを使用しているように見えますが、8 つの利用可能な「仮想」CPU の 1 つを使用しているため、Windows タスク マネージャーは 12 - 13 % の CPU 使用率を表示します。

HeavyWave が言ったように、より高い CPU 使用率を得るには、計算を並列実行できるより多くのスレッドに分割する方法を見つける必要があります。

于 2010-04-01T21:33:19.420 に答える
1

Intel i7 は 8 コア (ハイパースレッディングにより、それぞれが 2 コアとして報告される 4 つの物理コア) として報告されます。

1 つのスレッドを開始することで、全体として CPU の 12.5% を取得する必要があります。これは、あなたが説明するものとほぼ完全に一致しています。

すべてのリソースを消費する複数のコアで 1 つのスレッドを実行することはできません。より多くのリソースを使用する場合は、複数のスレッドを開始する必要があります。理想的には、使用率を 100% に近づけるには、最低 4 スレッド、多くの場合 6 から 8 スレッドが必要です。

これを行うには、「複雑な問題」を並列化可能な命令パスに分割する方法を見つける必要があります。

于 2010-04-01T21:42:57.737 に答える
0

1 つのスレッドは 1 つのコアしか占有できないため、タスクを複数のスレッドに分割して CPU を利用する必要があります。アルゴリズムで IO 操作を行っていないと確信していますか?

于 2010-04-01T02:56:27.263 に答える
0

何に時間を費やしているかをパーセンテージで調べます。これは、プラットフォームに関係なく、私が使用する方法です。I/O をまったく行っていないと確信しているプログラムがありましたが、何だと思いますか? 私は、最もあいまいな理由でそうでした。

于 2010-04-01T21:14:48.387 に答える