gpt4 book ai didi

cuda - 有没有更好更快的方法使用推力从CPU内存复制到GPU?

转载 作者:行者123 更新时间:2023-12-02 17:43:52 34 4
gpt4 key购买 nike

最近我经常使用推力。我注意到,为了使用推力,必须始终将数据从 cpu 内存复制到 GPU 内存。
让我们看看下面的例子:

int foo(int *foo)
{
host_vector<int> m(foo, foo+ 100000);
device_vector<int> s = m;
}

我不太确定 host_vector 构造函数是如何工作的,但似乎我正在复制来自 *foo 的初始数据两次 - 一次复制到初始化时的 host_vector,以及初始化 device_vector 时的另一个时间。有没有更好的方法从 cpu 复制到 gpu 而无需制作中间数据副本?我知道我可以使用 device_ptr 作为包装器,但这仍然不能解决我的问题。
谢谢!

最佳答案

device_vector 的构造函数之一采用由两个迭代器指定的一系列元素。它足够智能,可以理解示例中的原始指针,因此您可以直接构造 device_vector 并避免临时 host_vector:

void my_function_taking_host_ptr(int *raw_ptr, size_t n)
{
// device_vector assumes raw_ptrs point to system memory
thrust::device_vector<int> vec(raw_ptr, raw_ptr + n);

...
}

如果您的原始指针指向 CUDA 内存,请引入 device_ptr:

void my_function_taking_cuda_ptr(int *raw_ptr, size_t n)
{
// wrap raw_ptr before passing to device_vector
thrust::device_ptr<int> d_ptr(raw_ptr);

thrust::device_vector<int> vec(d_ptr, d_ptr + n);

...
}

使用device_ptr不会分配任何存储空间;它只是对类型系统中指针的位置进行编码。

关于cuda - 有没有更好更快的方法使用推力从CPU内存复制到GPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9373455/

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