【问题标题】:Error when copying vector bool to CUDA memory将向量 bool 复制到 CUDA 内存时出错
【发布时间】:2017-03-06 15:04:33
【问题描述】:

我遇到了一个编译错误,将布尔向量复制到 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);

为什么会这样?

【问题讨论】:

标签: c++ vector cuda nvidia


【解决方案1】:

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

您可以改用vector&lt;uint8_t&gt; 来解决此问题。

【讨论】:

  • 经过快速测试,它似乎工作正常。它也应该是 uint8_t 而不是 uin8_t。
猜你喜欢
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2016-01-20
  • 2023-03-02
  • 1970-01-01
  • 2012-08-21
相关资源
最近更新 更多