Невозможно связаться с BLAS / ATLAS при попытке скомпилировать тест HPCC - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь скомпилировать эталонный тест HPCC на маленьком рабочем столе RHEL. Кажется, все хорошо, пока не связаны. Моя команда ссылки:

    mpicc -DAdd_ -DF77_INTEGER=int -DStringSunStyle  -I../../../include \
 -I../../../include/myarch -I/path/to/my/ATLAS_build/include \
-I/usr/include/openmpi-x86_64 -fomit-frame-pointer -O3 -funroll-loops \
-W -Wall -lm -o ../../../../hpcc ../../../lib/bugzilla/libhpl.a \
/path/to/my/ATLAS_build/lib/libcblas.a \
/path/to/my/ATLAS_build/lib/libatlas.a -L/usr/lib64/openmpi/lib

Ссылка завершается ошибкой с несколькими ошибками, связанными с объектами BLAS / ATLAS, которые компоновщик не может найти. Вот некоторые из них:

../../../lib/myarch/libhpl.a(HPL_dcopy.o): In function `HPL_dcopy':
HPL_dcopy.c:(.text+0x1e): undefined reference to `dcopy_'
../../../lib/myarch/libhpl.a(HPL_daxpy.o): In function `HPL_daxpy':
HPL_daxpy.c:(.text+0x2f): undefined reference to `daxpy_'
../../../lib/myarch/libhpl.a(HPL_dscal.o): In function `HPL_dscal':
HPL_dscal.c:(.text+0x22): undefined reference to `dscal_'
../../../lib/myarch/libhpl.a(HPL_idamax.o): In function `HPL_idamax':
HPL_idamax.c:(.text+0x1a): undefined reference to `idamax_'
../../../lib/myarch/libhpl.a(HPL_dgemv.o): In function `HPL_dgemv':
HPL_dgemv.c:(.text+0xba): undefined reference to `dgemv_'
HPL_dgemv.c:(.text+0x136): undefined reference to `dgemv_'

Вот что я действительно не понимаю. Возьмите dgemv например. libhpl.a действительно вызывает это:

>$ nm libhpl.a | grep dgemv
HPL_dgemv.o:
                 U dgemv_

Теперь, libcblas.a имеет ссылку на него, но нуждается в версии в ATLAS:

>$ nm libcblas.a | grep dgemv
cblas_dgemv.o:
                 U ATL_dgemv

Наконец, ATLAS имеет ATL_dgemv?

ATL_dgemv.o:
0000000000000000 T ATL_dgemv

Так что, да, конечно. Так что CBLAS имеет dgemv, к которому HPCC должен (я бы подумал) быть способен подключиться, но для этого нужно ATL_dgemv. Но ATLAS имеет ATL_dgemv. Так почему же компоновщик не может найти все, что ему нужно для HPCC?

Спасибо.

1 Ответ

1 голос
/ 08 октября 2019

В ваших журналах указано, что libhpl.a нужен символ dgemv_, который не предоставляется ни libcblas.a, ни libatlas.a (я полагаю, что ваша последняя команда была nm libatlas.a | grep dgemv).

Подчеркивание в концев dgemv_ настоятельно рекомендуется использовать библиотеку Fortran BLAS (а не C BLAS), поэтому вы можете просто заменить libcblas.a на libblas.a.

IIRC, другой вариант - настроить конфигурацию HPLи направьте его на использование cblas вместо (Fortran) BLAS.

...