Внедрение STL в AIX xlC значительно медленнее, чем на других платформах?

StackOverflow https://stackoverflow.com/questions/891554

  •  23-08-2019
  •  | 
  •  

Вопрос

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

Другие советы

Либо с вашей настройкой что-то серьезно не так, либо вы не опубликовали реальный код.Следующее выполняется почти мгновенно на очень старом ноутбуке 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;
}

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top