区组大小为3的最优循环填充的综述报告_第1页
区组大小为3的最优循环填充的综述报告_第2页
区组大小为3的最优循环填充的综述报告_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

区组大小为3的最优循环填充的综述报告循环填充是一种常见的计算机编程优化技术,可以通过改变矩阵的存储顺序来使得行读取的顺序和列读取的顺序更加紧凑,从而减少缓存未命中的次数,提高程序的性能。区组大小则是指将矩阵划分成的块的大小,一般来说区组大小越大,缓存命中的次数就越高,程序的性能也就越好。在区组大小为3的情况下,最优循环填充可以大大提高程序性能。下面就介绍一下区组大小为3的最优循环填充的细节和具体实现方法。1.静态数组的存储顺序要想实现最优循环填充,首先需要将矩阵按照合适的顺序存储在静态数组中。对于行-major的存储方式,矩阵中的每一行在内存中是连续存储的,而对于列-major的存储方式,矩阵中的每一列在内存中是连续存储的。在区组大小为3的情况下,最优的存储顺序为:(AAA)(BCD)(EEE)(BBB)(BCD)(FFF)(CCC)(DCB)(GGG)(DDD)(DCB)(HHH)其中,括号内的字母表示每一个区组,相同的字母表示在同一块中的元素,而括号之间的字母表示每一块中的元素顺序。2.循环遍历矩阵在实际实现中,要通过循环遍历矩阵中的每一个元素,以便进行计算。在区组大小为3的情况下,最优的循环顺序为:for(i=0;i<n;i+=3){for(j=0;j<m;j+=3){for(k=0;k<p;k++){C[i][j]+=A[i][k]*B[k][j];C[i][j+1]+=A[i][k]*B[k][j+1];C[i][j+2]+=A[i][k]*B[k][j+2];C[i+1][j]+=A[i+1][k]*B[k][j];C[i+1][j+1]+=A[i+1][k]*B[k][j+1];C[i+1][j+2]+=A[i+1][k]*B[k][j+2];C[i+2][j]+=A[i+2][k]*B[k][j];C[i+2][j+1]+=A[i+2][k]*B[k][j+1];C[i+2][j+2]+=A[i+2][k]*B[k][j+2];}}}在这个循环中,用于计算的矩阵被划分成了大小为3x3的子块,每一个元素与其相邻的元素都在同一块中。这样,就可以最大限度地利用缓存,提高程序的性能。需要注意的是,在实际实现中,应该保证每个子块都满足对齐的要求,以此来提高程序的效率。3.结果的读取在最后,需要将计算得到的结果从静态数组中读取出来,存储到相应的变量中。在区组大小为3的情况下,最优的读取方式为:for(i=0;i<n;i++){for(j=0;j<m;j++){C[i][j]=temp[i][j];}}这里的temp为中间静态数组,用来存储计算结果。将计算结果存储到中间数组中,再通过逐一复制的方式将结果转移到实际的结果变量中,可以避免因为对结果数组的多次间接访问而导致的性能下降。综上所述

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论