问答题
某同构双核处理机结构如图9.7所示。处理机采用两级cache结构,每个核都有自己私有的L
1
cache,两个核共享L
2
cache。L
1
cache行大小为2KB,采用2两路组相联映射,访问延迟为30ns/字。L
2
共享cache行大小为4KB,采用直接映射方式,访问延迟为80ns/字。主存的访问延迟为200ns/字。处理机字长为32位。已知该处理机上运行的进程含两个线程,代码如下:
线程1:
int A[1024];
int sa=0;
for(i=0;i<1024;i++)
{
sa=sa+A[i];
}
线程2:
int B[1024];
int sb=0;
for(i=0;i<<1024;i++)
{
sb=sb+B[i];
}
已知int字长为32位,初始状态下数组A和数组B均存放在主存中,运算结果存放在处理机内的寄存器中。
(1)若主存中的数组A和数组B映射到L
2
cache中的不同行,且在L
2
cathe中从该行0地址开始存放数组元素。请计算在最坏的情况下,进程执行完毕所需要的时间。
(2)若主存中的数组A和数组B映射到L
2
cache中的同一行,且在L
2
cache中从该行0地址开始存放数组元素。请计算在最坏的情况下,进程执行完毕所需要的时间。
【正确答案】正确答案:初始状态下数组A和数组B均存放在主存中,故两个线程分别从A[0]和B[0]开始计算时,L
1
cache和L
2
cache均缺失。此时将访问主存取数,并分别将数组A和数组B所在的主存块调入L
2
cache的不同行缓存,同时将每个数组的前2K/4=512个字调入L
1
cache。 此后的511个字的计算均命中L
1
cache。 在两个线程分别计算A[512]和B[512]时,L
1
cache缺失。此时将每个数组的后2K/4=512个字从L
2
cache调入L
1
cache。 此后的511个字的计算均命中L
1
cache。 故对每个线程而言,其访问数组所需的时间为: 200+30×511+80+30×511=30940ns 在最坏的情况下,线程1和线程2将顺序执行。假设处理机运算足够快,则进程运行的时间取决于访问数组所需的时间,故进程执行完毕所需要的时间为: 2×30940=61880ns 初始状态下数组A和数组B均存放在主存中,故当线程A从A[0]开始计算时,L
1
cache和L
2
cache均缺失。此时将访问主存取数,并将数组A所在的主存块调入L
2
cache的某一行缓存,同时将该数组的前2K/4=512个字调入L
1
cache。 在最坏的情况下,线程1和线程2交替执行并交替访问数组A和数组B。线程1读取A[0]之后,线程2立即读取B[0],此时L
1
cache和L
2
cache均缺失。线程2将访问主存取数,并将数组B所在的主存块调入L
2
cache的同一行缓存,同时将该数组的前2K/4=512个字调入L
1
cache,而L
2
cache中缓存的数组A的数据将被换出L
2
cache。故线程1和线程2每次访问数组A或数组B均将访问主存,并将L
2
中的数据替换。 因此,在最坏的情况下,进程执行完毕所需要的时间为: 2×200×1024=409600ns
【答案解析】