问题标签 [thrust]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
983 浏览

c++ - clock_gettime() CUDA 的计时问题

我想编写一个 CUDA 代码,我可以直接看到 CUDA 为加速应用程序提供的好处。

这是我使用 Thrust ( http://code.google.com/p/thrust/ )编写的 CUDA 代码

简而言之,代码所做的就是创建两个 2^23 长度的整数向量,一个在主机上,一个在设备上,彼此相同,然后对它们进行排序。它还(尝试)测量每个的时间。

在我使用的宿主向量上std::sort。在我使用的设备向量上thrust::sort

对于我使用的编译

nvcc sortcompare.cu -lrt

程序在终端的输出是

桌面:./a.out

主机时间为:19。224622882 秒

设备时间为:19。321644143 秒

桌面:

第一个 std::cout 语句在 19.224 秒后生成,如所述。然而,第二个 std::cout 语句(即使它说 19.32 秒)是在第一个 std::cout 语句之后立即产生的。请注意,我在 clock_gettime() 即 ts_host 和 ts_device 中使用了不同的时间戳进行测量

我正在使用 Cuda 4.0 和 NVIDIA GTX 570 计算能力 2.0

0 投票
1 回答
2135 浏览

c - 使用 Thrust 时在 CUDA 中启动时序内核

CUDA 中的内核启动通常是异步的,这(据我所知)意味着一旦启动 CUDA 内核,控制就会立即返回给 CPU。当 GPU 忙于处理数字时,CPU 会继续做一些有用的工作,除非 CPU 使用cudaThreadsynchronize()或强制停止cudaMemcpy()

现在我刚刚开始使用 CUDA 的Thrust库。Thrust 中的函数调用是同步的还是异步的?

换句话说,如果我调用thrust::sort(D.begin(),D.end());where D is a device vector,那么使用来测量排序时间是否有意义

如果函数调用是异步的,那么任何向量的 diff 都将为 0 秒(对于计时来说这是垃圾),但如果它是同步的,我确实会获得实时性能。

0 投票
4 回答
1119 浏览

algorithm - 您将如何在 CUDA 中实现此功能?(排序整数向量中的偏移量)

我在设备上有一个排序的整数数组,例如:

我想要另一个数组中每个元素的偏移量:

(因为第一个 0 在位置 0,第一个 1 在位置 3 等等)我事先知道会有多少不同的元素。您将如何在 CUDA 中有效地实现这一点?我不是要代码,而是要对您将实现以计算此转换的算法进行高级描述。我已经了解了推力名称空间中的各种函数,但想不出任何推力函数的组合来实现这一点。此外,这种转换是否有一个被广泛接受的名称?

0 投票
2 回答
1272 浏览

c++ - 使用 CUDA 的最大绝对差

我们有以下串行 C 代码在运行

两个向量 a[] 和 b[]:

请告诉我们如何将此代码移植到 CUDA 和 cublas?

0 投票
1 回答
1379 浏览

cuda - 具有 Cuda Thrust 的多个 GPU?

如何将 Thrust 与多个 GPU 一起使用?是否只是使用 cudaSetDevice(deviceId) 然后运行相关的推力代码的问题?

0 投票
2 回答
2707 浏览

sorting - 使用 CUDA Thrust 同时对多个数组进行排序

我需要20+通过相同的键对已经在 GPU 上的数组进行排序,每个数组的长度相同。我不能sort_by_key()直接使用,因为它也会对键进行排序(使它们无法对下一个数组进行排序)。这是我尝试的方法:

这似乎不起作用,因为gather()期望输出的数组与输入的数组不同,即这有效:

但是,我宁愿不20+为此任务分配额外的数组。我知道有一个使用推力:: 元组、推力::zip_iterator 和推力::sort_by_keys() 的解决方案,类似于这里。但是,我最多只能10在一个元组中组合多个数组,因此我需要再次复制键向量。你将如何处理这项任务?

0 投票
1 回答
2448 浏览

algorithm - CUDA Stream compaction:理解概念

我正在使用 CUDA/推力/CUDPP。据我了解,在流压缩中,数组中的某些项目被标记为无效,然后被“删除”。

现在“删除”在这里的真正含义是什么?假设原始数组A的长度为 6。如果 2 个元素无效(无论我们提供什么条件),那么

  1. 系统是否在 GPU 内存中创建一个大小为 4 的数组来存储有效元素以获得最终结果?

  2. 或者它是否从内存中物理删除无效元素并将原始数组 A 缩小到 4 大小,只保留有效元素?

无论哪种情况,这是否意味着动态内存分配正在幕后发生?但我听说动态内存分配在 CUDA 世界中是不可能的。

0 投票
1 回答
918 浏览

cuda - 在推力中处理交错数据

在推力中处理交错数据的最佳方法是什么,比如我想添加交错长度等于 3 的值,例如:

会给

或解交织数据,所以

会给

谢谢

0 投票
1 回答
1678 浏览

cuda - uint2 类型的推力向量:“没有成员 x”编译器错误?

我刚刚开始使用 Thrust 库。我正在尝试在设备上制作一个长度为 5 的向量。她我只是设置第一个元素的成员vec[0]

但是对于上面的代码,我得到了错误

我哪里错了?我认为访问本机 CUDA 矢量数据类型的成员(例如uint2with.x.y)是正确的做法。

0 投票
1 回答
3326 浏览

cuda - 对用户定义结构的推力::设备向量执行独占扫描。编译器错误

我正在修补 CUDA 提供的 Thrust 库。我试图对用户定义结构的设备向量执行包容性和独占性扫描。这是代码。

上面执行包容性的代码完美运行,给了我想要的结果。

现在在上面的代码中我已经注释掉了独占扫描。如果我尝试运行它来代替包含扫描,那么我会收到以下编译器错误。

我应该怎么办?作为参考,独占扫描的结果必须是