尝试编译HPCC基准测试时无法链接到BLAS / ATLAS

问题描述 投票:0回答:1

我正在尝试在小型RHEL桌面上编译HPCC基准。在链接之前,一切似乎都很好。我的链接命令是

    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所需的所有内容?

谢谢。

c mpi blas atlas
1个回答
0
投票

您的日志表明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。

© www.soinside.com 2019 - 2024. All rights reserved.