AIX的xlC实现STL明显慢于其他平台?

时间:2009-05-21 05:50:33

标签: performance stl aix

在Linux上运行需要1秒才需要45秒才能在AIX上运行。我没有直接挖到那个代码,但是作为一个测试抓住了一个小应用程序,它在另一个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倍(实时)。

更新Reqested Box规格:

    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

3 个答案:

答案 0 :(得分:1)

您的设置存在严重问题,或者您尚未发布真实代码。以下内容几乎立即在一台非常老旧的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;
}

请通过两个编译器运行此代码并报告它输出的数字。

答案 1 :(得分:0)

我怀疑内存分配策略不是很理想。如果添加

会发生什么
vec.reserve(10000);
在for-loop之前

答案 2 :(得分:0)

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

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

然后使用硬数据回复我们,我们可以提供更多帮助。