[問題] 讓system不cache某個特定變數

看板C_and_CPP (C/C++)作者 (kkdlin)時間16年前 (2010/05/11 13:37), 編輯推噓7(7025)
留言32則, 6人參與, 最新討論串1/2 (看更多)
想請問一下版上各位 最近在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

05/11 13:43, , 1F
volatile?
05/11 13:43, 1F

05/11 13:48, , 2F
1F 正姐 >///<
05/11 13:48, 2F

05/11 13:50, , 3F
好久不見的修飾字, 原來還真的會用到@@
05/11 13:50, 3F

05/11 13:52, , 4F
第一次看到時, 是面試的時候被問到, 當時當然是不會Orz
05/11 13:52, 4F

05/11 13:54, , 5F
謝謝各位 突然忘記他的存在XD 明明下面幾行程式自己有寫XD
05/11 13:54, 5F

05/11 13:54, , 6F
Victor是跑去山上面試嗎? 好像只有山上會問這題XD
05/11 13:54, 6F

05/11 14:08, , 7F
偷偷問, 山上是哪一家呀?? 暱稱太多了老是不會認XD
05/11 14:08, 7F

05/11 14:09, , 8F
不過有機會稍微接觸底層的還是都有機會用到volatile啦,
05/11 14:09, 8F

05/11 14:09, , 9F
像我們家driver就有些人有機會下到:)
05/11 14:09, 9F

05/11 14:21, , 10F
Andxx XD?
05/11 14:21, 10F

05/11 16:29, , 11F
那看起來不是XD
05/11 16:29, 11F

05/11 16:46, , 12F
volatile不是答案啊,怎麼大家都誤解了
05/11 16:46, 12F

05/11 16:47, , 13F
volatile 是強迫 compiler 在取值時一定要讀記憶體
05/11 16:47, 13F

05/11 16:47, , 14F
而不能拿 register 現有的值去使用
05/11 16:47, 14F

05/11 16:48, , 15F
但讀取記憶體這個指令還是會先去 cache 裡面找
05/11 16:48, 15F

05/11 16:53, , 16F
對齁..看到暫存器不讀就太高興了..@@
05/11 16:53, 16F

05/11 16:53, , 17F
那請問一下還有其他不改底層的方法嗎@@
05/11 16:53, 17F

05/11 17:21, , 18F
對喔~~還是l大說的對....Orz 完全忘了這件事....Orz
05/11 17:21, 18F

05/11 17:25, , 19F
solution應該是透過OS提供的API, 去開一塊non-cachable
05/11 17:25, 19F

05/11 17:25, , 20F
的memory, 然後搭配volatile access的樣子....
05/11 17:25, 20F

05/11 17:26, , 21F
不過我們同事說User Mode的東西always cachable,
05/11 17:26, 21F

05/11 17:26, , 22F
所以得map一塊kernel的memory回來的樣子(Win)....@_@"
05/11 17:26, 22F

05/11 18:03, , 23F
我也忘了不讀暫存器跟不拿快取是兩回事 XDDDDD
05/11 18:03, 23F

05/11 18:07, , 24F
......你乾脆請 HW 做一個按鈕,按下去清空 cache 好了。
05/11 18:07, 24F

05/11 18:10, , 25F
不然你可以想辦法去洗 cache,像是用力把 mem 灌爆 N 次。
05/11 18:10, 25F

05/11 18:16, , 26F
可是他是要測latency呀XD 這樣額外的effort反而提高了XD
05/11 18:16, 26F

05/11 18:21, , 27F
所以兩個 run 之間不能停下來手動洗 cache 嗎?
05/11 18:21, 27F

05/11 18:24, , 28F
其實我也看不太懂原 po 想做什麼。
05/11 18:24, 28F

05/11 18:27, , 29F
小弟我忽然發現, 我不太懂processor的local memory是指
05/11 18:27, 29F

05/11 18:27, , 30F
什麼口也....Orz
05/11 18:27, 30F

05/11 18:31, , 31F
可能是 scratchpad 之類的東西吧,通常只有幾 KB。
05/11 18:31, 31F

05/12 12:25, , 32F
嗯 也是在processor chip裡面的一小塊儲存空間
05/12 12:25, 32F
文章代碼(AID): #1BwEqKo7 (C_and_CPP)
文章代碼(AID): #1BwEqKo7 (C_and_CPP)