为什么CUDA内核无法在带有CUDA 9.0的VS 2013中启动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么CUDA内核无法在带有CUDA 9.0的VS 2013中启动相关的知识,希望对你有一定的参考价值。

我在Windows(GeForce GT 720M)中编写了一个基于CUDA的并行程序。我已经安装了CUDA 9.0 Toolkit和Visual Studio 2013.一切都很好但是当我编译代码并运行它时输出错误。

该计划是:

#include <stdio.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

__global__ void square(float * d_out, float * d_in)
{
    int idx = threadIdx.x;
    float f = d_in[idx];
    d_out[idx] = 50;
}

int main(int argc, char ** argv)
{
    const int ARRAY_SIZE = 64;
    const int ARRAY_BYTES = ARRAY_SIZE * sizeof(float);

    // generate the input array on the host
    float h_in[ARRAY_SIZE];
    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        h_in[i] = float(i);
    }
    float h_out[ARRAY_SIZE];

    // declare GPU memory pointers
    float * d_in;
    float * d_out;

    // allocate GPU memory
    cudaMalloc((void **) &d_in, ARRAY_BYTES);
    cudaMalloc((void **) &d_out, ARRAY_BYTES);

    // transfer the array to the GPU
   cudaMemcpy(d_in, h_in, ARRAY_BYTES, cudaMemcpyHostToDevice);

    // launch the Kernel
    square << <1, ARRAY_SIZE >> >(d_out, d_in);

    // copy back the result array to the GPU
    cudaMemcpy(h_out, d_out, ARRAY_BYTES, cudaMemcpyDeviceToHost);

    // print out the resulting array
    for (int i = 0; i < ARRAY_SIZE; i++)
    {
        printf("%f", h_out[i]);
        printf(((i % 4) != 3) ? "	" : "
");
    }

    // free GPU memory allocation
    cudaFree(d_in);
    cudaFree(d_out);

    getchar();
    return 0;
}

当我运行它时输出是:Square program output

另外,我用nvcc square.cu编译它但输出是相同的。我在VS中有内核启动语法错误,但我认为它与输出无关(但图像与另一个程序有关):

enter image description here

答案

问题是CUDA工具包版本。对于GeForce GT 720M,计算能力为2.1,它可以被CUDA 8.0使用。

另一答案

这是CUDA工具包版本及其计算功能的表格。

See section GPUs supported

以上是关于为什么CUDA内核无法在带有CUDA 9.0的VS 2013中启动的主要内容,如果未能解决你的问题,请参考以下文章

是否有兼容 Cuda 9.0 和 cudnn 7.1 的 tensorflow 版本

Pytorch CUDA 错误:没有内核映像可用于在带有 cuda 11.1 的 RTX 3090 上的设备上执行

CUDA内存问题

Ubuntu 18.04上CUDA 9.0cuDNN7.0及Tensorflow 1.8的安装

Cuda 7.5 和 VS 要求

如何在 VS 2010 中使用 Nvidia NSight 查看 CUDA 线程值?