【发布时间】:2019-12-13 17:22:58
【问题描述】:
关于 CUDA 10.1
我正在对几何网格进行一些计算,网格的每个面都进行了大量独立计算。我运行一个 CUDA 内核,它对每个人脸进行计算。
计算涉及一些矩阵乘法,所以我想使用 cuBLAS 或 cuBLASLt 来加快计算速度。因为我需要做很多矩阵乘法(每张脸至少几个)我想直接在内核中做。这可能吗?
cuBLAS 或 cuBLASLt 似乎不允许您从内核 (__global__) 代码调用它们的函数。我从 Visual Studio 收到以下错误:
“不允许从 __device__ 函数调用 __host__ 函数”
有一些旧答案 (Could a CUDA kernel call a cublas function?) 暗示这是可能的吗?
基本上,我想要这样的内核:
__global__
void calcPerFace(...)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
int stride = blockDim.x * gridDim.x;
for (int i = index; i < faceCount; i += stride)
{
// Calculate some matrices for each face in the mesh
...
// Multiply those matrices
cublasLtMatmul(...) // <- not allowed by cuBLASLt
// Continue calculation
...
}
}
是否可以在 CUDA 10.1 中从这样的内核调用 cublasLtMatmul 或 cublassgemm?
【问题讨论】:
-
没有。 CUBLAS 设备端支持在 CUDA 9 中已弃用,并在 CUDa 10 中删除
-
所以除了回到 CPU 上并从那里调用 cublas 之外没有其他办法,我想?为什么这个功能还是被删除了?
-
使用 CUBLAS 无法做到这一点。我不为 NVidia 工作。我无法评论他们为什么选择弃用和删除 API
标签: c++ visual-studio cuda cublas