
私は小さなCPUの4つのコアをすべて使用して、Windows上でうまく動作する大規模なフラットファイルを処理するマルチスレッドC ++アプリケーション(pThreadsを使用)を持っています。顧客はRed Hat 64 Xeon CPUシステムで同じコードを実行したいと考えていました。そのため、ここでコンパイルし(g ++)、VMWareのUbuntuで実行し、コードは4つのコアのうちの1つだけを使用しました。だから私はそれがVMWareの問題だと思い、クライアントにコードを送信しました。同じことを行います(リモートでわかる限り、mpstat -P ALLはCPUがほとんどロードされていないことを示します)。 Red Hatがスレッドを分散させるために強制する必要があることはありますか?私が何かを見逃しているのでしょうか?次に、「良い」優先順位を変更しようとしています。ところで何か抜けたような感じがします。
コードを投稿できますが、前述したように、pThreadsなどを使用すると、Windowsでうまく動作します。
答え1
これがあなたのVM環境やコードに問題があるかどうかを診断しましょう。仮想マシンについて考慮すべきいくつかの点は次のとおりです。
複数のCPUへのアクセスを許可するようにvmwareを設定しましたか?最新バージョンの経験はありませんが、以前は特に許可する必要がありました。 VirtualBoxには、ゲストが使用できるCPU数の仮想マシン構成オプションがあります。
cat /proc/cpuinfo
Ubuntu仮想マシンに複数のCPUがある場合はどうなりますか?一般的な作業(カーネルソースに移動してカーネルコンパイルを実行するなど)を実行している場合は、複数のCPUを正しく使用できますか
make -j10
?
このようなエラーが発生した場合、コードに問題があるのではなく、仮想マシンが正しく構成されていません。