Что объясняет добавленное время выполнения первого набора данных? Инструкции по сборке одинаковы.
Если флаг DN_FLUSH не включен, первый набор данных занимает 63 миллисекунды, второй набор занимает 15 миллисекунд.
При установленном флаге DN_FLUSH первый набор данных занимает 15 миллисекунд, второй набор занимает ~ 0 миллисекунд.
Следовательно, в обоих случаях время выполнения первого набора данных намного больше.
Есть ли способ уменьшить время выполнения, чтобы оно было ближе к второму набору данных?
Я использую C ++ Visual Studio 2005, / arch: SSE2 / fp: быстро работает на Intel Core 2 Duo T7700 @ 2,4 ГГц Windows XP Pro.
#define NUMLOOPS 1000000
// Denormal values flushed to zero by hardware on ALPHA and x86
// processors with SSE2 support. Ignored on other x86 platforms
// Setting this decreases execution time from 63 milliseconds to 16 millisecond
// _controlfp(_DN_FLUSH, _MCW_DN);
float denormal = 1.0e-38;
float denormalTwo = 1.0e-39;
float denormalThree = 1;
tickStart = GetTickCount();
// Run First Calculation Loop
for (loops=0; loops < NUMLOOPS; loops++)
{
denormalThree = denormal - denormalTwo;
}
// Get execution time
duration = GetTickCount()-tickStart;
printf("Duration = %dms\n", duration);
float normal = 1.0e-10;
float normalTwo = 1.0e-2;
float normalThree = 1;
tickStart = GetTickCount();
// Run Second Calculation Loop
for (loops=0; loops < NUMLOOPS; loops++)
{
normalThree = normal - normalTwo;
}
// Get execution time
duration = GetTickCount()-tickStart;
printf("Duration = %dms\n", duration);