将矢量bool复制到CUDA内存时出错

Error when copying vector bool to CUDA memory

本文关键字:CUDA 内存 出错 复制 bool      更新时间:2023-10-16

我遇到一个编译错误,将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>来解决这个问题。