문제

Linux에서 실행하는 데 1 초가 걸리는 것은 AIX에서 실행하는 데 45 초가 걸립니다. 나는 그 코드에 직접 파고 들어 보지 않았지만 테스트로서 다른 질문에서 거의하지 않는 작은 응용 프로그램을 잡았습니다.

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
도움이 되었습니까?

해결책

차선책의 메모리 할당 전략이 의심됩니다. 추가하면 어떻게됩니까?

vec.reserve(10000);

for-loop 전에?

다른 팁

설정에 심각한 문제가 있거나 실제 코드를 게시하지 않았습니다. Foling은 메모리가 거의없는 아주 오래된 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;
}

두 컴파일러를 통해이 코드를 실행하고 출력 한 숫자를보고하십시오.

문제를 좁히기위한 몇 가지 제안 :

  • 프로그램에서 시간을 사용하고 시스템/사용자 시간을 살펴보십시오. ~ 아니다 경과 시간. 그것은 당신에게 더 나은 징후를 줄 것입니다.
  • a system("date") 세 개의 초기 푸시 _back 문서 각각, for 루프 이전, 지우기 전 및 반환 전. 이것은 어떤 작업이 문제를 일으키는지를 보여줍니다.
  • 실행중인 하드웨어도 알려주십시오. 당신은 286 클래스시피가있을 수 있습니다.

그런 다음 하드 데이터로 우리에게 돌아 오면 더 많은 도움을 줄 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top