首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【转载】双调排序Bitonic Sort,适合并行计算的排序算法

双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU、fpga来计算。...和前面sort的思路正相反, 是一个bottom up的过程——将两个相邻的,单调性相反的单调序列看作一个双调序列, 每次将这两个相邻的,单调性相反的单调序列merge生成一个新的双调序列, 然后排序(...详细Bitonic merge图(本图只画到生成一个16长的双调序列,最后排序没有画出): ? 最后再放一个8个元素排序的示意图[5]: ?...但是这种方法比较容易转化为针对GPU的并行算法。所以一般来说,并行计算中常使用双调排序来对一些较小的数组进行排序[3]。 如果要考虑不用padding,用更复杂的处理方法,参考[4] n!...Bitonic Sort(双调排序)基础, http://blog.csdn.net/jiange\_zh/article/details/49533477 [3] 双调排序:从串行到并行,以及OpenCL

1.7K30

双调排序Bitonic Sort,适合并行计算的排序算法

双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU、fpga来计算。...和前面sort的思路正相反, 是一个bottom up的过程——将两个相邻的,单调性相反的单调序列看作一个双调序列, 每次将这两个相邻的,单调性相反的单调序列merge生成一个新的双调序列, 然后排序(...但是这种方法比较容易转化为针对GPU的并行算法。所以一般来说,并行计算中常使用双调排序来对一些较小的数组进行排序3。 如果要考虑不用padding,用更复杂的处理方法,参考4 n!...从并行排序方法理解并行化思维——冒泡、归并、双调排序的GPU实现, http://blog.csdn.net/abcjennifer/article/details/47110991 2 并行计算】Bitonic...Sort(双调排序)基础, http://blog.csdn.net/jiange_zh/article/details/49533477 3 双调排序:从串行到并行,以及OpenCL上的实现, http

2.9K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Udacity并行计算课程笔记】- Lesson 4 Fundamental GPU Algorithms (Applications of Sort and Scan)

    不仅是这个例子,Scan在GPU运算中还有很多应用,例如GPU快速排序中也许要用到Scan运算,所以Scan非常的重要。...II.Sort 排序在GPU应用中有不少挑战,大多数的算法都是串行的,或者说通常以串行方式体现。很多我们在学校学到的算法在此系列课程中可能并不适用,这在以后的内容中会体现出来。...冒泡排序 下面举个栗子: 对 [5 1 4 2 3]使用冒泡排序: 我们都知道串行方式的冒泡排序是每次都需要比较相邻的元素。如果第一个比第二个大,就交换他们两个。...双调排序(Bitonic Sort) 不同于上面的排序方法,双调排序是一种与数据无关的排序方法。该算法特别适用于GPU并行计算。 在介绍双调排序之间需要先介绍什么是双调序列。...更多的细节可以阅读双调排序Bitonic Sort,适合并行计算的排序算法。 4.

    80230

    【Udacity并行计算课程笔记】- Lesson 4 Fundamental GPU Algorithms

    不仅是这个例子,Scan在GPU运算中还有很多应用,例如GPU快速排序中也许要用到Scan运算,所以Scan非常的重要。...[v1vrmkjak8.png] II.Sort 排序在GPU应用中有不少挑战,大多数的算法都是串行的,或者说通常以串行方式体现。...冒泡排序 下面举个栗子: 对 5 1 4 2 3使用冒泡排序: 我们都知道串行方式的冒泡排序是每次都需要比较相邻的元素。如果第一个比第二个大,就交换他们两个。...双调排序(Bitonic Sort) 不同于上面的排序方法,双调排序是一种与数据无关的排序方法。该算法特别适用于GPU并行计算。 在介绍双调排序之间需要先介绍什么是双调序列。...[image.png] 更多的细节可以阅读双调排序Bitonic Sort,适合并行计算的排序算法。 4.

    1.2K10

    数据科学家令人惊叹的排序技巧

    ==2.0.0-beta1 #tensorflow-gpu==2.0.0-beta1 slows sorting pytorch 1.1 Python Python 包含两个内置的排序方法: my_list.sort...TensorFlow 的排序算法通过 CUB 库采用在 GPU 上的 radix sort ,详细介绍可以查看: https://github.com/tensorflow/tensorflow/issues...通过下列代码来指定采用 GPU: gpu_tensor=my_pytorch_tensor.cuda() %time torch.sort(gpu_tensor) PyTorch 在面对一个数据量大于一百万行乘...pandas 的相同排序算法实现都会慢过 numpy TensorFlow 在 CPU 上速度很快,而 TensorFlow-gpu 版本在 CPU 上使用会变慢,在 GPU 上排序更慢,看起来这可能是一个...bug; 原生的 Python inplace 的排序速度非常慢,对比最快的 GPU 版的 PyTorch 要慢接近 100 倍。

    1.3K10

    【C++】map和set的使用

    set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。 set在底层是用二叉搜索树(红黑树)实现的。...在内部,multiset中的元素总是按照其内部比较规则(类型比较)所指示的特定严格弱排序准则进行排序 multiset容器通过key访问单个元素的速度通常比unordered_multiset容器慢...map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。...multiset容器通过key访问单个元素的速度通常比unordered_multiset容器慢,但当使用迭代器遍历时会得到一个有序序列。 multiset底层结构为二叉搜索树(红黑树)。...test_map1() { map dict; //dict.insert(pair, string)("sort", "排序");

    6710

    C++进阶:详细讲解容器set与map(pair、multiset、multimap)

    set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。...multiset容器通过key访问单个元素的速度通常比unordered_multiset容器慢,但当使用迭代器遍历时会得到一个有序序列。...map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。...void testmap3() { map m1;//空的 m1.insert(pair("sort", "排序"));//匿名对象...multiset容器通过key访问单个元素的速度通常比unordered_multiset容器慢,但当使用迭代器遍历时会得到一个有序序列。

    40510

    NVIDIA HugeCTR,GPU 版本参数服务器---(8) ---Distributed Hash之后向传播

    就是把 sample_id 按照 hash_value_index 来排序,最后排序结果放入 hash_value_index_sort 和 sample_id_sort。...embedding_feature 的第1行,第2行,第4行(从0开始的序列) hash_value_index_sort [1,1,1,2,2,3,3,4,5,5] 排序之后的结果,举例来说,111...hash_value_index_sort 是hash_value_index排序之后的结果,举例来说,111 意思是本batch之中,一共有3个key对最终embedding_feature第一行做出了贡献...embedding_feature 的第1行,第2行,第4行(从0开始的序列) hash_value_index_sort [1,1,1,2,2,3,3,4,5,5] 排序之后的结果,举例来说,1,1,1...embedding_feature 的第1行,第2行,第4行(从0开始的序列) hash_value_index_sort [1,1,1,2,2,3,3,4,5,5] 排序之后的结果,举例来说,1,1,1

    96920

    【C++】STL 算法 ⑥ ( 二元谓词 | std::sort 算法简介 | 为 std::sort 算法设置 二元谓词 排序规则 )

    文章目录 一、二元谓词 1、二元谓词简介 2、 std::sort 算法简介 3、 代码示例 - 为 std::sort 算法设置 二元谓词 排序规则 一、二元谓词 1、二元谓词简介 " 谓词 ( Predicate...::sort 算法简介 C++ 标准模板库 ( STL , Standard Template Library ) 中的 std::sort 算法 是 " 排序算法 ",其底层 算法原理就是 使用 排序算法...Insertion Sort " 算法 ; 递归层次深 的序列 使用 " 堆排序 Heap Sort " 算法 , 避免快排的最坏情况 ; std::sort 算法 函数原型 : template sort 排序算法, 默认使用快速排序 sort(vec.begin(), vec.end(), Compare()); 3、 代码示例 - 为 std::sort 算法设置 二元谓词 排序规则...排序算法 , 将 vector 容器中的元素进行排序 ; // std::sort 排序算法, 默认使用快速排序 sort(vec.begin(), vec.end(), Compare

    26610

    C++拾取——使用stl标准库实现排序算法及评测

    堆排序 template void heap_sort(ForwardIt first, ForwardIt last) { std::make_heap(first...除了这几种排序外,STL标准库还提供了其他几种方法 使用partial_sort进行局部排序 使用sort函数 使用关系容器,比如set         这三种的测试代码如下 TEST_F(UtSort...,只需要前N个元素是排序的,则可以优先考虑partial_sort。...完整排序中,std::sort是最快的,其次是quick_sort。heap_sort和partial_sort差不多。最差的是selection_sort。        ...同时,我们看使用partial_sort只选出并排列最小的10个元素的耗时是2.51487毫秒。这比任何一个排序都要快两个数量级。         所以根据不同场景,选择合适的排序非常重要。

    62520

    探索CC++的奥秘之list

    对于vector来说用小于没有问题,但对于list来讲,迭代器中end()节点的地址不一定比begin()大, end()的节点是有效数据的下一个位置,也就是哨兵位。...set底层就是更复杂的迭代器,也就是树了,forward_list是单向迭代器,  排序应该用vector,不应该用list,vector的效率远高于list,  数据量越大,差距越大一些,list排序终究还是要慢不少...如果我们真的要数据排序,我们不应该用链表,链表访问数据相比vector毕竟还是慢,list底层用的是归并算法。所以说list的sort意义不大。...printf("list sort:%d\n", end2 - begin2); } int main() {     test_op();     return 0; } list的作用是当排序值比较小的时候...int main() {     int myints[] = { 17,89,7,14 };     std::list mylist1, mylist2;     std::list

    3600
    领券