LinuxDev 板


LINE

不太一樣..volatile是說不要最佳化 例如對一些I/O mapping 的區段 你做最佳化就有可能有問題 ex. compiler 會reorder 今天有一個炸彈,要先設定時間,然後開始倒數 原本你的設計是 start_bomb(){ instruction 1: set the timer instruction 2: countdown! } 接著就快跑人啦XD.. compiler覺得reorder一下比較好..於是生出以下的code start_bomb(){ instruction 1: countdown! instruction 2: set the timer } 假使timer initial value是0 那會怎樣哩?xd http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.4 http://en.wikipedia.org/wiki/Memory_barrier#Out-of-order_execution_versus_compiler_reordering_optimizations 截一段 "In C and C++, the volatile keyword was intended to allow C and C++ programs to directly access memory-mapped I/O. Memory-mapped I/O generally requires that the reads and writes specified in source code happen in the exact order specified with no omissions" ※ 引述《RouterHsieh (醉臥美人膝,醒掌天下權)》之銘言: : 就小弟所知,用asmlinkage當修飾字的話, : 該函數的參數在傳遞時會從stack讀取而非從register。 : 一般而言,似乎只要是system call都會加上這個修飾字。 : 那我想問的是,之所以會有這樣的需求, : 其原因是否跟使用volatile是類似的呢? : 這問題想了一天了而且也有孤狗過,不過沒找到一個確切的理由或者說法就是了囧 : 還請板上的高手們多多指教(拜) --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.191.195 ※ 編輯: mayasky 來自: 114.43.191.195 (11/01 03:04) ※ 編輯: mayasky 來自: 114.43.191.195 (11/01 03:05)
1F:推 troylee:老實說我覺得這例子不好.. 11/01 20:41
2F:→ mayasky:我只是想給的通用有趣的概念罷了..不如樓上給個real case 11/02 01:56
3F:→ mayasky:記得考量讀者熟哪種arch,你所預計的issue與execute 方式囉 11/02 01:57
4F:→ mayasky:這樣應該你比說這句話有意義:) 11/02 01:58
5F:推 troylee:所以你考量了讀者熟悉的arch, 請問是哪一種arch呢? 11/02 23:45
6F:→ mayasky:因為不知讀者熟哪種,所以抽象化.不特定arch 11/04 01:05
7F:→ mayasky:給個pseudo code即可,相信您念書時很多書也如此:) 11/04 01:06
※ 編輯: mayasky 來自: 1.160.132.131 (11/04 01:26)
8F:推 troylee:一下說要 real case, 一下又要抽象化... 11/04 01:28
9F:→ troylee:一下要考量讀者的熟悉哪種arch, 最後又說不知道他熟哪種 11/04 01:31
10F:→ mayasky:REAL CASE和實作抽象化是兩回事.演算法都不是real case? 11/04 01:33
11F:→ mayasky:但很多演算法書只用pseudo code..這樣回答疑問了嗎? 11/04 01:34
12F:推 troylee:那請問您的real case中, 如何使用到volatile? 11/04 01:35
13F:→ mayasky:很多paper為了讓讀者不管慣用哪種language都可以理解 11/04 01:37
14F:推 troylee:我所謂的例子舉的不好是說前面說 Memory-mapped I/O 最佳 11/04 01:37
15F:→ troylee:化後可能會有問題, 但是後面給的例子卻是 reordering 的 11/04 01:38
16F:→ mayasky:以及考量簡化就會使用pseudo code..這就是考量讀者 11/04 01:38
17F:→ troylee:那如果您要避免這種reordering最佳化, 請問 volatile 是要 11/04 01:38
18F:→ troylee:如何在您的例子上避免呢? 11/04 01:39
19F:→ mayasky:reorder在非I/O應該不會有事...在I/O可能會有事 11/04 01:40
20F:推 troylee:你確定嗎? 11/04 01:41
21F:→ troylee:要避免compiler對這個例子作最佳化, 所以把volatile放在 11/04 01:42
22F:→ mayasky:幾乎確定~可以參考ARM的strongly ordered與device 之設計 11/04 01:42
23F:→ troylee:start_bomb() 前面摟? 11/04 01:42
24F:→ mayasky:基本上這關鍵字就是叫compiler不要幫你最佳化 11/04 01:44
25F:→ mayasky:所以理論上放這前面是ok的..只要他compiler有做 11/04 01:44
26F:→ mayasky:但或許不是每個compiler都有做..甚至有的compiler不接受 11/04 01:45
27F:→ mayasky:如果你想要個真的code..或許哪天我看到我貼一下 11/04 01:46
28F:→ mayasky:compiler啥時想reorder我不知道..一時生不出來 11/04 01:47
※ 編輯: mayasky 來自: 1.160.132.131 (11/04 01:50)
29F:→ mayasky:欲知更詳細..上面wiki似乎有帶到一些.請參閱 11/04 01:51
※ 編輯: mayasky 來自: 1.160.132.131 (11/04 01:55)
30F:推 troylee:謝謝 所以你的例子應該是把 volatile 放在 timer 的regist 11/04 01:57
31F:→ troylee:er 上, 而不是 function 上 11/04 01:57
32F:→ troylee:且應詳述 set timer 與 count down 這兩個的關係 11/04 01:58
33F:→ mayasky:NO~是function上 11/04 02:00
34F:→ mayasky:炸彈的定時和開始倒數.ㄜ.這需要說嗎?好吧.. 11/04 02:01
35F:→ mayasky:當我覺得大家都看過電視中的定時炸彈..我的錯 11/04 02:01
36F:→ mayasky:放在變數上基本上是叫compiler要把這值寫進對應address 11/04 02:02
37F:推 troylee:不過我還真的沒看過 volatile 放在 c 的 function 上 @@ 11/04 02:02
38F:→ mayasky:不然compiler有可能只放在register中.這樣對應的device是 11/04 02:03
39F:→ troylee:可能我真的看得不夠多 抱歉 11/04 02:03
40F:→ mayasky:不會收到你寫進去的訊號的..還是留在reg中 11/04 02:03
41F:→ mayasky:這種關鍵字本來就不常見..與硬體直接相關的code比較常見 11/04 02:05
42F:推 troylee:我只看過他用在 pointer 上. 11/04 02:07
43F:→ mayasky:asm volatile(..)應該常見點.這也是叫compiler不要最佳化 11/04 02:08
44F:→ mayasky:另外不是每個compiler都可以放在function前的樣子 11/04 02:12
45F:→ mayasky:似乎是gcc另外延伸的..發問者應該是用gcc 11/04 02:13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP