CUDA在非N卡机器上的编译和运行

在没有N卡的计算机上运行CUDA程序,肯定是妄想了。因为没有硬件的支持,肯定不能够正确运行CUDA程序。但是,近半年一直在家中办公,家里的电脑没有N卡,所以一直没有使用CUDA。但是可以远程接入学校的计算机。因为远程桌面接入后计算机反应迟钝,使用远程桌面接入进行编程开发也是让人很恼火。一个回车敲下,反应半秒。

今天尝试一下,如果在没有N卡的电脑上安装CUDA,进行代码编译,然后远程接入,在有N卡的电脑上运行是否可行。所以编写一个验证程序,分别在没有N卡的MagicBook上编译运行在N卡机器上编译运行把MagicBook上编译的程序拷贝到N卡机器上运行

说一下结果

  1. MagicBook上安装CUDA,安装过程中选择只安装CUDA,不安装驱动及物理加速 - 安装过程正常,没有报错,与Visual Studio连接也正常。
  2. MagicBook上编译运行 - 运行结果错误
  3. N卡计算机上编译运行 - 运行结果正常
  4. MagicBook上编译,拷贝到N卡计算机上运行 - 运行结果错误
    结论:所以我还是不能在家使用CUDA加速我的程序……

验证程序如下

#include 
#include 
#include 
#include 
#include 

__global__ void GPU_add(int* a, int* b)
{
    uint32_t idx = blockIdx.x * blockDim.x + threadIdx.x;
    a[idx] = a[idx] + b[idx];
}

int main()
{
    int Len = 10;
    int* a = new int[Len];
    int* b = new int[Len];

    for (int i = 0; i < Len; ++i)
    {
        a[i] = i;
        b[i] = 2 * i;
        printf("a[%d]=%d, b[%d]=%d\n", i, a[i], i, b[i]);
    }

    int* a_GPU, * b_GPU;
    cudaMalloc(&a_GPU, Len * sizeof(int));
    cudaMalloc(&b_GPU, Len * sizeof(int));

    cudaMemcpy(a_GPU, a, Len * sizeof(int), cudaMemcpyHostToDevice);
    cudaMemcpy(b_GPU, b, Len * sizeof(int), cudaMemcpyHostToDevice);

    GPU_add<<<1, Len>>>(a_GPU, b_GPU);

    for (int i = 0; i < Len; ++i)
    {
        a[i] = 0;
        b[i] = 0;
        printf("a[%d]=%d, b[%d]=%d\n", i, a[i], i, b[i]);
    }

    cudaMemcpy(a, a_GPU, Len * sizeof(int), cudaMemcpyDeviceToHost);
    cudaMemcpy(b, b_GPU, Len * sizeof(int), cudaMemcpyDeviceToHost);

    for (int i = 0; i < Len; ++i)
    {
        printf("a[%d]=%d, b[%d]=%d\n", i, a[i], i, b[i]);
    }
    getchar();

    return 0;
}

在MagicBook上的编译运行的输出结果

a[0]=0, b[0]=0
a[1]=1, b[1]=2
a[2]=2, b[2]=4
a[3]=3, b[3]=6
a[4]=4, b[4]=8
a[5]=5, b[5]=10
a[6]=6, b[6]=12
a[7]=7, b[7]=14
a[8]=8, b[8]=16
a[9]=9, b[9]=18
a[0]=0, b[0]=0
a[1]=0, b[1]=0
a[2]=0, b[2]=0
a[3]=0, b[3]=0
a[4]=0, b[4]=0
a[5]=0, b[5]=0
a[6]=0, b[6]=0
a[7]=0, b[7]=0
a[8]=0, b[8]=0
a[9]=0, b[9]=0
a[0]=0, b[0]=0
a[1]=0, b[1]=0
a[2]=0, b[2]=0
a[3]=0, b[3]=0
a[4]=0, b[4]=0
a[5]=0, b[5]=0
a[6]=0, b[6]=0
a[7]=0, b[7]=0
a[8]=0, b[8]=0
a[9]=0, b[9]=0

在N卡机器上编译输出的结果

a[0]=0, b[0]=0
a[1]=1, b[1]=2
a[2]=2, b[2]=4
a[3]=3, b[3]=6
a[4]=4, b[4]=8
a[5]=5, b[5]=10
a[6]=6, b[6]=12
a[7]=7, b[7]=14
a[8]=8, b[8]=16
a[9]=9, b[9]=18
a[0]=0, b[0]=0
a[1]=0, b[1]=0
a[2]=0, b[2]=0
a[3]=0, b[3]=0
a[4]=0, b[4]=0
a[5]=0, b[5]=0
a[6]=0, b[6]=0
a[7]=0, b[7]=0
a[8]=0, b[8]=0
a[9]=0, b[9]=0
a[0]=0, b[0]=0
a[1]=3, b[1]=2
a[2]=6, b[2]=4
a[3]=9, b[3]=6
a[4]=12, b[4]=8
a[5]=15, b[5]=10
a[6]=18, b[6]=12
a[7]=21, b[7]=14
a[8]=24, b[8]=16
a[9]=27, b[9]=18

将MagicBook的编译结果拷贝到N卡机器上运行

a[0]=0, b[0]=0
a[1]=1, b[1]=2
a[2]=2, b[2]=4
a[3]=3, b[3]=6
a[4]=4, b[4]=8
a[5]=5, b[5]=10
a[6]=6, b[6]=12
a[7]=7, b[7]=14
a[8]=8, b[8]=16
a[9]=9, b[9]=18
a[0]=0, b[0]=0
a[1]=0, b[1]=0
a[2]=0, b[2]=0
a[3]=0, b[3]=0
a[4]=0, b[4]=0
a[5]=0, b[5]=0
a[6]=0, b[6]=0
a[7]=0, b[7]=0
a[8]=0, b[8]=0
a[9]=0, b[9]=0
a[0]=0, b[0]=0
a[1]=0, b[1]=0
a[2]=0, b[2]=0
a[3]=0, b[3]=0
a[4]=0, b[4]=0
a[5]=0, b[5]=0
a[6]=0, b[6]=0
a[7]=0, b[7]=0
a[8]=0, b[8]=0
a[9]=0, b[9]=0

你可能感兴趣的:(CUDA在非N卡机器上的编译和运行)