当我将犰狳链接到clblas时,未定义符号_zgemm_

时间:2019-07-13 11:23:23

标签: armadillo

我可以将armadillo链接到clBLAS,以在macOS上使用AMD GPU吗?

我已经使用armadillo一年多了,通过CUDA库,使用NVidia GPU链接到libnvblas毫无问题。但是nvidia卡在macOS上越来越难,所以我刚买到Radeon RX580。我试图通过clBLAS使用它。我已经尝试了macports clBLAS安装,并从源代码构建它。当我从源代码构建时,所有clBLAS测试都成功运行。

但是当我使用

编译简单的犰狳代码时
g++-mp-6 speedtest.cpp -o speedtest_gpu -O2 -I ../include -DARMA_DONT_USE_WRAPPER -L/opt/local/lib -lclblas -llapack

我知道

Undefined symbols for architecture x86_64:
  "_zgemm_", referenced from:
      void arma::glue_times_redirect2_helper<false>::apply<arma::Mat<std::complex<double> >, arma::Mat<std::complex<double> > >(arma::Mat<arma::Mat<std::complex<double> >::elem_type>&, arma::Glue<arma::Mat<std::complex<double> >, arma::Mat<std::complex<double> >, arma::glue_times> const&) in cc5i4IPr.o
      _main in cc5i4IPr.o

,以及_zgemv_的类似错误。当我查看libclBLAS.dylib时,看不到_zgemm_,就像我在libnvblas或libblis中一样,它们都可以成功编译。

使用

进行编译
g++-mp-6 speedtest.cpp -o speedtest_gpu -O2 -I ../include -DARMA_DONT_USE_WRAPPER -L/opt/local/lib -lclblas -lblas -llapack

可以工作,但是它可以在CPU上运行,而不是在GPU上运行。

(当我拥有nvidia卡

g++-mp-6 speedtest.cpp -o speedtest_gpu -O2 -I ../include -DARMA_DONT_USE_WRAPPER -L/Developer/NVIDIA/CUDA-9.2/lib -lnvblas -lblas -llapack

工作正常并在nvidia GPU上运行。)

1 个答案:

答案 0 :(得分:0)

答案是:否:clblas不提供与blas兼容的API。但是CLBlast(https://github.com/CNugteren/CLBlast)确实提供了非常接近blas的API,并且编写具有与nvidia的nvblas相同功能并在AMD GPU上运行的包装器并不难。