将矢量bool复制到CUDA内存时出错
Error when copying vector bool to CUDA memory
我遇到一个编译错误,将bool向量复制到cuda内存将失败
bool *gpu;
cudaMalloc(reinterpret_cast<void **>(&gpu), 100);
std::vector<bool> cpu(100);
for(int i=0;i<100;i++){
cpu[i]=true;
}
cudaMemcpy(gpu, cpu.data(), 100*sizeof(bool), cudaMemcpyHostToDevice);
返回
error: invalid use of void expression cudaMemcpyHostToDevice);
,但与浮点向量相同的代码可以编译。
float *gpu;
cudaMalloc(reinterpret_cast<void **>(&gpu), 100);
std::vector<float> cpu(100);
for(int i=0;i<100;i++){
cpu[i]=i;
}
cudaMemcpy(gpu, cpu.data(), 100*sizeof(float), cudaMemcpyHostToDevice);
为什么会发生这种情况?
vector<bool>
是c++ 98中的一个错误,我们无法消除(至少在占用名称方面)。标准建议将存储保持为位的空间优化表示,这是大多数实现所做的。
您可以使用vector<uint8_t>
来解决这个问题。
相关文章:
- CUDA:统一内存和指针地址的更改
- CUDA 使用共享内存平铺 3D 卷积实现
- 在统一内存 CUDA C/C++ 中分配 2D 向量
- CUDA非法访问内核内存
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- CUDA 数组如何存储在 GPU 内存中?它们在物理上是线性的吗?
- 越界访问 CUDA 共享内存
- 矩阵矢量产品 CUDA 通过平铺和共享内存提高性能
- CUDA - 统一内存(至少是帕斯卡)
- Mvapich在内核运行时在CUDA内存上僵局
- 可能的CUDA内存分配错误
- 是否有可能解决 CUDA 内存碎片问题
- CUDA内存分配性能
- CUDA 内存管理/类问题中的指针
- CUDA:内存限定符的非法组合
- 将矢量bool复制到CUDA内存时出错
- 内核中的"while"/"for"循环导致 CUDA 内存不足错误?
- CUDA内存错误
- 在内核调用(计算1.1或1.2)期间,仅用于设备计算的CUDA内存(类型)
- 大图像的 CUDA 内存分配问题