gpt4 book ai didi

cuda - 如何在设备和主机之间不使用 memcpys 的情况下使用推力 min_element 算法

转载 作者:行者123 更新时间:2023-12-03 17:50:58 25 4
gpt4 key购买 nike

我正在优化 pycuda/推力程序。其中,我使用 thrust::min_element标识设备上数组中最小元素的索引。

使用 Nvidia 的可视化分析器,似乎每当我调用 thrust::min_element 时,有一个 DtoH(设备到主机)memcpy。我希望一切都只在设备上进行。换句话说,min_element() 的输出应该存储在设备上,我以后可以在那里使用它,而不会遭受小型 DtoH memcpy 的成本。有没有办法做到这一点?还是我在以错误的方式思考问题?

我在下面尝试这样做,其中的想法是放置 input_ptr 指向的数组中最小元素的索引。进入 output_ptr 指向的数组的第一个元素.一切都应该在设备上完成,在主机上什么也不做。

此代码产生正确的答案,但涉及不需要的 memcpy。非常感谢您提供的任何帮助。

#include <thrust/extrema.h>
#include <thrust/device_vector.h>
#include <cuda.h>

void my_min_element(CUdeviceptr input_ptr, int length, CUdeviceptr output_ptr)
{
thrust::device_ptr<float> i_ptr((float*)input_ptr);
thrust::device_ptr<int> o_ptr((int*)output_ptr);
o_ptr[0] = thrust::distance(i_ptr,thrust::min_element(i_ptr, i_ptr+length));
}

最佳答案

我找到了我自己问题的(令人失望的)答案:

我从 CUDA 开发团队 [link] 的某个人那里找到了这句话

“我不是 Thrust 专家,所以对这个反馈持保留态度;但我认为 Thrust 的这个设计元素值得重新审视。Thrust 的表现力和有用的方式有时会因强调将结果返回给主机。我有很多场合想严格在设备内存中执行操作,因此 Thrust 将值返回到主机内存的倾向实际上妨碍了;如果我希望将结果返回给主机,我总是可以传入映射的设备指针(如果 UVA 有效,则表示由 CUDA 分配的任何主机指针)”

..所以看起来我可能不走运。如果是这样,推力的设计缺陷是什么!

关于cuda - 如何在设备和主机之间不使用 memcpys 的情况下使用推力 min_element 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21459147/

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