在 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 倍(实时)。

更新所需的盒子规格:

    Number Of Processors: 8
    Processor Clock Speed: 3504 MHz
    CPU Type: 64-bit
    Kernel Type: 64-bit
    Memory Size: 63232 MB
    Good Memory Size: 63232 MB
    Platform Firmware level: EM340_041
    Firmware Version: IBM,EM340_041
    Console Login: enable
    Auto Restart: true
    Full Core: true

AIX 上的输出:

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

Linux 上的输出:

 0.00s real     0.01s user     0.00s system
有帮助吗?

解决方案

我怀疑次优的内存分配策略。如果添加会发生什么

vec.reserve(10000);

for循环之前?

其他提示

要么有一些严重的问题你的设置,或者您还没有发布真正的代码。如下因素执行几乎立即在一个很旧的奔腾900Mhz的笔记本电脑内存小的:

#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;
}

请运行通过两种编译该代码,并报告它输出的数字。

缩小问题范围的一些建议:

  • 在程序上使用时间并查看系统/用户时间, 不是 经过的时间。这会给你一个更好的指示。
  • 放一个 system("date") 在三个初始push_back 语句中的每一个之前、for 循环之前、擦除之前和返回之前。这将显示哪个操作导致了问题。
  • 请告诉我们您正在运行的硬件。您可能有一个 286 级的 pSeries。

然后向我们提供硬数据,我们可以提供更多帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top