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

use*_*089 3 c++ cuda vector 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);
Run Code Online (Sandbox Code Playgroud)

它回来了

error: invalid use of void expression cudaMemcpyHostToDevice);
Run Code Online (Sandbox Code Playgroud)

但是带有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);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

krz*_*zaq 5

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

您可以通过使用vector<uint8_t>来解决此问题.