- 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/
我不知道如何用 zip_iterator 调用 lower_bound。 这不会编译: #include #include #include void main() { typedef
问题 我正在使用 sort_by_key使用 zip_iterator 传递值.此 sort_by_key被多次调用,经过一定的迭代后变为 10x 较慢 !这是什么原因引起的性能下降 ? 症状 我正在
在以下代码的 main() 函数内的 for 循环中,我可以更改变量 ab 内的变量,即使 const auto& 在循环中使用。有什么办法可以避免这种情况吗? #include #include
我想计算 用于载体 和 , 其中表示 vector 的大小 .由于这涉及对两个 vector 的每个对应分量之间的差的平方和求平方根,因此它应该是一个高度可并行化的任务。我在 Windows 10 上
我在这里查看了很多问题以寻找类似的问题,并且有很多问题,尽管有一个小改动。我正在尝试使用 zip_iterator 作为复合键对值进行排序。 具体来说,我有以下功能: void thrustSort(
我想做的是通过 thrust::reduce_by_key 按键获取平均值.我先sort_by_key这对于 reduce_by_key 的连续键分组工作得很好.我用了this帮助我走到这一步。但是,
以下代码无法为我编译: #include #include #include typedef boost::tuple EntryTuple; struct zip_func : publi
考虑以下代码: #include #include #include #include #include typedef boost::range_detail::any_iterator,
我有两个 vector ,我想以 CSV 格式写入文件。我可以使用 for 循环“手动”执行此操作,但我第一次尝试使用 boost zip_iterator。这就是我能做到的程度。 ( online
使用 std::get<>() 有哪些选择?和 std::tie<>()与 boost 结构一起? 例子:我想使用基于范围的 for 循环对多个容器进行迭代。我可以实现 zip函数,它使用 boost
我是一名优秀的程序员,十分优秀!