thrust相关内容
我正在尝试使用推力库的PARTITION_COPY函数对阵列进行分区。 我看过传递指针的示例,但我需要知道每个分区中有多少个元素。 我尝试的是将设备向量作为OutputIterator参数传递,如下所示: #include #include #include
..
最近我一直在使用推力.我注意到,为了使用推力,必须始终将数据从 cpu 内存复制到 gpu 内存. 让我们看看下面的例子: int foo(int *foo){host_vectorm(foo, foo+ 100000);device_vectors = 米;} 我不太确定 host_vector 构造函数是如何工作的,但似乎我正在复制初始数据,来自 *foo,两次 -
..
如何不仅获取值,还获取最大(最小)元素(res.val 和 res.pos)的位置? thrust::host_vectorh_vec(100);推力::生成(h_vec.begin(),h_vec.end(),兰德);推力::device_vectord_vec = h_vec;T res = -1;res = 推力::reduce(d_vec.begin(), d_vec.end()
..
我想将推力::sort_by_key 操作与主机到设备的副本重叠.尽管将 cudaStream_t 作为参数,但我的实验似乎表明,thrust::sort_by_key 是一个阻塞操作.下面我附上一个完整的代码示例,首先我测量复制数据的时间(从固定内存),然后测量执行 sort_by_key 的时间.最后,我尝试重叠这两个操作.我希望看到 sort_by_key 操作隐藏的复制时间.相反,我发现叠
..
我正在使用 thrust::sequence(myvector.begin(), myvector.end(), 0, 1) 并获得良好的有序列表,例如: 0, 1, 2, 3, 4 我的问题是如何实现下面的这样一个列表(最好的方法?) 0, 0, 0, 1, 1, 1, 2, 2 ,2, 3, 3, 3 我知道怎么用函子来做,所以请不要试图用函子来回答.我想了解在 Thrust 中是
..
我只是写了一个简单的 CUDA Thrust 程序,但是当我运行它时.我收到了这个错误:thrust::system::system_error at position 0x0037f99c . 谁能帮我弄清楚为什么会这样? #include#include#include使用命
..
我正在尝试传递结构的 device_vector 结构点{无符号整数 x;无符号整数 y;} 以下列方式传递给函数: void print(thrust::device_vector&points, unsigned int index){std::cout
..
设置几个事实: Thrust 并非所有操作都在原地操作. 您可以为 thrust::device_vectors 提供自定义分配器. 我查看了 thrust::system 和 thrust::system::cuda 并没有找到任何看起来像静态系统分配器的东西.我的意思是,我看不到替换推力在内部使用的分配器为异地算法分配额外内存的方法. 我也很难相信没有就地的函数使用给定 t
..
是否可以将thrust::reduce 操作的返回值留在设备分配的内存中?如果是的话,是否像将值分配给 cudaMalloc'ed 区域一样简单,还是应该使用推力::device_ptr? 解决方案 是否可以将推力::reduce 操作的返回值留在设备分配的内存中? 简短的回答是否定的. thrust reduce 返回一个数量,即减少的结果.此数量必须存放在主机常驻变量中
..
我正在尝试使用 CUDA Thrust 解决问题. 我有一个包含 3 元素的主机数组.是否可以使用 Thrust 创建一个包含 384 元素的设备数组,其中我的主机数组中的 3 元素重复 128 次(128 x 3 = 384)? 一般来说,从3个元素的数组开始,如何使用Thrust生成一个X大小的设备数组,其中X = Y x3,即Y是重复次数? 解决方案 一种可能的方法:
..
查看 CUDA Thrust 代码中的内核启动,似乎它们总是使用默认流.我可以让 Thrust 使用我选择的流吗?我是否遗漏了 API 中的某些内容? 解决方案 我想在 Thrust 1.8 发布后更新 talonmies 提供的答案,它引入了将 CUDA 执行流指示为的可能性 thrust::cuda::par.on(stream) 另见 推力发布 1.8.0. 在下面,
..
我正在评估 CUDA,目前正在使用 Thrust 库对数字进行排序. 我想为推力::排序创建自己的比较器,但它的速度大大减慢!我通过从 functional.h 复制代码创建了自己的 less 实现.但是,它似乎以其他方式编译并且运行速度非常慢. 默认比较器:thrust::less() - 94ms 我自己的比较器:less() - 906ms 我使用的是 Visual St
..
我有一个相当简单的问题,但我想不出一个优雅的解决方案. 我有一个 Thrust 代码,它生成包含值的相同大小的 c 向量.假设这些 c 向量中的每一个都有一个索引.我想为每个向量位置获取值最低的 c 向量的索引: 例子: C0 = (0,10,20,3,40)C1 = (1,2 ,3 ,5,10) 我会得到一个包含 C 向量索引的向量,该向量具有最低值: 结果 = (0,1 ,1
..
我可以使用哪些并行算法从给定集合中生成随机排列?特别是适合 CUDA 的提案或论文链接会很有帮助. Fisher-Yates shuffle 的顺序版本. 例子: 令 S={1, 2, ..., 7} 为源索引集.目标是并行生成 n 个随机排列.n 个排列中的每一个都只包含每个源索引一次,例如{7, 6, ..., 1}. 解决方案 Fisher-Yates shuffl
..
我了解如何从向量转到原始指针,但我跳过了关于如何倒退的节拍. //我们的宿主向量推力::host_vectorhVec;//假设我们把数据放在这里//得到一个 device_vector推力::device_vectordVec = hVec;//获取设备指针推力::device_ptr devPtr = &d_vec[0];//现在我如何回到 device_vector
..
下面的 Thrust 函数可以获得 CUDA 启动 CUDA 5.0 的最大块数,该函数用于 CUSP 中的稀疏矩阵向量乘法 (SpMV),它是一种为持久线程设置执行的技术.第一行是头文件. #include 推力::细节::后端::cuda::arch::max_active_blocks(内核
..
我有以下推力::转换调用. my_functor *f_1 = new my_functor();推力::转换(data.begin(),data.end(),data.begin(),* f_1); 我想在 PTX 文件中检测它对应的内核.但是有很多内核在它们的名称中包含 my_functor. 例如- _ZN6thrust6system4cuda6detail6detail23la
..
我目前在 VS 2013 下使用 CUDA 7.5.今天我需要从 device_vector 中删除一些元素,因此决定使用 remove_if.但是无论我修改代码,程序编译得很好,但在运行时抛出“thrust::system::system_error". 首先我尝试了自己的代码: int main(){推力::host_vectorAA(10, 1);推力::序列(AA.beg
..
我有以下琐碎的thrust::gather 程序(直接取自thrust::gather 文档) #include #include 诠释主要(无效){//用 1 标记偶数索引;带有 0 的奇数索引整数值[10] = {1, 0, 1, 0, 1, 0, 1, 0, 1, 0};推力::device_vector
..
我有一个使用 CUDA 存储在 GPU 上的无符号整数数组(通常是 1000000 元素).我想计算数组中每个数字的出现次数.只有几个不同的数字(大约 10),但这些数字可以从 1 到 1000000.大约9/10的数字是0,我不需要他们的计数.结果如下所示: 58458 ->1000 次出现15 ->412 次出现 我有一个使用 atomicAdds 的实现,但它太慢了(很多线程写入同一个地
..