《高级程序设计》实验报告2018(共6页).doc
《《高级程序设计》实验报告2018(共6页).doc》由会员分享,可在线阅读,更多相关《《高级程序设计》实验报告2018(共6页).doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上信息与通信工程学院高级程序设计实验报告学 号:S姓 名:王世督专 业:信息与通信工程现场演示(7分)实验结果(7分)实验报告(6分)实验成绩实验一(共20分)实验二(共20分)总成绩(共40分)2018年3月实验一 使用二维动态数组实现大矩阵乘法一、任务描述(1)使用二维动态数组,实现N*N矩阵的乘法,其中N=1K。(2)测试不同的循环嵌套方式,分析运算时间差异的原因。二、设计方案普通矩阵乘法程序(为简单起见,以 n阶方阵举例)有内外 3 层循环,计算模式是 A 矩阵和 B 矩阵分别按照行访问和列访问。由于 C 语言按行存储二维数组,因此程序访问 Bkj 的数据分散在
2、内存上。当 n的规模较大时,这种循环访问、间隔存放的内侧列数据的模式导致 Cache 不命中情况频繁发生,需要每次从主存读取,严重影响程序效率。核心程序代码如下:for (i=0; in; i+) for (j=0; jn; j+) for (k=0; kn; k+) Cij += Aik*Bkj;调整顺序矩阵乘法:研究上述普通矩阵乘法,发现变量值之间没有相关性,因此可以把内层的 j循环和 k 循环颠倒次序而不影响程序正确性。这种顺序调整的好处是程序访问 Bkj 的数据分布在连续的内存区域,当第一次访问某个主存单元后,相邻的多个单元装入多级高速缓存中(根据不同处理器 Cache 大小和数据带宽
3、而不同),下次访问直接 Cache 命中,大大降低了 Cache 未命中率,发挥了 Cache 存取比主存存取速度快的优势。三、主要程序#define N 1024int *malloc2Dint(int a, int b)/连续型int i;int *pp = (int *)malloc(sizeof(int *)*a);int *p = (int *)malloc(sizeof(int)*a*b);if (pp = NULL | p = NULL) exit(-1);for (i = 0; i a; i+) ppi = p + b * i;return pp;void clear(int
4、*a)int i, j;for (i = 0; i N; i+) for (j = 0; j N; j+) aij = 0;int compare(int *a, int *b)int i, j, k;k = 0;for (i = 0; i N; i+) for (j = 0; j N; j+) if (aij != bij) k = 1;break;return k;int main()long int clk_0, clk_1;/计时float clk;int *A, *B, *C, *D, flag;/矩阵A = malloc2Dint(N, N);B = malloc2Dint(N,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级程序设计 高级 程序设计 实验 报告 2018
限制150内