在没有N卡的计算机上运行CUDA程序,肯定是妄想了。因为没有硬件的支持,肯定不能够正确运行CUDA程序。但是,近半年一直在家中办公,家里的电脑没有N卡,所以一直没有使用CUDA。但是可以远程接入学校的计算机。因为远程桌面接入后计算机反应迟钝,使用远程桌面接入进行编程开发也是让人很恼火。一个回车敲下,反应半秒。
今天尝试一下,如果在没有N卡的电脑上安装CUDA,进行代码编译,然后远程接入,在有N卡的电脑上运行是否可行。所以编写一个验证程序,分别在没有N卡的MagicBook上编译运行,在N卡机器上编译运行 和 把MagicBook上编译的程序拷贝到N卡机器上运行。
说一下结果
- MagicBook上安装CUDA,安装过程中选择只安装CUDA,不安装驱动及物理加速 - 安装过程正常,没有报错,与Visual Studio连接也正常。
- MagicBook上编译运行 - 运行结果错误
- N卡计算机上编译运行 - 运行结果正常
- 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