我遇到了编译错误,将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);
为什么会这样?
答案 0 :(得分:5)
vector<bool>
是C ++ 98中的一个错误,我们无法摆脱(至少在占用名称方面)。该标准建议将存储保留为空间优化的位表示,这是大多数实现所做的。
您可以使用vector<uint8_t>
来解决此问题。