1

Linux で実行するのに 1 秒かかるものは、AIX で実行するには 45 秒かかります。私はそのコードを直接掘り下げていませんが、テストとして、別のSOの質問からほとんど何もしない小さなアプリケーションを取得しました:

int main ( int argc, char **argv)
{
int i = 0;
std::vector<int> vec;
vec.push_back(6);
vec.push_back(-17);
vec.push_back(12);

for (i=0;i<100000;i++)
   vec.push_back(i);

vec.erase(vec.begin() + 1);
return 0;
}

私は古いコンパイラ (7.0.0.10) を使用していますが、g++ 4.2 の同じコードと比較して、コードの実行速度がどれほど遅いか信じられません。

誰もこれを見たことがありますか?コンパイラをアップグレードするには、多少の作業が必要です。サンプル コードは、ほとんど負荷のないシステムでは約 20 倍 (リアルタイム) 遅くなります。

要求されたボックス仕様の更新:

    プロセッサー数: 8
    プロセッサのクロック速度: 3504 MHz
    CPU タイプ: 64 ビット
    カーネル タイプ: 64 ビット
    メモリーサイズ: 63232MB
    適切なメモリ サイズ: 63232 MB
    プラットフォーム ファームウェア レベル: EM340_041
    ファームウェアのバージョン: IBM、EM340_041
    コンソール ログイン: 有効にする
    自動再起動: true
    フルコア: true

AIX での出力:

real    0m0.52s
user    0m0.51s
sys     0m0.00s

Linux での出力:

 0.00s real     0.01s user     0.00s system
4

3 に答える 3

1

セットアップに重大な問題があるか、実際のコードを投稿していません。以下は、メモリがほとんどない非常に古い900MhzPentiumラップトップでほぼ瞬時に実行されます。

#include <iostream>
#include <vector>
#include <ctime>
using namespace std;;

int main ( int argc, char **argv) {

    time_t now1 = time(0);
    std::vector<int> vec;
    vec.push_back(6);
    vec.push_back(-17);
    vec.push_back(12);
    for ( int i = 0; i<10000; i++) {
      vec.push_back(i);
    }

    time_t now2 = time(0);
    vec.erase(vec.begin() + 1);

    time_t now3 = time(0);
    cout << (now2 - now1) << " " << (now3 - now2)  << endl;
}

このコードを両方のコンパイラで実行し、出力される数値を報告してください。

于 2009-05-21T07:47:49.823 に答える
0

次善のメモリ割り当て戦略が疑われます。追加するとどうなるか

vec.reserve(10000);

forループの前?

于 2009-05-21T06:47:52.077 に答える
0

問題を絞り込むためのいくつかの提案:

  • プログラムで時間を使用し、経過時間ではなく、システム/ユーザー時間を調べます。そうすることで、より良い兆候が得られます。
  • system("date")3 つの最初の push_back ステートメントのそれぞれの前、for ループの前、erase の前、および return の前にa を置きます。これにより、問題の原因となっている操作が表示されます。
  • 実行しているハードウェアも教えてください。286 クラ​​スの pSeries があるかもしれません。

その後、ハードデータをご連絡いただければ、さらにお手伝いさせていただきます。

于 2009-05-21T05:58:25.093 に答える