看板 C_and_CPP 關於我們 聯絡資訊
想請問一下版上各位 最近在Linux上開發一些測試程式的時候 因為想純粹測量Main memory到processor的local memory的latency 所以想關掉cache來測試整體平均的數值 比如: int mem[1024]; 想一直測試這個陣列在兩層memory間的搬運 但是又不想在下一個run的時候 讓某些值被cache住 請問有哪些directive或者關鍵字可以讓compiler去標記他 或者讓system不去cache住這整個array嗎? (在不動到system code(Linux)的方法?) 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 133.9.216.204
james732:volatile? 05/11 13:43
VictorTom:1F 正姐 >///< 05/11 13:48
loveme00835:好久不見的修飾字, 原來還真的會用到@@ 05/11 13:50
VictorTom:第一次看到時, 是面試的時候被問到, 當時當然是不會Orz 05/11 13:52
kkdlin:謝謝各位 突然忘記他的存在XD 明明下面幾行程式自己有寫XD 05/11 13:54
kkdlin:Victor是跑去山上面試嗎? 好像只有山上會問這題XD 05/11 13:54
VictorTom:偷偷問, 山上是哪一家呀?? 暱稱太多了老是不會認XD 05/11 14:08
VictorTom:不過有機會稍微接觸底層的還是都有機會用到volatile啦, 05/11 14:09
VictorTom:像我們家driver就有些人有機會下到:) 05/11 14:09
kkdlin:Andxx XD? 05/11 14:21
VictorTom:那看起來不是XD 05/11 16:29
littleshan:volatile不是答案啊,怎麼大家都誤解了 05/11 16:46
littleshan:volatile 是強迫 compiler 在取值時一定要讀記憶體 05/11 16:47
littleshan:而不能拿 register 現有的值去使用 05/11 16:47
littleshan:但讀取記憶體這個指令還是會先去 cache 裡面找 05/11 16:48
kkdlin:對齁..看到暫存器不讀就太高興了..@@ 05/11 16:53
kkdlin:那請問一下還有其他不改底層的方法嗎@@ 05/11 16:53
VictorTom:對喔~~還是l大說的對....Orz 完全忘了這件事....Orz 05/11 17:21
VictorTom:solution應該是透過OS提供的API, 去開一塊non-cachable 05/11 17:25
VictorTom:的memory, 然後搭配volatile access的樣子.... 05/11 17:25
VictorTom:不過我們同事說User Mode的東西always cachable, 05/11 17:26
VictorTom:所以得map一塊kernel的memory回來的樣子(Win)....@_@" 05/11 17:26
james732:我也忘了不讀暫存器跟不拿快取是兩回事 XDDDDD 05/11 18:03
tinlans:......你乾脆請 HW 做一個按鈕,按下去清空 cache 好了。 05/11 18:07
tinlans:不然你可以想辦法去洗 cache,像是用力把 mem 灌爆 N 次。 05/11 18:10
VictorTom:可是他是要測latency呀XD 這樣額外的effort反而提高了XD 05/11 18:16
tinlans:所以兩個 run 之間不能停下來手動洗 cache 嗎? 05/11 18:21
tinlans:其實我也看不太懂原 po 想做什麼。 05/11 18:24
VictorTom:小弟我忽然發現, 我不太懂processor的local memory是指 05/11 18:27
VictorTom:什麼口也....Orz 05/11 18:27
tinlans:可能是 scratchpad 之類的東西吧,通常只有幾 KB。 05/11 18:31
kkdlin:嗯 也是在processor chip裡面的一小塊儲存空間 05/12 12:25