STL의 AIX XLC 구현은 다른 플랫폼보다 상당히 느립니다.
-
23-08-2019 - |
문제
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 클래스시피가있을 수 있습니다.
그런 다음 하드 데이터로 우리에게 돌아 오면 더 많은 도움을 줄 수 있습니다.
제휴하지 않습니다 StackOverflow