【发布时间】:2016-04-26 22:35:50
【问题描述】:
在尝试执行以下操作时,我在推力模板的实例化中收到编译时错误:
thrust::copy_if(deviceEntries.begin(), deviceEntries.end(), hostResultBuffer->begin(),
IsEntrySelected(rootLayer));
IsEntrySelected 的定义:
struct IsEntrySelected : thrust::unary_function<Entry, bool> {
inline IsEntrySelected(const unsigned long int layer):_layer(layer) {}
__device__ __host__
inline bool operator()(const Entry & val) const {
return val.selected && val.layer == _layer;
}
private:
unsigned long int _layer;
};
这个操作可以吗?我已经能够通过将结果放在 GPU 上的中间 device_vector 缓冲区中而不是直接复制到主机缓冲区来使用相同的调用,但我希望避免这样做以节省 GPU 内存。是否有另一种方法可以有条件地过滤和复制到主机,以避免额外的 GPU 缓冲区?
【问题讨论】: