# 2018q3 第 13 週測驗題
### 測驗 `1`
Consider the following C code:
```C
long array[1024 * 1024];
for (int x = 0; x < 10; ++x) {
for (int i = 0; i < 1024 * 1024; i += 1024) {
array[i] += 1;
}
}
```
Assume that all variables but array are placed into registers and that array is placed in memory such that the address of array[0] is a multiple of the cache block size (i.e. all of its block offset bits are 0). Also, assume that longs are 8 bytes and all caches are initially empty.
How many data cache misses will this C code experience on a 64KB (64 * 1024 byte) direct-mapped cache with 64B cache blocks?
==作答區==
* `(a)` 1024 + (1024 - 512) * 10
* `(b)` (1024 + (1024 - 512) * 9)
* `(c)` ((1024-64) * 10)
* `(d)` (1024 + (1024 - 64) * 9)
* `(e)` 1024
* `(f)` 10240
---
測驗 `2`
承測驗 `1`
How many data cache misses will this C code experience on a 1.5MB (1536 * 1024 byte) 3-way set associative cache with 64B cache blocks with an LRU replacement policy?
==作答區==
* `(a)` 1024 + (1024 - 512) * 10
* `(b)` (1024 + (1024 - 512) * 9)
* `(c)` ((1024-64) * 10)
* `(d)` (1024 + (1024 - 64) * 9)
* `(e)` 1024
* `(f)` 10240
---
測驗 `3`
Consider the following codes:
- [ ] Version 0
```C
for (int k = 0; k < N; ++k) {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
B[i*N+j] += A[i*N+k] * A[k*N+j];
}
}
}
```
- [ ] Version 1
```C
for (int kk = 0; kk < N; kk+=2) {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
for (int k = kk; k < kk + 2; ++k) {
B[i*N+j] += A[i*N+k] * A[k*N+j];
}
}
}
}
```
Assuming n is very large and the compiler does not reorder or omit memory accesses to the arrays, which of the following statements are true:
Select one statement that would apply
==作答區==
* `(a)` `A[k * N + j]` has better spatial locality in version 1
* `(b)` `A[i * N + k]` has better spatial locality in version 1
* `(c)` `B[i * N + j]` has better spatial locality in version 1
---