Intel® C++ Compiler
Community support and assistance for creating C++ code that runs on platforms based on Intel® processors.
7956 Discussions

Not so good (honestly weird) optimization in comparison with VC++

ksubox
Beginner
230 Views
I made simplest test with Intel 10.0.025 C++ compiler.
And I got VEEEERY bad results in comparison with current VC++ 8 on my Q6600:

1. Non-virtual member function: VC8 - 7980ms, ICC10 - 25750ms
2. Virtual member function: VC8 - 23820ms,ICC10 - 24150
3. Static function: VC8 - 7250ms, ICC - 22140ms

Could you fix this SMALL issue ?

Here is program, you have to increase stack (I used 20000000) and link with winmm.lib:
//--------------------------------------------------------------------
#include "stdafx.h"

#include
#include
#include
#include

class Test {
public:
// Ackermann function
int Ack(int M, int N) {
return(M ? (Ack(M-1,N ? Ack(M,(N-1)) : 1)) : N+1);
}

virtual int Ackv(int M, int N) {
return(M ? (Ackv(M-1,N ? Ackv(M,(N-1)) : 1)) : N+1);
}

};

static int Acks(int M, int N) {
return(M ? (Acks(M-1,N ? Acks(M,(N-1)) : 1)) : N+1);
}

int s_iresult;

int _tmain(int argc, _TCHAR* argv[]) {
DWORD stime = 0,etime = 0;
int cnt;
{
Test me;
cnt = 13;
stime = timeGetTime();
s_iresult = me.Ack(3,cnt);
printf("Ackermann: %d = %u ms %d ",cnt,timeGetTime()-stime,s_iresult);
}
{
Test me;
cnt = 13;
stime = timeGetTime();
s_iresult = me.Ackv(3,cnt);
printf("Ackermann virtual: %d = %u ms %d ",cnt,timeGetTime()-stime,s_iresult);
}
{
cnt = 13;
stime = timeGetTime();
s_iresult = Acks(3,cnt);
printf("Ackermann static: %d = %u ms %d ",cnt,timeGetTime()-stime,s_iresult);
}
char c = getchar();
return 0;
}
//--------------------------------------------------------------------

0 Kudos
1 Reply
Dale_S_Intel
Employee
230 Views
Well, it looks like a performance issue on our part. I've analyzed it and developers are working on a fix. I'll post here when the fix is released.

Thanks for pointing out the problem!

Dale
0 Kudos
Reply