以下兩種不同版本的 C 程式,所有的變數皆為整數。
版本一:
for (j=0; j<20; j++) /* Version 1 */
for (i=0; i<10000; i++) x[i][j] = x[i][j]+1;
版本二:
for (i=0; i<10000; i++) /* Version 2 */
for (j=0; j<20; j++) x[i][j] = x[i][j]+1;
2 個程式先後在同一台電腦上面執行,該電腦的處理器中有 1 個直接對應的(direct-mapped)資料快取記憶體(data cache),其容量為 8KB,區塊長度(block size)為 16 位元組,假設軟體環境維持不變,也未受到其他程式的干擾,且程式執行時未發生任何錯誤(error),請問下列敘述何者正確?
(A)版本一比版本二快,因為版本一的資料快取記憶體的失誤率(cache miss rate)比較低
(B)版本一比版本二慢,因為版本一的資料快取記憶體的失誤率(cache miss rate)比較高
(C)兩種版本速度相同,因為兩版本的資料快取記憶體的失誤率(cache miss rate)相同
(D)兩種版本的程式結果不同,不能比較
答案:登入後查看
統計: A(36), B(108), C(50), D(25), E(0) #456042
統計: A(36), B(108), C(50), D(25), E(0) #456042
詳解 (共 3 筆)
#1303725
版本二再進行陣列的加減時,只需要執行迴圈20次,外圈雖要執行10000次,但沒有實際要操作的敘述
版本一,要進行陣列的加減10000次,次數越高,失誤率就越高,因此速度也會較慢。
版本一,要進行陣列的加減10000次,次數越高,失誤率就越高,因此速度也會較慢。
2
1
#732466
怎樣分辨?
0
0