编程作业:高斯消去法SSE并行化
1、高斯消去法(LU分解)串行算法如下面伪代码所示,计算模式如图1所示(第k步时第k行的除法运算,和后续行减去第k行的运算)。设计实现SSE算法,加速计算过程。讨论不同算法策略对性能的影响,如SSE和AVX、对齐与不对齐、4-5行的循环是否向量化等。提交研究报告(问题描述、SSE算法设计(最好有复杂性分析)与实现、实验及结果分析)和源码(只将程序文件和工程文件提交,不要将编译出的目标文件和可执行文件也打包提交)。
1. procedure LU (A)
2. begin
3. for k := 1 to n do
4. for j := k+1 to n do
5. A[k, j] := A[k, j]/A[k, k];
6 A[k, k] := 1.0;
7. endfor;
8. for i := k + 1 to n do
9. for j := k + 1 to n do
10. A[i, j] := A[i, j] – A[i, k] × A[k, j ];
11. endfor;
12. A[i, k] := 0;
13. endfor;
14. endfor;
15. end LU
图1. 高斯消去法计算示意图
一些细节问题:
• 计时:
• 计时方法:参考上传的示例代码中的计时方法,如QueryPerformance系列API;
• 计时精度:即使精度最高的计时机制,也可能测量不出太快的计算过程。如何解决?将计算过程重复多次,足以匹配计时精度,再计算平均时间。
• 实验设计:
• 实验数据:应测试不同矩阵规模,由小至大,随机生成矩阵元素值;
• 实验方法:为降低误差,每个测试应重复多次。
• 报告撰写:
• 符合科技论文写作规范,第一次的研究报告很多同学在这方面做得不够,大家可以找一些期刊上的论文范本,作为参考
• 实验结果分析:最忌讳看图说话,应该有充分的分析,与前面的算法设计和分析呼应上。