在推力矢量类型上创建常规 CUDA 内核

发布于 2024-12-14 02:25:43 字数 249 浏览 0 评论 0原文

我有一个简单的问题,例如,如果我想使用我在推力矢量上编写的 cuda 内核,我必须将我的 device_vector 转换为常规指针类型吗?或者还有其他方法吗?

哦,还有一件事,关于 device_vector 构造器, 如果我在 GPU 上分配了一个指针,是否有一个快速的 device_vector 接受该指针,或者我应该先将所有内容传输到 CPU,然后才使用适当的参数(CPU 分配的变量)声明我的 device_vector ?

谢谢,伊格尔!

i've a simple question , if for example i would like to use a cuda kernel i wrote on a thrust vector , must i cast my device_vector into a regular pointer type? or is there another way?

oh and another thing , regarding the device_vector constructur ,
if i have a pointer allocated on the GPU , is there a quick device_vector that accepts that pointer or am i supposed to tranfer everything first to the CPU and only then declare my device_vector with the appropriate arguments(CPU allocated variables) ?

Thanks , igal !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

荒芜了季节 2024-12-21 02:25:43

我想使用我在推力矢量上编写的 cuda 内核,我必须将我的 device_vector 转换为常规指针类型吗?

您有 2 个选择:

  1. 您可以使用函子和通用算法。详细信息手册(页
    18-22)。 我还可以建议您仔细查看 zip_iterator 的
  2. 如果您有非标准算法或者您已经有一个,
    内核,那么将向量转换为 raw_pointer 会更简单 (手册 第 11 页)

如果我在 GPU 上分配了一个指针,是否有一个接受该指针的快速 device_vector

要使用标准算法,您可以将指针包装到类 device_ptr。然后您可以使用与 device_vector 相同的对象。

int N = 10;
// raw pointer to device memory
int * raw_ptr;
cudaMalloc((void **) &raw_ptr, N * sizeof(int));
// wrap raw pointer with a device_ptr
thrust::device_ptr<int> dev_ptr(raw_ptr); // use device_ptr in thrust algorithms
thrust::fill(dev_ptr, dev_ptr + N, (int) 0); // access device memory through device_ptr
dev_ptr[0] = 1;
// free memory
cudaFree(raw_ptr);

代码来自手册第12.

i would like to use a cuda kernel i wrote on a thrust vector , must i cast my device_vector into a regular pointer type?

You have 2 options:

  1. You can use functors and general algorithms. Details in manual (pp
    18-22). I can also advice to look close to zip_iterator's
  2. If you have a non standard algorithm or you're already have a
    kernel, then it will be more simple to cast vector to raw_pointer (manual p. 11)

if i have a pointer allocated on the GPU , is there a quick device_vector that accepts that pointer

To use standart algorithms you can wrap pointer to class device_ptr. Then you can use object same as device_vector.

int N = 10;
// raw pointer to device memory
int * raw_ptr;
cudaMalloc((void **) &raw_ptr, N * sizeof(int));
// wrap raw pointer with a device_ptr
thrust::device_ptr<int> dev_ptr(raw_ptr); // use device_ptr in thrust algorithms
thrust::fill(dev_ptr, dev_ptr + N, (int) 0); // access device memory through device_ptr
dev_ptr[0] = 1;
// free memory
cudaFree(raw_ptr);

Code from manual p. 12.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文