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

时间:2016-10-24 18:33:00

标签: c++ vector cuda nvidia

我遇到了编译错误,将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向量的相同代码将被编译。

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);

为什么会这样?

1 个答案:

答案 0 :(得分:5)

vector<bool>是C ++ 98中的一个错误,我们无法摆脱(至少在占用名称方面)。该标准建议将存储保留为空间优化的位表示,这是大多数实现所做的。

您可以使用vector<uint8_t>来解决此问题。