第 4 章 記憶體功率分析與評估
4.2 應用程式位址記錄蒐集與轉換
如上小節所說,利用 DRAMsim 對應用程式進行功率評測前,須先得到該應 用程式的記憶體存取位址記錄,這個位址記錄將代表應用程式對於記憶體系統使 用的行為,驅動 DRAMsim 進行模擬。如何得到應用程式的位址記錄成為接下來 討論的重點。先前提過 ARM SoC Designer Simulator 提供許多 software profiling tool,
包括 software profiling、core profiling、bus profiling、transaction profiling 等。我們 利用處理器與匯流排之間的 transaction profiler 來觀察處理器對匯流排產生的要求,
進一步擷取對記憶體系統的存取資訊,記錄下的資料內容格式如表格 4-1 所示。
表格 4-1 ARM SoC Designer 剖析記憶體存取資料之輸出 Cycle 代表處理器產生要求的時間點,Address 代表要存取的記憶體位址,
而 Operation Type 則是代表對匯流排所發出的要求型態,這裡有四種,write address 和 read address 將對 bus 的 address line 發出要求,告知 bus 即將要存取 該 address line 上的資料,write data 和 read data 則完成讀寫資料的動作,這裡 的每一個 operation 都代表著在該 Timestamp 發出讀或是寫某個記憶體位置資 料的要求。然而記錄下的是未經處理的資訊,包含許多因為尚未得到匯流排
Legend for Operation Type 0 Æ Write Address 1 Æ Write Data 2 Æ Read Address 3 Æ Read Data
Transaction 1 Transaction 1
Transaction 1 Transaction 2
Transaction 2
Transaction 2 Transaction 2
要求;從表格 4-1 的例子中可以得知,在 cycle 396093 時,即將對 address 3736 進行 read 的動作,隨後的 cycle 396094 即取得 bus 的准許並對該記憶體位址 進行資料讀取,直到 cycle 396095 才結束這一次的 transaction,我們稱為 transaction1。另外可以注意到,在 cycle 396094 時,另一個記憶體要求也同時 產生,我們稱為 transaction2,由於此時的 bus 被 transaction1 佔據著,所以一 直產生 read address 的要求直到 transaction1 結束於 cycle 396095,transaction2 才得以在 cycle 396096 進行 read data 的動作。所以擷取分析的過程,即為區 分每一次不同的 transaction ,並且擷取出每一次 transaction 的第一個記憶體 要求,得到每一個 transaction 要求的時間點並且記錄下來,我們稱這一動作為 位址紀錄簡化(Trace Simplify)。表格 4-2 即為簡化後的位址紀錄。
表格 4-2 ARM SoC Designer 記憶體存取之簡化輸出
然而,這樣的位址記錄並不是驅動 DRAMsim 的輸入格式,我們必須經過 一些轉換產生對應的格式。DRAMsim 的輸入格式範例如表格 4-3。
Cycle Address Operation Type
396093 3736 2
396094 3740 2
396096 4294966672 2
396102 3744 2
396103 3748 2
Transaction 1 Transaction 2
Address Operation Timestamp
0x00000E98 READ 396093
0x00000E9C READ 396094
0xFFFFFD90 READ 396096
0x00000EA0 READ 396102
0x00000EA4 READ 396103
0x00002AE6 READ 396105
表格 4-3 DRAMsim 輸入格式範例
經過簡化之後的位址紀錄利用 Parser 將簡化之位址記錄轉譯成符合驅動 DRAMsim 的輸入格式,包括位址十進制轉十六進制以及 Operation type 的對應轉 換,表格 4-2 所舉的例子經過簡化之後會成為表格 4-3 所示。如此一來,這份輸出 即可代表應用程式對記憶體系統的操作行為,也就是說記憶體系統將會收到的記 憶體存取指令,我們將利用它輸入 DRAMsim 進行功率評測,取得該應用程式對 記憶體系統所產生的功率消耗。下一小節會討論如何得到應用程式的功率資訊。