gpt4 book ai didi

c++ - 将 copy_if 设备推送到主机

转载 作者:行者123 更新时间:2023-11-28 05:42:12 25 4
gpt4 key购买 nike

尝试执行以下操作时,我在 thrust 模板的实例化中收到编译时错误:

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 缓冲区,有条件地过滤和复制到主机?

最佳答案

Is this operation possible?

不,不可能以这种方式使用copy_if

没有 CUDA 设备-> 主机复制操作可以将任意分散的数组复制到压缩数组。因此,推力可以在 CUDA 后端完成此操作的唯一方法是在设备上创建一个中间数组来执行压缩操作,然后是 cudaMemcpy 来实现设备->主机传输(它不像你发现的那样做)。因此,没有任何办法绕过临时数组,即使 thrust 会“自动”为您完成(它不会)。

如果空间非常宝贵,则将数组原封不动地复制到主机并在那里进行流压缩。但出于性能原因,我希望在设备上进行流压缩,然后将(可能更小的)数组传输到主机通常会更好。

关于c++ - 将 copy_if 设备推送到主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36877029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com