1

このスーパー質問/回答のベンチマークをいくつか作成しました。正確に8192個の要素をループすると、プログラムが遅くなるのはなぜですか。

プログラムがシングルスレッドになるように、1つのコアでベンチマークを実行したいと思います。ただし、1つのコアの使用率が100%に達するわけではなく、最大で60%を使用します。したがって、私のテストは正確ではありません。

Qt Creatorを使用しており、MinGWリリースモードを使用してコンパイルしています。

パフォーマンスを向上させるために設定するパラメータはありますか?CPUパワーを活用できないのは正常ですか?Qt関連ですか?コードが100%で実行されるのを妨げる何らかの中断または何かがありますか...

これがメインループです

//  horizontal sums for first two lines
for(i=1;i<SIZE*2;i++){ 
    hsumPointer[i]=imgPointer[i-1]+imgPointer[i]+imgPointer[i+1];
}
// rest of the computation
for(;i<totalSize;i++){ 
    // compute horizontal sum for next line
    hsumPointer[i]=imgPointer[i-1]+imgPointer[i]+imgPointer[i+1];
    // final result
    resPointer[i-SIZE]=(hsumPointer[i-SIZE-SIZE]+hsumPointer[i-SIZE]+hsumPointer[i])/9; 
}

これは、SIZE=8193のSIZE*SIZE floatの配列で10回実行され、配列はヒープ上にあります。

4

1 に答える 1

1

タスクマネージャーが1コアで100%のCPU使用率を表示しない理由はいくつか考えられます。

  1. マルチプロセッサシステムがあり、負荷が複数のCPUに分散されています(より制限的なCPUアフィニティを指定しない限り、ほとんどのOSがこれを実行します)。
  2. 実行は、タスクマネージャーの完全なサンプリング期間にまたがるほど長くはありません。
  3. RAMが不足し、大量にスワップしているため、メモリの読み取り/書き込み時にディスクI/Oの待機に多くの時間が費やされています。

または、3つすべての組み合わせである可能性があります。

また、あなたの質問に対するLet_Me_Beのコメントは正しいです-QT関数が呼び出されていないので、ここではQTのせいではありません(読み書きされるオブジェクトが単なる数値データ型であり、オーバーロードされたような派手なC ++オブジェクトではないと仮定しますoperator=())。コードのこの領域で行われる唯一のアクティビティは純粋にCPUベースです(CPUはRAMとの間でデータが送受信されるのを待つのに時間がかかりますが、それはCPUの使用時間としてカウントされます)。上記の条件を除いて、100%のCPU使用率が見込まれます。

于 2012-09-06T12:01:04.673 に答える