- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题
我正在使用 sort_by_key
使用 zip_iterator
传递值.此 sort_by_key
被多次调用,经过一定的迭代后变为 10x 较慢 !这是什么原因引起的性能下降 ?
症状
我正在使用 sort_by_key
对 3 个向量进行排序,其中之一作为关键向量:
struct Segment
{
int v[2];
};
thrust::device_vector<int> keyVec;
thrust::device_vector<int> valVec;
thrust::device_vector<Segment> segVec;
// ... code which fills these vectors ...
thrust::sort_by_key( keyVec.begin(), keyVec.end(),
make_zip_iterator( make_tuple( valVec.begin(), segVec.begin() ) ) );
sort_by_key
需要 0.04 秒,在循环 3 中需要 0.1 秒,然后在其余循环中进一步降级到 0.3 秒。因此,我们看到性能下降了 10 倍。
sort_by_key
,我用手写内核手动排序替换了上面的内容:
thrust::device_vector<int> indexVec( keyVec.size() );
thrust::sequence( indexVec.begin(), indexVec.end() );
// Sort the keys and indexes
thrust::sort_by_key( keyVec.begin(), keyVec.end(), indexVec.begin() );
thrust::device_vector<int> valVec2( keyVec.size() );
thrust::device_vector<Segment> segVec2( keyVec.size() );
// Use index array and move vectors to destination
moveKernel<<< x, y >>>(
toRawPtr( indexVec ),
indexVec.size(),
toRawPtr( valVec ),
toRawPtr( segVec ),
toRawPtr( valVec2 ),
toRawPtr( segVec2 ) );
// Swap back into original vectors
valVec.swap( valVec2 );
segVec.swap( segVec2 );
最佳答案
为了在每个循环中准确计时,您需要在每个循环结束时使用 cudaThreadSynchronize。您为前两个循环获得的时间可能不是您正在寻找的实际时间。
关于sorting - 推力:sort_by_key 与 zip_iterator 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5753317/
我目前正在通过以下方式按键对值进行排序 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 内
我是一名优秀的程序员,十分优秀!