问题标签 [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.
cuda - 推力/cudpp中的算法找到第k个最小元素
我正在寻找推力/cudapp 中第 k 个最小元素算法的实现。我用谷歌搜索了它,但似乎没有找到它。有谁知道是否存在这样的算法?
我看到有重新排序,但它没有说第 k 个最小。
cuda - 推力::device_reference 不能与 printf 一起使用?
我正在使用推力分区函数将数组分区为偶数和奇数。但是,当我尝试显示设备矢量时,它会显示随机值。请让我知道错误在哪里。我想我做的一切都是正确的。
cuda - 直接在主机上访问设备矢量元素的最快方法
我建议您参考以下页面http://code.google.com/p/thrust/wiki/QuickStartGuide#Vectors。请看第二段,它说
另请注意,可以使用标准括号表示法访问 device_vector 的各个元素。但是,因为这些访问中的每一个都需要调用 cudaMemcpy,所以应该谨慎使用它们。稍后我们将介绍一些更有效的技术。
我搜索了整个文档,但找不到更有效的技术。有谁知道最快的方法来做到这一点?即如何最快地访问主机上的设备向量/设备指针?
cuda - 通过 CUDA Thrust 查找键的出现次数和键的第一次出现的位置
假设我有一个键向量
我事先已经知道这个向量中有4
不同的键值。我想填充两个设备数组
pidx[4]
和pnum[4]
.
该
pidx
数组为我提供了键向量中每个不同键的第一个位置,即---->
上面代码片段中标记的位置。所以,在这个例子中,我应该有pidx[4] = {0, 2, 5, 7}
.该
pnum
数组为我提供了每个键的出现次数。所以,在这个例子中,我应该有pnum[4] = {2, 3, 2, 3}
.
如何使用 CUDA Thrust 执行上述操作?
c++ - 在 CUDA 中混合自定义内存管理和推力
在我的项目中,我实现了一个自定义内存分配器,以避免cudaMalloc
在应用程序“热身”后进行不必要的调用。此外,我使用自定义内核进行基本的数组填充、数组之间的算术运算等,并希望通过使用Thrust
和摆脱这些内核来简化我的代码。设备上的每个数组都是通过原始指针创建和访问的(目前),我想在这些对象上使用 device_vector
and Thrust
s 方法,但我发现自己一直在原始指针之间转换device_ptr<>
,有点混乱我的代码。
我相当模糊的问题:您将/如何Thrust
以最易读的方式组织自定义内存管理、数组方法和对自定义内核的调用的使用?
cuda - 快速 CUDA 推力自定义比较运算符
我正在评估 CUDA,目前正在使用 Thrust 库对数字进行排序。
我想为推力::排序创建自己的比较器,但它的速度大大减慢!我通过从functional.h复制代码来创建自己的较少实现。然而,它似乎以其他方式编译并且工作非常缓慢。
- 默认比较器:thrust::less() - 94 ms
- 我自己的比较器:less() - 906 ms
我正在使用 Visual Studio 2010。我应该怎么做才能获得与选项 1 相同的性能?
完整代码:
cuda - 推力::device_vector 上的推力::min_element 崩溃(CUDA 推力)
以下 CUDA Thrust 程序崩溃:
我得到的例外是:
如果我添加#include <thrust/sort.h>
并替换min_element
为sort
,它不会崩溃。
我在 Windows 7 64 位、compute_20、sm_20 (Fermi)、Debug build 上使用 CUDA 4.1。在发布版本中,我没有遇到崩溃,并且 min_element 找到了正确的元素。
是我做错了什么,还是 Thrust 中存在错误?
c++ - 给定元素数组、子列表的偏移量和长度的有效部分缩减
对于我的应用程序,我必须处理一堆对象(比如说int
s),这些对象随后被划分并分类到更小的桶中。为此,我将元素存储在一个连续的数组中
并且有关桶(子列表)的信息由各个桶中第一个元素的偏移量和子列表的长度给出。
因此,例如,给定
将导致以下分裂:
我正在寻找的是一种通用且有效的方法来运行算法,如减少,仅使用自定义内核或thrust
库在桶上。对桶求和应该给出:
我想出了什么:
选项 1:自定义内核需要大量修改、复制到共享内存、正确选择块和网格大小以及自己的算法实现,如扫描、减少等。此外,每个操作都需要自己的自定义核心。一般来说,我很清楚如何做到这一点,但在
thrust
过去几天使用之后,我的印象是可能有更聪明的方法选项 2:从偏移量生成一个键数组(
{0,0,0,1,1,1,1,1,2,2,3,...}
在上面的示例中)并使用thrust::reduce_by_key
. 不过,我不喜欢额外的列表生成。选项 3:
thrust::transform_iterator
与 一起使用thrust::counting_iterator
以即时生成上述给定的密钥列表。不幸的是,我想不出一个不需要增加设备上偏移列表的索引并破坏并行性的实现。
实现这一点的最明智的方法是什么?
cuda - 在单个 Thrust 函数调用中使用多个 GPU
如果可用,是否可以使推力函数使用多个 GPU 进行计算?我已经编写了这个 Thrust 代码,它在单个 GPU 上工作得很好。(Tesla C2050) 但是我在机器上连接了另外三张 Tesla C2050 卡,我想将它们用于我的计算。
我知道将多个 GPU 连接到一台机器上,我可以在每个 GPU 上并行运行一个 CUDA 内核,即设备 0 上的内核 0、设备 1 上的内核 1 等等。但就我而言,我想使用所有4 GPU 在单个推力函数调用上,例如推力::排序。这可能吗?
cuda - 无法为推力::cuda min_element() 函数构建比较谓词
我收到一条烦人的消息,我不太确定我做错了什么。
和谓词:
错误信息:
1>c:\program files\nvidia gpu 计算工具包\cuda\v4.0\include\thrust\detail\device\generic\extrema.inl(104): 错误:无法调用函数“equalOperator::operator()”使用给定的参数列表
谢谢!