I am currently running a computationally intensive application on Linux and Windows on x86 and x86_64. My expectation was that by switching from GCC/MinGW to ICC the overall runtime of the application would decrease. While this turned out to be very true on Linux I got the opposite effect on Windows. A few more facts:
The application is called infernal (http://infernal.janelia.org/) and searches DNA sequence databases.
Linux: ICC 11.1.073, GCC 4.3.4
Windows: ICC 11.1.067, MinGW 4.6.0
Linux: ICC (-m64 -O2 -static -msse2 -funroll-loops -g0), GCC (-m64 -O2 -static -msse2)
Windows: ICC (/Qstd=c99 /O2 /arch:SSE2 /MT /Qunroll), MinGW (-m64 -O2 -static -msse2)
The following numbers show the average runtime of the application for a specific input on the same hardware for both operating systems (numbers are in seconds):
Linux: ICC (5880), GCC (6158) => 4.5% better
Windows: ICC (6042), MinGW (4938) => 22.4% worse
I made quite a few tests with different input data and the result is almost always the same: On Linux, the ICC compiled binary is about 5% to 10% faster, on Windows, the ICC compiled binary is sometimes even more than 40% slower.
I know that it might not really be a fair comparison, also given the fact that the versions for both ICC and GCC/MinGW are not identical, but I was wondering whether you have any explanation for this behavior.
If you need more information I'll be glad to provide you with more details.