Why There Is No 64bit Support for Windows
Clone this wiki locally
The short story is that ATLAS does not support building for 64bit under Windows, and given how complex the build process is, there is no easy way to fix this.
The long story is that there is no native 64bit version of cygwin which I use to compile ATLAS. Using gcc actually makes a lot of sense since ATLAS is quite optimized for gcc. There exists mingw-w64, lately also available as a package under cygwin, which basically is the gcc compiler suite for windows aimed at 64bit code, but this compiler provides only the MINGW environment, which is a reduced subset of the UNIX-like environment provided by cygwin. Unfortunately, the build process of ATLAS requires a full UNIX-like environment, so you cannot use the 64bit compiler to compile ATLAS. I’ve tried some mixed strategies, but haven’t managed to compile ATLAS, as have all others I know of. Also, there is no official 64bit support for ATLAS on Windows.
Here are a few of the things I have tried:
- Using the built in gcc does not work because it has no support for 64bit code.
- Using the newer gcc (version 4.something) does not work because it can only produce binaries depending on cygwin, which apparently clashes with the Java address space and crashes the JVM as soon as it is loaded.
- Configuring ATLAS with all compilers set to mingw-w64 compilers (gcc, gfortran, and ar in the generated Make.inc). Configure runs through ok, but compilation halts very early, with an odd error I couldn’t track down. Compilation is also painfully slow.
- I tried configuring and compiling ATLAS on a 64bit Linux machine and then only rebuilding the libs on Windows with 64bit and mingw-w64. This entailed going in calling all clean targets, plus fixing some Makefiles which didn’t have correct clean targets. This actually ran through ok, but I got lots of unresolved symbols in the end (besides having to hand-edit half a dozen of Makefiles or so).
After that I basically gave up. If you manage to compile ATLAS to 64bit on Windows, please contact me!
What I managed to do, though is to compile lapack-lite with the 64bit compiler. This results in a full implementation of all subroutines, but it isn’t much more performant than pure Java. You still get a 50% boost for some operations like matrix-matrix-multiplication. Given that you can still use the same code (and jar file!), this is better than nothing. Starting with version 1.2.0, lapack-lite is bundled with the 64bit version of Windows.