问答题 某同构双核处理机结构如图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
【答案解析】