이전에 일부 컴파일러는 x86_64 아키텍처의 부동 소수점 연산에 SSE2 확장을 사용한다고 들었으므로이 간단한 코드를 사용하여 성능 차이를 확인했습니다.x86 및 x86_64에서 float와 double의 성능 차이
BIOS를 통해 Intel SpeedStep 기술을 사용할 수 없으며 시스템로드가 내 테스트와 거의 같습니다. OpenSuSE 64 비트에서 GCC 4.8을 사용하고 있습니다.
FPU 작업이 많은 프로그램을 작성 중이며이 테스트가 유효한지 알고 싶습니다.
각 아키텍처에서 float
과 double
사이의 성능 차이에 대한 정보는 높이 평가됩니다.
코드 :
#include <iostream>
#include <sys/time.h>
#include <vector>
#include <cstdlib>
using namespace std;
int main()
{
timeval t1, t2;
double elapsedTime;
double TotalTime = 0;
for(int j=0 ; j < 100 ; j++)
{
// start timer
gettimeofday(&t1, NULL);
vector<float> RealVec;
float temp;
for (int i = 0; i < 1000000; i++)
{
temp = static_cast <float> (rand())/(static_cast <float> (RAND_MAX));
RealVec.push_back(temp);
}
for (int i = 0; i < 1000000; i++)
{
RealVec[i] = (RealVec[i]*2-435.345345)/15.75;
}
// stop timer
gettimeofday(&t2, NULL);
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t2.tv_usec - t1.tv_usec)/1000.0; // us to ms
TotalTime = TotalTime + elapsedTime;
}
cout << TotalTime/100 << " ms.\n";
return 0;
}
및 결과 :
32 비트 더블
157.781 MS. 151.994 ms. 152.244 ms.
32 비트 플로트
149.896 ms. 148.489 ms. 161.086.
64 비트 더블
110.125 ms. 111.612 ms. 113.818 ms.
64 비트 플로트
110.393 ms. 106.778 ms. 107.833 ms.
LOL @ "flouting point orations".... – twalberg