并发排序算法:冒泡排序与奇偶换位排序解析
1. 冒泡排序并行化分析
在分析并发算法的正确性时,不能仅依赖交错分析,还需考虑串行算法的特性以及串行代码转换可能带来的变化。下面从效率、简单性、可移植性和可扩展性四个方面对并发冒泡排序代码进行评估。
| 设计因素 | 评估情况 |
|---|---|
| 效率 | 数组元素的线性访问能预测下一个所需的缓存行数据,若按缓存行边界定义区域数据大小,可消除伪共享。但线性访问和遍历所有可能未排序元素的需求,使缓存无法重用,多线程反复将数组元素加载到缓存中,会导致内存总线数据过多,直接影响算法的可扩展性。 |
| 简单性 | 较差。串行代码和线程代码差异大,区域实现复杂,难以让线程互不干扰。不过并非所有排序算法都如此难转换,后续会介绍基于比较交换的其他排序算法的并发版本,它们更易理解和并行化。 |
| 可移植性 | 不佳。可将代码转换为 Pthreads,但对于任务分解,使用隐式线程库较难。使用 OpenMP 或 Intel TBB 的显式任务设施时,协调线程不重叠的问题仍存在。分布式内存实现需基于数据分解的算法,数据块间的数据移动会产生大量数据流量,即使在平均情况下也难以接受。 |
| 可扩展性 | 较差。线程数量和区域数量、同步开销以及线程等待锁的时间之间存在权衡。区域越多,可使 |
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



