Menu

problem building against ACML library

2008-06-24
2012-09-15
  • A. Botorabi

    A. Botorabi - 2008-06-24

    hello,

    i am trying to build it++ 4.0.4 against the 32 bit version of ACML library. compiling the freq_filt_test goes well, however on linking it with it++ i get some missing functions:

    dcopy
    zcopy
    dscal
    zscal

    i have tried both, the static lib and dynamic lib of ACML. the problem remained. any idea what i may try?

    thanks
    boto

     
    • Giuseppe Lippolis

      I try to guess:

      today on the AMD site you can get the following lib:
      Intel fortran compiled
      acml4.2.0-32-ifort 32 bit
      acml4.2.0-64-ifort 64 bit

      PGI compiled
      acml4.21.0-win64    64 bit
      

      So if someone have vc express 2008, he shall use acml4.2.0-32-ifort because he have not the 64 bit compiler.

      But if you see the "acml.h" file you can note that in Intel Fortran :
      The FORTRAN interface names are in upper case, for example
      extern void DCOPY(int n, double x, int incx, double y, int *incy);

      otherwise in PGI
      The FORTRAN interface names are appended by an underscore., for example
      extern void dcopy_(int n, double x, int incx, double y, int *incy);

      Obviously the itpp code use the PGI codestyle so if somone use the Intel acml the linker can't be happy!

      I suggest some patch/workaround:

      1)use the old PGI acml3.6.0-32-pgi.
      2)Rewrite the itpp code with some define to switch between INTEL or PGI codestyle
      3)Rewrite the itpp codeusing the C interface (it seems to be the same for the two lib)

      Let me know what are you doing.
      Bye.

       
    • Bogdan Cristea

      Bogdan Cristea - 2008-06-24

      You should mention your development system.

      Under Linux, this seems to be the classical problem of linking against shared (dynamic) libraries. Use

      export LD_LIBRARY_PATH=/opt/acml4.1.0/gfortran64_mp/lib:/opt/acml4.1.0/gfortran64/lib:$LD_LIBRARY_PATH

      in your .bashrc file or, alternatively, one can use

      ldconfig

      in order to register the shared libraries with your Linux system.

       
    • A. Botorabi

      A. Botorabi - 2008-06-26

      hi bogdan,

      i try to build on win32 using msvc 8.0, i have also tried msvc 9.0. if i look into the ACML header, it contains prototypes of the mentioned functions; and looking into the dlls it seems that the functions are in the dll, too. however the linker does not find them. maybe something is mixed with c/c++ calling convention.

      is someone there, who successfully has build one of the it++ tests against the ACML libraries?

      cheers
      boto

       
    • trc_wm

      trc_wm - 2008-07-22

      The problem you're having is that ACML exports those functions as dcopy, _zcopy, _dscal and _zscal.
      And IT++ assumes they are exported as _dcopy
      , zcopy, dscal and zscal.
      You need to change the blas.h headerfile of IT++ to make it work.
      I added this:

      ifdef HAVE_ACML

      // Unforuntately, the standard BLAS functions are not exported correctly.
      #define dswap_ dswap
      #define zswap_ zswap
      #define dscal_ dscal
      #define zscal_ zscal
      #define dcopy_ dcopy
      #define zcopy_ zcopy
      #define daxpy_ daxpy
      #define zaxpy_ zaxpy
      #define ddot_ ddot
      #define dgemv_ dgemv
      #define zgemv_ zgemv
      #define dger_ dger
      #define zger_ zger
      #define zgeru_ zgeru
      #define zgerc_ zgerc
      #define dgemm_ dgemm
      #define zgemm_ zgemm

      endif

      which worked for me.

      Cheers,
      Niels.

       
    • Adam Piątyszek

      Adam Piątyszek - 2008-08-01

      Which ACML package do you try to link with MSVC++? I had no problems testing MSVC++ 2008 Express with ACML-3.6 built with PGI compiler.

      BR,
      /Adam

       

Log in to post a comment.