c++ - 使用 cudaMemcpy 初始化无符号字符
问题描述
我使用 cudaMalloc 为 unsigned char 数组分配内存,并使用 cudaMemset 初始化。
unsigned char *device_channel_data;
cudaMalloc( device_channel_data, sizeof(unsigned char) * image_size);
cudaMemset( *device_channel_data, 0, sizeof(unsigned char) * image_size);
之后,我通过将数据复制回主机来检查它是否真的设置为 0。我正在打印一些元素来检查数据,但打印的值是随机的。
unsigned char *host_channel_channel;
cudaMemcpy(host_channel_channel, device_channel_data, sizeof(unsigned char) * image_size, cudaMemcpyDeviceToHost);
for(int i = 0; i < 10; i ++)
{
std::cout<< (int)host_channel_channel[i] << std::endl;
}
我想将 device_channel 数据初始化为 0。我对指针和 CUDA 编程的知识非常有限。我刚开始使用 CUDA 编程。在此先感谢您的帮助。
解决方案
您的问题的答案在 CUDA 的文档中:https ://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__MEMORY.html
对于错误处理(使用 cudamalloc()。为什么是双指针?),CUDA-API 需要一个指向指针的指针作为分配内存的输入参数,而对于 memset,需要一个简单的指针。将您的代码更改为:
unsigned char *device_channel_data;
cudaMalloc( (void**)&device_channel_data, sizeof(unsigned char) * image_size);
cudaMemset( device_channel_data, 0, sizeof(unsigned char) * image_size);
一切都应该正常。
推荐阅读
- vhdl - 如何修复 Xilinx fpga 中的“ERROR:Xst - basic_stringFATAL_ERROR”错误?
- java - 如何在位置感知应用中多次使用 Google Places API?
- angular - 在延迟加载的模块中加载 Ckeditor 不起作用
- php - 如何在邮递员中上传图片 - 使用 laravel
- java - 按字母顺序对包含数字的字符串进行排序
- amazon-web-services - 步进函数超过最大字符数服务限制
- c# - 为什么实体框架引用一个甚至不存在的列?
- javascript - 如何在选择选项下拉列表中添加输入文本
- python - 是否可以更改 QProgressBar 的高度?
- elasticsearch - 如何从 NEST 连接到弹性搜索