局部性原理是一个持久的概念,对硬件和软件系统的设计和性能都有着极大的影响。局部性通常有两种不同的形式:时间局部性和空间局部性。程序员是否编写出高速缓存友好的代码,就取决于这两方面的问题。对于下面这个函数,说法正确的是( )。 int sumvec(i

admin2019-12-10  39

问题 局部性原理是一个持久的概念,对硬件和软件系统的设计和性能都有着极大的影响。局部性通常有两种不同的形式:时间局部性和空间局部性。程序员是否编写出高速缓存友好的代码,就取决于这两方面的问题。对于下面这个函数,说法正确的是(    )。
int sumvec(int  v[N])
{
    int i,sum=0;
    for(i=0;i<N;i++)
    sum+=v
    return sum;
}

选项 A、对于变量i和sum,循环体具有良好的空间局部性
B、对于变量i、sum和v[N],循环体具有良好的空间局部性
C、对于变量i和sum,循环体具有良好的时间局部性
D、对于变量i、sum和v[N],循环体具有良好的时间局部性

答案C

解析 对于局部变量i和sum,循环体有良好的时间局部性。实际上,因为它们都是局部变量,任何合理的优化编译器都会把它们缓存在寄存器文件中,也就是存储器层次的最高层,故A、B错。
    现在考虑对向量v的步长为l的应用。一般而言,如果一个高速缓存的块大小为B字节,那么一个步长为k的引用模式(这里k是以字为单位的)平均每次循环迭代会有min(1,(wordsizexk)/B)次缓存不命中。当k=1时,它取最小值,所以对v的步长为1的引用确实是高速缓存“友好”的,即拥有良好的空间局部性,故D错,只有C的说法是正确的。
转载请注明原文地址:https://jikaoti.com/ti/YbDjFFFM
0

相关试题推荐
最新回复(0)