问题标签 [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 回答
2269 浏览

cuda - 推力::count 的表现

我将以下代码作为数据重组的一部分,以供以后在 CUDA 内核中使用:

现在,如果我设置num为 0(取消注释第 5 行,并注释掉第 6 行),应用程序以超过 30 fps 的速度运行,这是我的目标。但是,当我设置num为等于thrust::count调用时,帧率下降到大约 1-2 fps。为什么会这样?

我的理解是,推力应该是一组高度优化的算法,这些算法利用了 GPU 的力量,所以我很惊讶它会对我的程序性能产生这种影响。这是我第一次使用推力,所以我可能不知道一些重要的细节。

在循环中使用thrust::count是否会导致它运行如此缓慢?我怎样才能优化我的使用呢?

给出一些数字,在我目前的测试用例中,num_particles大约是 2000,num_cells大约是 1500。

0 投票
3 回答
5758 浏览

c++ - 使用 CUDA 的 Thrust 库来减少阵列

我正在使用推力来查找数组的总和,c,但我不断收到编译器错误“错误:表达式必须具有类类型”

这是不起作用的代码行,c 是一个浮点数组,是其他 2 个数组的元素总和。

干杯

0 投票
1 回答
1643 浏览

cuda - 包含指针的结构的推力向量

我有以下数据结构:

我需要从主机传递的 GPU 上的一组此类结构。最简单的方法是

棘手的时刻是如何分配内存ptr以及如何在那里复制数据。有什么建议吗?

0 投票
1 回答
737 浏览

c++ - 推力:对另一个数组索引的数组元素求和 [Matlab 的语法 sum(x(indices))]

我正在尝试使用 Thrust 库对由另一个数组索引的数组元素求和,但我找不到示例。也就是说,我想实现Matlab的语法

这是一个指导代码,试图指出我想要实现的目标:

另外,从主机代码中,我可以使用global_array[N]而不用cudaMemcpyFromSymbol将其复制回来吗?

每条评论/答案都值得赞赏:)

谢谢

0 投票
1 回答
574 浏览

exception - 英伟达 cuda 推力中止()调用 find_if

我正在尝试执行 Thrust 快速入门指南中的一些示例代码。它贴在下面。让我丧命的是,当我运行它时,每当我点击 find_if 时都会抛出一个异常“R6010 -abort() 已被调用”。

我已经尝试过使用 4.1 和 4.2 运行时。我正在使用最新的 NSight 候选版本(2012 年 5 月 4 日下载)在 Visual Studio 2010 Ultimate 中构建它。我的显卡是 NVidia NVS 3100m。

我可以运行在一个新的 VS 项目(不使用 Thrust)中生成的向量添加示例,它工作正常。然而,添加推力给了我这种奇怪的感觉。

任何建议表示赞赏。

编辑1

又是一条信息。我正在深入研究这一点,发现在 cudaThreadSynchronize() 期间发现了一个错误。消息是“launch_closure_by_value”。

0 投票
1 回答
1221 浏览

cuda - 使用向量和迭代器进行 NVidia 推力编程 - 基本问题

我正在尝试编写一些简单的程序来学习 NVidia CUDA/Thrust。我是个菜鸟。我想要做的是使用带有自定义谓词的 find_if 。目前我的谓词只是在所有内容上都返回 true,所以我正在尝试获取所有输入。我想最终搜索字符串,在其中我用一些字符串 X 初始化函子,然后让 GPU 找到所有匹配的字符串。

我对这里的几点感到困惑。

我尝试填充一个充满指向我的字符串的指针的 device_vector,然后针对我的 MemCmp 谓词运行它。

首先,device_vector“知道”将我的字符串从主内存复制到GPU内存还是只是复制一个指针值?

其次,在“count = d_inputVector.end() - iter;”这一行 它返回 12 是我的迭代器中的项目数,它是 find_if 的结果。这不是错的吗?如果我尝试 iter - d_inputVector.begin() 返回零,这不会让我到任何地方。

最后,我获取小程序结果的方法是否正确?我是否要使用thrust::copy 将内存复制到host_vector 中,并且最后的循环是否足以查看结果?

非常感谢任何建议。谢谢,

0 投票
1 回答
1022 浏览

cuda - 推力减少不适用于不相等的输入/输出类型

我正在尝试使用 Thrust 减少一组值的最小值和最大值,但我似乎被卡住了。给定一组浮点数,我想要一次减少它们的最小值和最大值,但是使用推力的 reduce 方法,我得到了所有模板编译错误的母亲(或至少是阿姨)。

我的原始代码包含 5 个值列表,分布在 2 个我想要减少的 float4 数组中,但我已将其归结为这个简短的示例。

如果我将它分成 2 个缩减而不是它当然有效。那么我的问题是:是否有可能通过推力同时减少最小值和最大值,以及如何减少?如果不是,那么实现上述减少的最有效方法是什么?转换迭代器会帮助我吗(如果是这样,那么减少会是一次减少吗?)

一些附加信息:我正在使用 Thrust 1.5(由 CUDA 4.2.7 提供) 我的实际代码使用的是 reduce_by_key,而不仅仅是 reduce。我在写这个问题时发现了 transform_reduce ,但是这个问题没有考虑到密钥。

0 投票
3 回答
704 浏览

cuda - 如何最好地将大量字符数组传输到 GPU?

我是 CUDA 新手,正在尝试对大量数组进行一些处理。每个数组是一个大约 1000 个字符的数组(不是字符串,只是存储为字符),最多可以有 100 万个字符,因此要传输大约 1 gb 的数据。这些数据已经全部加载到内存中,并且我有一个指向每个数组的指针,但我认为我不能依赖所有数据在内存中的顺序,所以我不能一次调用就全部传输。

我目前第一次尝试使用推力,并基于此消息的解决方案 ...我使用分配所有内存的静态调用创建了一个结构,然后每个单独的构造函数复制该数组,我有一个转换调用,它接收带有指向设备数组的指针的结构。

我的问题是这显然非常慢,因为每个数组都是单独复制的。我想知道如何更快地传输这些数据。

这个问题中(这个问题大部分是不相关的,但我认为用户正在尝试做类似的事情)talonmies 建议他们尝试使用 zip 迭代器,但我看不出这将如何帮助传输大量数组。

我在写这个问题时也刚刚发现了 cudaMemcpy2DToArray 和 cudaMemcpy2D ,所以也许这些就是答案,但我没有立即看到它们是如何工作的,因为它们似乎都没有将指向指针的指针作为输入......

欢迎任何建议...

0 投票
3 回答
2921 浏览

cuda - 如何使用 CUDA Thrust 通过索引列表从矩阵中收集行

这似乎是一个简单的问题,但我就是想不出一个优雅的方式来用 CUDA Thrust 做到这一点。

我有一个二维矩阵 NxM 和一个大小为 L 的所需行索引的向量,它是所有行的子集(即 L < N)并且不规则(基本上是一个不规则列表,如 7,11,13,205,... ETC。)。该矩阵按行存储在推力装置向量中。索引数组也是一个设备向量。这是我的两个问题:

  1. 从原始 NxM 矩阵复制所需行形成新矩阵 LxM 的最有效方法是什么?
  2. 是否可以为原始 NxM 矩阵创建一个迭代器,该迭代器仅取消对属于所需行的元素的引用?

非常感谢您的帮助。

0 投票
1 回答
534 浏览

c - 将 openMp 程序移植到 cuda c:正确的 grid_size/block_size 和缩减

我想将 openMP 程序转换为 cuda c。
我试图在网络和 sdk 上找到我的方式。但是材料超出了我的水平。
我的 c 程序循环遍历n=2^30索引并添加每个索引的权重。

1) 正确的 grid_size 和 block_size 是多少?
我的猜测是复制openMP并做

2) 如何在 cuda 中实现 openMP 缩减?
我尝试acudaMemcpy然后减少标准c中的数组,但它似乎很慢。
我看着thrust图书馆和它的reduce经营者。但我看不到如何将它与我当前的代码集成。

程序.c

程序.cu

我的显卡