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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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:
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
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
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.
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.
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
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.
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