【问题标题】:Is it possible to call cuBLAS or cuBLASLt functions from CUDA 10.1 kernels?是否可以从 CUDA 10.1 内核调用 cuBLAS 或 cuBLASLt 函数?
【发布时间】: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


【解决方案1】:

不可能

从 CUDA 10.0 开始,CUDA 不再支持从设备代码调用 CUBLAS 例程的能力。

在 CUDA 10.0 之前给出了deprecation notice,正式公告存在于the CUDA 10.0 release notes

cuBLAS 库支持从设备例程 (cublas_device) 中调用相同 cuBLAS API 的能力,从 CUDA 10.0 开始被删除。

同样,从 CUDA 10.0 开始,依赖此功能的 CUDA 示例代码(例如 simpleDevLibCUBLAS)不再是 CUDA 工具包分发的一部分。

这仅适用于 CUBLAS,并不意味着 CUDA 动态并行的一般能力已被删除。

我将无法回答问“为什么?”的问题。或者是“为什么”的变体?我将无法回答有关未来事件或主题的问题。没有技术原因表明此功能不可用或不受支持。改变的原因与发展和资源优先事项有关。我将无法比这更深入。如果您希望看到 CUDA 的行为发生变化,无论是在功能、性能还是文档方面,我们鼓励您通过在 http://developer.nvidia.com 提交错误来表达您的愿望。具体的bug提交说明链接here

对于执行一些准备工作的 CUDA 设备代码,然后调用 CUBLAS,然后执行一些其他工作,一般建议是将其分解为执行准备工作的内核,然后从主机启动所需的 CUBLAS 例程,然后在后续内核中执行剩余的工作。这并不意味着数据必须在设备和主机之间来回移动。当执行多个 CUBLAS 调用时(例如,每个设备线程),那么研究各种可用的 CUBLAS 批处理功能可能是有益的。不可能给出一个单一的方法来重构每一种代码。这些建议可能无法解决所有情况。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 2015-05-22
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 2011-08-08
    • 2011-11-04
    相关资源
    最近更新 更多