cache和程序访问的局部性.docx

上传人:苏美尔 文档编号:10735295 上传时间:2021-06-01 格式:DOCX 页数:6 大小:53.70KB
返回 下载 相关 举报
cache和程序访问的局部性.docx_第1页
第1页 / 共6页
cache和程序访问的局部性.docx_第2页
第2页 / 共6页
cache和程序访问的局部性.docx_第3页
第3页 / 共6页
cache和程序访问的局部性.docx_第4页
第4页 / 共6页
cache和程序访问的局部性.docx_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《cache和程序访问的局部性.docx》由会员分享,可在线阅读,更多相关《cache和程序访问的局部性.docx(6页珍藏版)》请在三一文库上搜索。

1、精选文档实验项目六: cache 和程序访问的局部性一、实验目的:1.通过实际程序的执行结果,了解程序访问的局部性对带有cache 的计算机系统性能的影响。二、实验要求:1. 在以下程序中,修改或添加必要的语句(如添加计时函数等),以计算和打印主体程序段(即 for 循环段)的执行时间。分别以 M=10 、 N=100000 ; M=1000 、 N=1000 ; M=100000 、N=10 ;执行程序A和程序B,以比较两种for循环段执行 时间的长短。下列程序中给出的数组a 是局部临时变量,分配在栈中,也可改用静态全局变量,或在堆中动态申请空间。程序段 Aassign-array-rows

2、()int i,j;short aMN;for(i=0;iM;i+)for(j=0;jN;j+)aij=0;程序段 Bassign-array-cols()int i,j;short aMN;for(j=0;iN;j+)for(i=0;iM;i+)aij=0;三、实验报告:1. ( 1)给出源程序(文本文件)和执行结果。#include#include#include#define M 1000#define N 1000void rows()int i,j;short aMN;for(i=0;iM;i+)for(j=0;jN;j+) aij=0;void cols()int i,j;shor

3、t aMN;for(j=0;jM;j+)for(i=0;iN;i+)aij=0;/*void main()time_t start_rows,stop_rows,start_cols,stop_cols;start_rows=time(NULL); /time() 会保存之前的时间, time(NULL) 清空之前 的时间,并保存当前时间rows();stop_rows=time(NULL);printf( 程序段 A 的使用时间: %ld,(stop_rows-start_rows);start_cols=time(NULL);cols();stop_cols=time(NULL);prin

4、tf( 程序段 B 的使用时间: %ld,(stop_cols-start_cols);精度不够高,导致显示结果均为 0*/ void main()LARGE_INTEGER t1,t2,tc,t3,t4,tc2;获取计算机时钟频率QueryPerformanceFrequency(&tc);/QueryPerformanceCounter(&t1);/获取运行程序前高精度计时器的值rows();QueryPerformanceCounter(&t2);/获取运行程序后高精度计时器的值printf( 程序段 A Use Time:%fn,(t2.QuadPart -t1.QuadPart)*1

5、.0/tc.QuadPart);QueryPerformanceFrequency(&tc2);QueryPerformanceCounter(&t3);cols();QueryPerformanceCounter(&t4);printf( 程序段 B Use Time:%fn,(t4.QuadPart - t3.QuadPart)*1.0/tc2.QuadPart);可编辑M=10 , N=100000ODai memoers rnam1ST ”: DieBa杆i. exc*|程序用R U射门怔二11五加3牛1 程序ERe Use Tine = 0,012 783 Pt*ess any ke

6、y to contrnuieM=1000 , N=1000M=10000 , N=10M=10000 , N=10000(2)对实验结果进行分析,说明局部数据块大小、数组访问顺序等和执行时间之间的 关系。程序运行时间程序A(先行后列)程序B (先列后行)M=10 , N=100000.000618M=1000 , N=10000.0063440,012783M=10000 , N=100.0088130.007630局部数据块 主存块大可以充分利用程序访问的空间局部性特点,使得一个比较大的局部空间被一起调到 cache中,因而可以增加命中机会。但主存块不能太大,主 要原因有两个:a.块大使得缺

7、失损失更大,因而需花费更多的时间从主存块读一个较大的块; b. 块大则 cache 行数变小,因而替换的可能性增加,导致命中的可能性变 小。数组访问顺序:因为数组在存储器中是按行存储,所以数组的访问顺序对程序执行效率有影响,且总体上先行后列能提高程序运行效率,因为由程序的局部性原理能提高 cache 命中率,减少访存时间。( 3 )分析说明数组 a 分配在静态存储区、堆栈和栈区,对 for 循环段的执行效率有没 有影响。有影响。由上述分析可知,在先行后列访问情况下, M,N 三种取值中程序运行时间都是当在静态数据分配时运行时间小,执行效率高,而在先列后行访问情况下,行列的大小同样影响程序的运行。当 MN 时,在堆区分配空间效率更高。问题:为什么在上述程序中,在行数大于列数时,行优先的执行时间稍大于列优先的执行时间?

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1