harware vs software advances

Discussion of chess software programming and technical issues.

Moderator: Ras

wgarvin
Posts: 838
Joined: Thu Jul 05, 2007 5:03 pm
Location: British Columbia, Canada

Re: harware vs software advances

Post by wgarvin »

rbarreira wrote: gcc 4.5 generates much faster bitboard code than gcc 4.1 did for example. Using hardware popcnt can give another 10% boost, so I think 50% from better compilers and better use of modern hardware is definitely possible. In fact it should be more, if the transition from 32 bit to 64 bit is also counted.
gcc 4.1 is too new for this discussion anyways (Feb 28, 2006).

gcc 2.95.3 was released on March 16, 2001 and gcc 3.0 on June 18, 2001.

If you go back as far as 1995, I vaguely recollect that gcc was not too great on x86 -- but anyways, gcc 2.7.0 was released on June 16, 1995 and gcc 2.7.2 was released on November 26, 1995. According to wikipedia, the Linux kernel version 1.0 was in 1994 and 2.0 was in 1996. But in those days, most x86 users were running Windows 3.11 or Windows 95.

For Windows users, the first native win32 version of mingw was based on gcc 2.8.1. The first version that I remember regularly using was based on gcc 2.95.

As far as Microsoft compilers goes, the popular VS 6.0 compiler was released around mid-1998. Its optimizing capability was pretty weak compared to the modern compilers of today. The first version of VS .NET came out in February 2002, and an improved version came out in April 2003. The compiler got better in both VS 2005 and VS 2008.

There's also the Intel compiler, for which version 6.0 was in April 2002. (I don't remember much about this compiler from earlier than that... does anyone know if it was any good? I remember that it generated code often 10% bigger than MSVC 6.0 when we tested them in 1998, and we were more concerned with code size for that project so we didn't use the Intel compiler much after noticing that). Anyway, version 9.0 was in June 2005.


...One thing that all of these compilers have in common is that they have all improved considerably over the last 10-15 years. Also, they are now tuned for generating best code on current hardware (generating the fastest code on obsolete hardware is not their main focus, obviously). If you're going to run a 15-year-old program on modern hardware, recompiling it with a current compiler should probably be part of the test. Going in the opposite direction is more difficult because the early C++ compilers were less compliant and might not accept a modern program without some modifications (especially if it makes use of templates or other modern language features).