Hi,
First of all, just to ensure I had the latest and greatest ACML, I installed it separately outside of the PGI tree. I used ACML 5.3.1 for this test, set my ACML directory in the make.inc file accordingly. Not sure if this matters.
Here is the snippet of my build log for the same file:
pgc++ -O2 -DADD_ -mp -DMAGMA_SETAFFINITY -DMAGMA_WITH_ACML -DCUBLAS_GFORTRAN -DMIN_CUDA_ARCH=100 -I/home/sw/cuda/hammer-6.0/linux86-64/include -I../include -I../control -c testing_dgeev.cpp -o testing_dgeev.o
pgc++ -mp testing_dgeev.o -o testing_dgeev \
libtest.a lin/liblapacktest.a -L../lib -lmagma \
-L/scratch/cparrott/acml5.3.1/pgi64_mp/lib -L/scratch/cparrott/CBLAS/lib -L/home/sw/cuda/hammer-6.0/linux86-64/lib64 \
-pgf90libs -lacml_mp -lcblas -lcublas -lcudart -lm
Anyway, yes, there are some segmentation fault issues under investigation. I have filed a report on at least some of them, but do not have any more details at this time.
One other thing - if you are using a recent version of ACML, you will need to make a small change to the MAGMA source code. This has to do with the fact that recent versions of ACML added another parameter to the acmlversion() function, but the MAGMA source code has not been updated to reflect this. So, you will need to change the interface_cuda/interface.cpp file as follows:
At around line 22:
#if defined(MAGMA_WITH_ACML)
// header conflicts with magma's lapack prototypes, so declare function directly
// #include <acml.h>
extern "C"
void acmlversion(int *major, int *minor, int *patch);
#endif
Change this to:
#if defined(MAGMA_WITH_ACML)
// header conflicts with magma's lapack prototypes, so declare function directly
// #include <acml.h>
extern "C"
void acmlversion(int *major, int *minor, int *patch, int *build);
#endif
Then at around line 117, change this:
#if defined(MAGMA_WITH_ACML)
int acml_major, acml_minor, acml_patch;
acmlversion( &acml_major, &acml_minor, &acml_patch );
printf( "ACML %d.%d.%d. ", acml_major, acml_minor, acml_patch );
#endif
To this:
#if defined(MAGMA_WITH_ACML)
int acml_major, acml_minor, acml_patch, acml_build;
acmlversion( &acml_major, &acml_minor, &acml_patch, &acml_build );
printf( "ACML %d.%d.%d.%d. ", acml_major, acml_minor, acml_patch, acml_build );
#endif
Not making this change with a recent version of ACML will guarantee a segfault, as the new fourth parameter will be undefined when acmlversion() is called.
However, this does not get rid of all the segfaults. Some of the tests will run after this change, though.
Hope this helps.
Best regards,
+chris