如何用g++从OpenACC C++代码中调用cuda库
How to call cuda libraries from OpenACC C++ code by g++?
我想通过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);
}
}
}
compile命令在这里:(这些库已经存在。(
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];
}
}
}
当我重新创建容器时,看起来cublas库安装在/usr/local/cuda-10.0
中,而不是cuda-10.1中。你能试着更新你的编译行以指向那个目录吗?如果没有一个完全可编译的例子,我很难确认这能解决你的问题。或者,您可以链接到/usr/lib/x86_64-linux-gnu/libcublas.so
,它似乎是cublas的10.2版本,并且似乎也有您需要的符号。
相关文章:
- 如何用g++从OpenACC C++代码中调用cuda库
- 编译为 cuda 内核调用提供了"expression must have integral or unscoped enum type"
- 从结构启动 Cuda 调用
- CudaError未知代码= 30在任何cuda调用上
- 是否可以从 CUDA 10.1 内核调用 cuBLAS 或 cuBLASLt 函数?
- 推力(cuda)错误:无法使用给定参数列表调用函数
- 验证调用 cuda 内核的次数
- cuda 内核调用/传递参数中的编译错误
- 在 CUDA 中,Nsight 不会在时间轴中显示 cuInit(0) 调用
- CUDA OPENCV CVTCOLOR调用不会将图像转换为不同的格式
- 通过复制将对象传递给 CUDA 内核会调用其析构函数并过早释放内存
- 调用 Cuda/推力中所有组合的函子
- 为什么调用 CUDA 内核函数时这个类成员变量没有改变
- 用嵌套调用CUDA :: thrust functors作为zip_iterator操作的函数
- 不支持外部调用 - CUDA
- 调用 CUDA 编译.dll从 R - .C 与 .叫
- 为什么我调用CUDA数学库sqrt()函数失败
- 调用cuda内核时的性能损失
- 从包含相同头文件的其他.cpp文件调用CUDA函数
- 如果不能在条件分支中调用 CUDA,如何在 CUDA 中减少__syncthreads?