Hello, I don't manage to build IT++ 4.3.1 on Windows XP 32 bits SP3 with Visual Studio 2010 Express.
I checked out the trunk of the project.
I downloaded, installed ACML 5.3.1 to C:\AMD\acml5.3.1 and added both C:\AMD\acml5.3.1\win64_mp\lib and C:\AMD\acml5.3.1\win64\lib to the %PATH% environment variable.
I installed cmake 220.127.116.11.
Finally, I followed the instructions from the 'INSTALL' file in the trunk repository :
cmake .. -DBLA_VENDOR=ACML
Unfortunately, neither library for BLAS, LAPACK nor FFT are found.
Note : before the message about the missing libraries with API for BLAS/LAPACK/FFT, I have a first error message "sgemm not found".
Anyone has been able to build IT++ with MSVC recently ?
Please follow the online instructions found here. Please use on Windows cmake-gui and make sure to select Visual Studio 32 bits.
Here is the configuration I made with cmake-gui :
But it gave me the same error as described above.
I will try another time at work tomorrow where I can have access to MSVC Pro 2005 and MSVC Pro 2010.
You need to point PATH env. variable to the folder where *.lib libraries are found. You are using Windows 32 bits ? In this case the PATH env. variable is wrong as it points to 64 bits libraries. Have a look at CMakeError.log file and post the errors here.
Actually it seems AMD no longer provides 32 bit releases of ACML, it must be the reason why I don't manage to build IT++ using cmake (I've tried again this morning at work with MSVC Pro 2005 and 2010 - still no success).
I will try one more time by installing BLAS, LAPACK and FFTW instead.
However, thanks for your support and your help.
You can use the ACML 4.4.0 Version (not longer online, but I had it saved) for 32 Bit Windows, or the old ACML 3.6.0.
cmake is not able to configure it automatically. See the "bugs" forum. But I managed to run it on Cygwin(32) and the Mingw32 crosscompiler (to create MATLAB MEX compatible DLL). Sometimes you have to modify the blas.h/lapack.h uppercase-lowercase translation, because it's not always detected correctly. Intel Fortran uses uppercase function names, but only on Windows.
We are trying to ensure that IT++ runs on as many platforms as possible, usually on newer platforms. Please check IT++ Verification section in order to see if IT++ has been tested in your particular platform.
My Visual Studio is completely messed up, with an older complete version and Visual Studio Express. I don't like it. With GCC (cygwin/mingw) it's easier to share the toolchain with my Linux simulation machine. The MKL comes with several other programs (MATLAB, SciLab ...). Any chance to use the MKL with IT++ ? At least for MATLAB Mex it would be useful to link to the same MKL DLL that MATLAB is using.
I had problems to reproduce several "IT++ Verification" setups. I have one suggestion: could you post the configuration setup/commands to the website, too? Sometimes you need special configuration parameters (like with ACML/Cygwin). I don't mind if the paths are not universal. At least to have a hint what to do. I spend several days of trying different combinations of ACML DLL with Cygwin and Mingw to get it all running.
Please open a feature request and provide the exact information you want to be included into HTML help.
Btw: do you need any MKL header files for IT++ ? BLAS/LAPACK Function prototypes are defined in blas.h/lapack.h within IT++ itself. So it should be sufficient to link to other MKL-DLL directly? I tried several times but had no success.
There are two header files that are used from MKL
signal/transforms.cpp:44:# include <mkl_dfti.h>
signal/transforms.cpp:45:# include <mkl_service.h>
You could provide your own headers and compile with MKL libraries provided by MATLAB for example, but this cannot be supported by IT++ as MKL headers use a different license.
Ok, I see. But why using the ACML- and MKL-includes? Can't we just define function prototypes as with the BLAS/LAPACK-functions in blas.h/lapack.h ? If there are small differences they can be distinguished by #ifdefs.
I have never seen a MKL include before, but in ACML there is not much in acml.h except the function prototypes. Very few of them are actually required for IT++.
For FFT, it's something like zfft1dx or dzfft.
I don't see a license problem when you produce a MATLAB Mex-File that uses the same MKL as MATLAB.
Or is there a way to get MKL for free? The license info was quite difficult to understand, for hobby or academic use.
BTW, do you have any recommendations how to use OpenMP, with the builtin ACML_MP or better outside in OpenMP-enabled IT++ using non-OpenMP ACML?
But the OpenMP #pragmas are just ignored if not compiled with the -fopenmp flag. In the transforms.cpp source there is a comment that if the user code is using OpenMP, the single-threaded version of ACML should be linked. I did not understand if this is needed to prevent crashes or if it's just not necessary to include ACML_MP. I think basically you have to decide if e.g. a single FFT call should be parallelized within the ACML_MP itself or if the user-code should call several FFTs with a OpenMP for-loop. Is the decision somehow automatic or does the user have to influence this by chosing different ACML MP/non-MP libs or setting the number of threads manually.
Do the interfaces to MKL really change? The BLAS/LAPACK API is stable sinces decades. If it's just a few lines of defining prototypes it makes sense to avoid the header files, because then you don't have to purchase a library for that purpose (if it's already included in MATLAB or SciLab anyway). For BLAS and LAPACK the prototypes are already defined within IT++. Why not for the FFT functions too? I know you need #ifdef to distinguish between FFTW, ACML and MKL.