以下是计算两个向量点积的程序段: float dotproduct(float x[8],float y[8]) { float sum=0.0; int i; for(i=0;i<8;i++) sum+=x[i]*y[i]

admin2017-11-20  23

问题 以下是计算两个向量点积的程序段:
float dotproduct(float x[8],float y[8])
{
    float sum=0.0;
    int i;
    for(i=0;i<8;i++)
    sum+=x*y
    return sum;
}
    试回答以下问题:
假定该段程序运行的计算机的数据Cache采用直接映射方式,其容量为32B,每个主存块大小为16B。假定编译程序将变量sum和i分配给寄存器,数组x存放在00000040H开始的32B的连续存储区中,数组y则紧跟在x后进行存放。试计算该程序数据访问的命中率,要求说明每次访问的Cache命中情况。

选项

答案Cache共有32B/16B=2行;4个数组元素占一个主存块(float占4个字节);数组x的8个元素(共32B)分别存放在主存40H开始的32个单元中,共占有两个主存块,其中x[0]~x[3]在主存第4块(块号从0开始),x[4]~x[7]在主存第5块中;数组y的8个元素分别在主存第6块和第7块中。所以,x[0]~x[3]和y[0]~y[3]都映射到Cache第0行;x[4]~x[7]和y[4]~y[7]都映射到Cache第1行;因为x[i]和y[i](0≤i≤7)总是映射到同一个Cache行,相互淘汰对方,所以每次都不命中,命中率为0。

解析
转载请注明原文地址:https://jikaoti.com/ti/NEfjFFFM
0

最新回复(0)