【问题标题】:How to call cuda libraries from OpenACC C++ code by g++?如何通过 g++ 从 OpenACC C++ 代码中调用 cuda 库?
【发布时间】:2020-03-15 13:33:36
【问题描述】:

我想在 g++-8 的 OpenACC 代码中使用 cuda 库(cublas、cusparse cusolver)。

g++-8 可以使用 PGI 之类的 cuda 库吗?

我编写了以下代码,需要 cublas 或 cublas_v2。

// #include<cublas.h>
#include<cublas_v2.h>
int main(){

//...allocate and initialize data...//

#pragma acc data copy(x[0:size], y[0:size])                   
        {                                                     
#pragma acc host_data use_device(x,y)                         
                {                                             
                        //dot = cublasDdot(size, x, 1, y, 1); 
                        cublasDdot(h, size, x, 1, y, 1, &dot);
                }
        } 
}

编译命令在这里:(这些库是存在的。)

 g++-8 -fopenacc -foffload=nvptx-none \
        -foffload="-I/usr/local/cuda-10.1/targets/x86_64-linux/include/ \
        -L/usr/local/cuda-10.1/targets/x86_64-linux/lib/ \
        -L/usr/lib/x86_64-linux-gnu/ \
        -lcuda -lcudart -lcublas" -O3 -std=c++11 acc_cublas.cpp -o acc_cublas.o

它会导致编译错误。出现以下错误:

acc_cublas.cpp:(.text.startup+0x11f): undefined reference to `cublasCreate_v2'
acc_cublas.cpp:(.text.startup+0x1b4): undefined reference to `cublasDdot_v2'

这个编译命令正确吗?为什么找不到函数?

我通过执行以下命令基于nvidia/cuda:10.1-devel 创建了我的环境:

apt install -y gcc-8-offload-nvptx nvptx-tools g++-8
apt install -y cuda-cublas-dev-10-0
apt install -y cuda-cudart-dev-10-0

我在以下不使用 cuda 库的程序中得到了正确答案:

#pragma acc data copy(x[0:size], y[0:size])
        {
#pragma acc kernels
                {
#pragma acc loop reduction ( + : dot)
                        for(int i=0; i<size; i++){
                                dot += x[i] * y[i];
                        }
                }
        }

【问题讨论】:

    标签: c++ gcc g++ openacc


    【解决方案1】:

    当我重新创建您的容器时,看起来 cublas 库安装在 /usr/local/cuda-10.0 中,而不是 cuda-10.1。您能否尝试更新您的编译行以指向该目录?如果没有完全可编译的示例,我自己很难确认这可以解决您的问题。或者,您可以链接到 /usr/lib/x86_64-linux-gnu/libcublas.so,它似乎是 cublas 的 10.2 版本,并且似乎也具有您需要的符号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-15
      • 2015-10-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多