AIX xlC реализация STL значительно медленнее, чем другие платформы? - PullRequest
1 голос
/ 21 мая 2009

То, что для запуска в 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

Ответы [ 3 ]

1 голос
/ 21 мая 2009

Либо что-то серьезно не так с вашей настройкой, либо вы не опубликовали реальный код. Слежение выполняется почти мгновенно на очень старом ноутбуке Pentium 900 МГц с небольшим объемом памяти:

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

Пожалуйста, запустите этот код через оба компилятора и сообщите числа, которые он выводит.

0 голосов
/ 21 мая 2009

Я подозреваю, что неоптимальная стратегия выделения памяти. Что произойдет, если вы добавите

vec.reserve(10000);

перед циклом for?

0 голосов
/ 21 мая 2009

Несколько предложений, чтобы сузить проблему:

  • Используйте время в вашей программе и посмотрите время системы / пользователя, не истекшее время. Это даст вам лучшее представление.
  • ставьте system("date") перед каждым из трех начальных операторов push_back, перед циклом for, перед стиранием и перед возвратом. Это покажет, какая операция вызывает проблему.
  • Скажите нам, на каком оборудовании вы работаете. У вас может быть pSeries класса 286.

Тогда вернитесь к нам с точными данными, и мы сможем помочь еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...