0

Qt を使用してクロスプラットフォームのフラクタル エクスプローラーを開発しています。特に Windows XP (MSVC Express 2010 でコンパイルされたプログラム) でシングル コア CPU を実行しているときにパフォーマンスの問題が発生しています。他のバージョンの Windows は試していません。2 つのコアを使用すると、プログラムは正常に動作します。また、1 コアまたは 2 コア (GCC でコンパイル) の Linux でも問題なく動作します。

パフォーマンスの問題は、計算スレッドのシグナルを介してウィジェットのスロットを呼び出すことに関係しています。ウィジェットには QImage が含まれており、そのピクセルへのポインターを計算スレッドに渡します。スレッドはフラクタルを計算し、ピクセルを画像にプロットします。各行の終わりに、スレッドはシグナルをウィジェットに送信して、メイン スレッドの表示を更新するように指示します。私が理解しているように、これはキュー接続です。

Windows と単一の CPU では、更新は非常に遅く、計算よりもはるかに遅くなります。プログラムが使用できなくなります。

関連するコードは、Qt ドキュメントのマンデルブロの例に似ていますが、Qimage はスレッドではなくウィジェットにあり、QImage を QPixmap に変換しないため、シグナルに引数がないことを除きます。

問題が何であるか、そしてそれを解決する方法について何か考えを持っている人はいますか? スケジューリング、タイムスライスの割り当てと関係がありますか? MSVC に設定が必要なコンパイラ フラグはありますか? または、プログラムを何らかの方法で変更する必要がありますか?

どうもありがとう!

4

1 に答える 1

0

更新は計算よりも遅いとおっしゃいましたが、どれくらい遅いですか? 包括的なプロファイリングを行って、ボトルネックが正確にどこで発生しているかを確認しましたか? 大雑把なグーグルは、あなたを助けるかもしれないこのプロファイラーを見つけます。

古い CPU の場合、スレッド コンテキストの切り替えは非常にコストがかかることに注意してください。これはあなたの問題の一部かもしれませんが、詳細はわかりません。

于 2011-08-28T20:04:49.947 に答える