论文部分内容阅读
在多核处理器不断普及的今天,并行软件开发技术的加速发展已成为关键。多核处理器既促进了并行软件开发技术的发展,也依赖于并行软件开发技术。但是软件并行化的发展需要克服重重困难。当今在使用的很大部分软件还是串行思想开发的产物,我们需要从根本软件开发理念上改变,进行软件并行化。目前已经出现了多种并行编程模型,主要有共享存储编程模型、消息传递模型和分布式存储模型。多线程并行编程就基于共享存储的编程模型。矩阵相乘算法的重要性不言而喻,在很多科学计算和工程方面应用极广。因此,对矩阵相乘算法做了实验,分别采用了Win32多线程API、OpenMP及C#多线程对其进行实现。在此过程中,归结了这几种多线程编程方法的特性和优缺点。Win32多线程API具有性能优,可以显性操作线程的优点,但是实现相对复杂,对软件开发人员要求高。OpenMP实现简单,适合于优化循环。但是性能相对Win32多线程API稍微逊色。而C#在语言级提供了对多线程的支持,但是由于其基于虚拟机的机制导致其性能还不如前两者,实现难度介于两者之间,也可显性操作线程。本实验结果有助于在开发时对编程方法的选择。排序算法是常用而且对其本身性能要求很高的算法。在前面实验研究的基础上,提出了一种排序组合算法,并且对后半部分的归并排序进行了改进。改进的方法采用了多线程的思想,将原来单线程执行的归并过程进化成可以同时执行的两个线程。两个线程分别从已经有序的两个序列的最大值端和最小值端同时进行比较,将相应的结果放在新序列的相应端。两个线程都工作至新序列的中间为止,也达到了负载平衡的目的。该算法的实验采用前面实验分析结果中性能最优的Win32 API多线程编程方法进行实现。实验结果对比表明并行改进后的算法性能提升显著,并且随着数据规模的扩大,提升比例稳定升高。