小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

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

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

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

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

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

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

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

1、采用分布式内存管理

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

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

posted on 2014-07-31 17:01  Coding菌  阅读(481)  评论(0编辑  收藏  举报