nVidia CUDA 代码不起作用?
nVidia CUDA code doesn't work?
我正在学习如何为nVidia卡编程。这是我的代码:
__global__ void add_one(int* i)
{
i[0]++;
}
template<class TYPE>
void gpu_load(TYPE data)
{
int size = 1;
cudaMalloc( (void**) &data, size * sizeof(TYPE));
}
template<class TYPE>
void copy_to_gpu(TYPE* cpu_var, TYPE* gpu_var)
{
int size = 1;
cudaMemcpy( gpu_var, cpu_var, size * sizeof(TYPE), cudaMemcpyHostToDevice);
}
template<class TYPE>
void copy_to_cpu(TYPE* cpu_var, TYPE* gpu_var)
{
int size = 1;
cudaMemcpy( gpu_var, cpu_var, size * sizeof(TYPE), cudaMemcpyDeviceToHost);
}
int main()
{
int gpu_i[1];
int cpu_i[1];
cpu_i[0] = 5;
gpu_load(cpu_i);
copy_to_gpu(cpu_i, gpu_i);
add_one<<<1, 1>>>(gpu_i);
int res[1];
copy_to_cpu(res, gpu_i);
std::cout << res[0];
}
为什么cout不显示5+1而显示0?
我尽力让它发挥作用。。。好像什么都没发生。。。?
- 您正在将
cpu_i
传递给您的cudaMalloc
例程。这不是你想要的 gpu_i
指针需要是可以由cudaMalloc
例程修改的东西,所以我们需要将其地址作为指针传递给该例程- 您在
copy_to_cpu
例程中反转了参数
如果以下代码对您不起作用,请添加适当的cuda错误检查。您的系统配置可能也有问题:
#include <iostream>
__global__ void add_one(int* i)
{
i[0]++;
}
template<class TYPE>
void gpu_load(TYPE* &data)
{
int size = 1;
cudaMalloc( (void**) &data, size * sizeof(TYPE));
}
template<class TYPE>
void copy_to_gpu(TYPE* cpu_var, TYPE* gpu_var)
{
int size = 1;
cudaMemcpy( gpu_var, cpu_var, size * sizeof(TYPE), cudaMemcpyHostToDevice);
}
template<class TYPE>
void copy_to_cpu(TYPE* cpu_var, TYPE* gpu_var)
{
int size = 1;
cudaMemcpy( cpu_var, gpu_var, size * sizeof(TYPE), cudaMemcpyDeviceToHost);
}
int main()
{
int *gpu_i;
int cpu_i[1];
cpu_i[0] = 5;
gpu_load(gpu_i);
copy_to_gpu(cpu_i, gpu_i);
add_one<<<1, 1>>>(gpu_i);
int res[1];
copy_to_cpu(res, gpu_i);
std::cout << res[0];
}
cudaMemcpy
的第一个参数始终是目的地,但在copy_to_cpu
中,您首先传递gpu_var
。
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 为什么这段代码不起作用,我该如何解决?
- 为什么这些完全相似的代码不起作用?
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- std::string == 运算符在代码中不起作用
- C++ 多态性在代码::块 17.12 中不起作用
- 为什么 pop_back() 在此代码中不起作用?
- 注释一行使代码工作,而没有它,代码不起作用
- C++ 程序在代码块 IDE 中不起作用
- 代码编译但不起作用!cmd窗口只是理想和理想,但什么也没发生
- 我的C++合并排序代码不起作用。我在这里错过了什么?
- 在 directx11 代码中更改全屏模式下的刷新率不起作用
- 为什么给定的代码不适用于所有测试用例?为什么当输入为 7786 时它不起作用?
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- C ++函数重新定义(代码不起作用 - 逻辑错误)
- 试图找到一个数字的平方根,但代码不起作用。C++