cmake can't find ACML on XP

Help
wincent
2013-09-07
2013-09-15
  • wincent
    wincent
    2013-09-07

    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 2.8.11.2.
    Finally, I followed the instructions from the 'INSTALL' file in the trunk repository :
    mkdir build
    cd build
    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 ?

     
  • Bogdan Cristea
    Bogdan Cristea
    2013-09-07

    Hi
    Please follow the online instructions found here. Please use on Windows cmake-gui and make sure to select Visual Studio 32 bits.
    regards
    Bogdan

     
  • wincent
    wincent
    2013-09-08

    Hello Bogdan,
    Here is the configuration I made with cmake-gui :
    my configuration
    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.

     
    Attachments
  • Bogdan Cristea
    Bogdan Cristea
    2013-09-08

    Hi
    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.
    regards
    Bogdan

     
  • wincent
    wincent
    2013-09-09

    Hello again,
    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.

     
  • Frank
    Frank
    2013-09-14

    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.

     
  • Bogdan Cristea
    Bogdan Cristea
    2013-09-14

    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.

     
  • Frank
    Frank
    2013-09-15

    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.

     
    • Bogdan Cristea
      Bogdan Cristea
      2013-09-15

      Please open a feature request and provide the exact information you want to be included into HTML help.

       
  • Frank
    Frank
    2013-09-15

    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.

     
    • Bogdan Cristea
      Bogdan Cristea
      2013-09-15

      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.

       
  • Frank
    Frank
    2013-09-15

    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?

     
  • Bogdan Cristea
    Bogdan Cristea
    2013-09-15

    • MKL/ACML libraries: from a maintenance point of view is unreasonable to try to duplicate these headers as this implies to have access to these headers, thus a developer license, but also quite an amount of work is needed for each new release. On the other hand, ACML is free, while MKL can be obtained as trial version, but the libraries can be used for an unlimited period of time. So I see no benefit in using only external libraries with no headers as long as these libraries can be actually used at no cost.
    • OpenMP is used in several places in IT++ (e.g. FFT and pseudo-random number generator), see the online documentation
     
  • Frank
    Frank
    2013-09-15

    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.

     
  • Frank
    Frank
    2013-09-15

    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.