Gast
2005-07-31, 12:30:51
Hi ich habe einmal folgenden Referenzcode:
Bench::Bench()
{
const int range=46000000;
zahlen=new float[range];
double zahl=65.0001;
for(int i=0;i<range;i++)
{
zahlen[i]=zahl+30.1+i;
}
}
double Bench::get_time_calculation_with_simd()
{
double time1=GetTickCount();
float sum0,sum1,sum2,sum3,sum;
for(int i=0;i<range;i+=4)
{
sum0 += zahlen[i];
sum1 += zahlen[i+1];
sum2 += zahlen[i+2];
sum3 += zahlen[i+3];
}
sum = (sum0+sum1) + (sum2+sum3);
double time2=GetTickCount();
return (time2-time1);
}
double Bench::get_time_calculation_fpu()
{
float sum=0.0;
double time1=GetTickCount();
for(int i=0;i<range;i++)
{
sum+=zahlen[i];
}
double time2=GetTickCount();
return (time2-time1);
}
Der Borland Compilier gibt folgende Zeiten an:
FPU Zeit:438 ms
SIMD Zeit:297 ms
während der Ms Visual Studio 2003 für beide jewahls 0 ms brauche.
Woher kommt dieser enorme Unterschied?
Bench::Bench()
{
const int range=46000000;
zahlen=new float[range];
double zahl=65.0001;
for(int i=0;i<range;i++)
{
zahlen[i]=zahl+30.1+i;
}
}
double Bench::get_time_calculation_with_simd()
{
double time1=GetTickCount();
float sum0,sum1,sum2,sum3,sum;
for(int i=0;i<range;i+=4)
{
sum0 += zahlen[i];
sum1 += zahlen[i+1];
sum2 += zahlen[i+2];
sum3 += zahlen[i+3];
}
sum = (sum0+sum1) + (sum2+sum3);
double time2=GetTickCount();
return (time2-time1);
}
double Bench::get_time_calculation_fpu()
{
float sum=0.0;
double time1=GetTickCount();
for(int i=0;i<range;i++)
{
sum+=zahlen[i];
}
double time2=GetTickCount();
return (time2-time1);
}
Der Borland Compilier gibt folgende Zeiten an:
FPU Zeit:438 ms
SIMD Zeit:297 ms
während der Ms Visual Studio 2003 für beide jewahls 0 ms brauche.
Woher kommt dieser enorme Unterschied?