zoukankan      html  css  js  c++  java
  • 针对多核架构下的并行排序

    在多核环境中,排序时如果仍然使用单核时代的串行排序算法的话,那么只能有一个CPU核在运行,其他CPU核将得不到利用。因此多核环境中的排序一般需要用到并行排序算法。

    并行排序算法和串行排序算法相比,会增加一些额外的开销,如计算开销或空间开销。那么在并行排序算法中,有那些需求呢?下面给出一些并行排序方面的需求供参考。

    需求1:算法能随CPU核数扩展,即CPU核数升级后不需要修改算法就可以取得加速比性能的线性增加。

    需求2:算法能有一个较好的能耗效率,算法并不是越快越好,而是需要在速度和CPU能耗方面取得均衡,有时候为了追求效率,但是却让CPU能耗提高了许多。最好的做法是加速比能够达到一定目标的情况下尽量降低CPU能耗。也就是说不需要片面去追求将程序并行化。有些时候程序串行执行比并行执行慢不了多少,但是CPU能耗却降低了不少。

    需求3:需要控制线程的粒度,否则线程粒度太细,频繁创建线程会导致大量的额外开销,从而使得效率大大降低。

    需求4:在设计并行排序算法时,还要考虑内存管理的开销,由于并行算法使用了多个线程,如果内存分配和释放操作频繁的话,那么花费在这方面的开销将是非常可观的,因为常规的内存分配和释放需要进行加锁解锁操作。

    当然有一些方法来缩减内存管理方面的开销

    1、采用分布式内存管理

    2、如果需要进行多块内存的分配,那么可以先分配一块大的内存,然后再将分配的大的内存划分成对应的多个小块。

    并行排序算法有许多种,不同的应用场景中需要使用不同的排序算法。一般来说,主要是针对不同的数据量,需要使用不同的算,如数量量很少的情况下,插入排序就足够了,数据量特别大的情况下,需要使用基数排序,一般情况下可以使用快速排序和归并排序。

  • 相关阅读:
    AxWindowsMediaPlayer的详细用法
    C# 播放器控件的常用方法
    在 C# 中使用文件名启动应用程序
    备份和恢复Android手机的NAND分区
    刷Recovery的方法
    WPF RadioButton的探究,为啥选中一个其他都自动不选中了呢?
    WPF大牛Josh Smith 转投 iOS 的怀抱
    终端服务的剪贴板的缺陷,导致WPF调用Clipboard.SetText() 失败
    用df命令查看分区情况
    WPF与输入法冲突研究之二:TextInput事件的BUG?
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214985.html
Copyright © 2011-2022 走看看