高考申論題
114年
[統計] 資料處理
第 一 題
📖 題組:
編譯器(compiler)將二維陣列資料映射到線性記憶體空間,一般採 Row-major 或 Column-major 兩種不同儲存順序。 (一)何謂 Row-major 儲存順序與 Column-major 儲存順序?(8 分) (二)試問程式碼應如何撰寫,對整個巨大型二維陣列之資料讀取,才能獲得較高的讀取時間效率?(6 分)並請給予一程式片段範例做說明。(6 分)
編譯器(compiler)將二維陣列資料映射到線性記憶體空間,一般採 Row-major 或 Column-major 兩種不同儲存順序。 (一)何謂 Row-major 儲存順序與 Column-major 儲存順序?(8 分) (二)試問程式碼應如何撰寫,對整個巨大型二維陣列之資料讀取,才能獲得較高的讀取時間效率?(6 分)並請給予一程式片段範例做說明。(6 分)
📝 此題為申論題,共 2 小題
小題 (一)
何謂 Row-major 儲存順序與 Column-major 儲存順序?(8 分)
思路引導 VIP
作答時先點出記憶體為單維線性空間的本質,說明為何需要映射規則。接著分別給出 Row-major 與 Column-major 的定義與特徵。為求高分,建議加入簡例(如2x2矩陣)具體呈現資料在記憶體中的排列順序,並舉出代表性的程式語言。
小題 (二)
試問程式碼應如何撰寫,對整個巨大型二維陣列之資料讀取,才能獲得較高的讀取時間效率?(6 分)並請給予一程式片段範例做說明。(6 分)
思路引導 VIP
本題測驗考生對「記憶體階層架構」與「空間區域性(Spatial Locality)」的理解。作答時應先點出 CPU 快取(Cache)的運作機制,再說明程式巢狀迴圈的存取順序必須與編譯器的記憶體映射方式(Row-major 或 Column-major)一致,方能大幅減少快取失誤(Cache Miss),提升效能。
陣列儲存順序與效能
💡 記憶體排列方式決定資料存取局部性,進而影響快取效能。
| 比較維度 | Row-major (以列為主) | VS | Column-major (以行為主) |
|---|---|---|---|
| 儲存邏輯 | 先存第一列,再存第二列 | — | 先存第一行,再存第二行 |
| 代表語言 | C, C++, Java, Python | — | Fortran, MATLAB, R |
| 映射公式 | Base + (i * 總行數 + j) | — | Base + (j * 總列數 + i) |
| 高效讀取順序 | 內層迴圈變動行索引 (j) | — | 內層迴圈變動列索引 (i) |
💬程式撰寫時應讓內層迴圈變動最頻繁的索引與記憶體連續存放方向一致。