- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Thrust inside user written kernels
(4 个回答)
5年前关闭。
Thrust 库可用于对数据进行排序。调用可能如下所示(带有键和值向量):
thrust::sort_by_key(d_keys.begin(), d_keys.end(), d_values.begin());
d_keys
和
d_values
在 CPU 内存中;大部分执行都发生在 GPU 上。
sort_by_key
来自内核的函数?
unsigned long long int
或
unsigned int
和数据总是
unsigned int
.我应该如何为这些类型发出推力调用?
最佳答案
正如 Talonmies 链接的问题中所述,您不能从 CUDA 函数(例如 __device__
或 __global__
)调用 Thrust。但是,这并不意味着您不能通过 Thrust 使用设备内存中已有的数据。相反,您可以使用包装原始数据的推力向量从主机调用所需的推力函数。例如
//raw pointer to device memory
unsigned int * raw_data;
unsigned int * raw_keys;
//allocate device memory for data and keys
cudaMalloc((void **) &raw_data, N_data * sizeof(int));
cudaMalloc((void **) &raw_keys, N_keys * sizeof(int));
//populate your device pointers in your kernel
kernel<<<...>>>(raw_data, raw_keys, ...);
...
//wrap raw pointer with a device_ptr to use with Thrust functions
thrust::device_ptr<unsigned int> dev_data_ptr(raw_data);
thrust::device_ptr<unsigned int> dev_keys_ptr(raw_keys);
//use the device memory with a thrust call
thrust::sort_by_key(d_keys, d_keys + N_keys, dev_data_ptr);
raw_data
指向的设备内存和
raw_keys
当你用
Thrust::device_ptr
包裹它们时,它们仍然在设备内存中,因此当您从主机调用 Thrust 函数时,它不必将任何内存从主机复制到设备,反之亦然。也就是说,您使用设备内存直接在 GPU 上进行排序;您将拥有的唯一开销是启动 Thrust 内核和包装原始设备指针。
unsigned int * raw_ptr = thrust::raw_pointer_cast(dev_data_ptr);
unsigned long long int
或
unsigned int
作为您的 key ,数据为
unsigned int
,这不是问题,因为 Thrust 是模板化的。即
sort_by_key
的签名是
template<typename RandomAccessIterator1 , typename RandomAccessIterator2 >
void thrust::sort_by_key(
RandomAccessIterator1 keys_first,
RandomAccessIterator1 keys_last,
RandomAccessIterator2 values_first )
关于sorting - CUDA:如何直接在 GPU 上使用推力::sort_by_key?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609126/
我目前正在通过以下方式按键对值进行排序 thrust::sort_by_key(thrust::device_ptr(keys), thrust::device
我正在 CUDA 上寻找一种排序算法,该算法可以对元素数组 A 进行排序( double )并返回该数组 A 的键 B 数组。 我知道sort_by_key Thrust 库中的函数,但我希望我的元素
我正在尝试对 Vec 进行排序使用返回对向量中字符串的引用的键函数。一个人为的例子是使用身份函数作为关键函数(这当然是无用的,但它是重现我的问题的最小例子): fn key(x: &String) -
我正在尝试对 Vec 进行排序使用返回对向量中字符串的引用的键函数。一个人为的例子是使用身份函数作为关键函数(这当然是无用的,但它是重现我的问题的最小例子): fn key(x: &String) -
我在尝试使用 sort_by_key 时遇到问题: 我在终端中收到以下错误: terminate called after throwing an instance of 'thrust::syste
在cuda/thrust: Trying to sort_by_key 2.8GB of data in 6GB of GPU RAM throws bad_alloc ,我读到 sort_by_ke
这个问题在这里已经有了答案: Thrust inside user written kernels (4 个回答) 5年前关闭。 Thrust 库可用于对数据进行排序。调用可能如下所示(带有键和值向量
问题 我正在使用 sort_by_key使用 zip_iterator 传递值.此 sort_by_key被多次调用,经过一定的迭代后变为 10x 较慢 !这是什么原因引起的性能下降 ? 症状 我正在
以这个例子为例 fn main() { let mut test: Vec = Vec::new(); test.push(5); test.push(8); test
我在 cuda 中使用带有 sort_by_key() 的 tiled_range 和键在 sort_by_key 期间不会重新排序,只是值... 例如:我有一个代表键的 vector : Keys
我是 Rust 编程的新手,正在阅读 Rust 书中的闭包章节。书中提到 sort_by_key 函数需要类型为 FnMut 的闭包,但我想知道 sort_by_key 函数闭包是否不会改变项目那已经
我在这里查看了很多问题以寻找类似的问题,并且有很多问题,尽管有一个小改动。我正在尝试使用 zip_iterator 作为复合键对值进行排序。 具体来说,我有以下功能: void thrustSort(
我想将 thrust::sort_by_key 操作与主机到设备的拷贝重叠。尽管将 cudaStream_t 作为参数,但我的实验似乎表明 thrust::sort_by_key 是一个阻塞操作。下面
我正在使用c++和cuda/thrust在GPU上进行计算,这对我来说是一个新领域。不幸的是,我的代码(下面的 MCVE)效率不高,所以我想知道如何优化它。该代码执行以下操作: 有两个键 vector
我刚刚开始使用推力,到目前为止我遇到的最大问题之一是似乎没有关于需要多少内存操作的文档。所以我不确定为什么下面的代码在尝试排序时会抛出 bad_alloc(在排序之前我仍然有 >50% 的 GPU 内
我是一名优秀的程序员,十分优秀!