首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过g++从OpenACC C++代码中调用cuda库?

如何通过g++从OpenACC C++代码中调用cuda库?
EN

Stack Overflow用户
提问于 2019-11-20 06:52:59
回答 1查看 222关注 0票数 0

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

g++-8可以使用像PGI这样的cuda库吗?

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

代码语言:javascript
复制
// #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);
                }
        } 
}

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

代码语言:javascript
复制
 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

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

代码语言:javascript
复制
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的环境:

代码语言:javascript
复制
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库的程序中得到了正确的答案:

代码语言:javascript
复制
#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];
                        }
                }
        }
EN

回答 1

Stack Overflow用户

发布于 2019-12-06 04:45:52

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58944080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档