[心得] 記憶體效能瓶頸

看板C_Sharp (C#)作者 (.)時間9年前 (2015/12/31 17:34), 9年前編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/2 (看更多)
全code.... http://paste.ofcode.org/3bw8ufpUwuPqT4xNfwUScZH 你覺得在你預設的猜測中 a. color = (uint)((0xff << 24) | ((rgb555 & 0x1f) << 19) | ((rgb555 & 0x3e0) << 6) | ((rgb555 & 0x7c00) >> 7)); b. color = rgb555_Table[rgb555 ]; 你會覺得哪個速度比較快???? 一個是好幾次的bitwise計算算出結果.. 一個是用index撈取array一個步驟 答案是 a 比較快... 不管是debug模式下或是一般模式 (現在一般電腦的情況...cpu效能超高,一般記憶體沒追上cpu速度) 只是一般模式a快得更多 而pointer的寫法 debug模式下,快一般array的操作方式一點,一般模式, 用指標跟ARRAY速度差不多(應該是一樣).... pointer在c#好像不只一種方式操作 參考 http://nbsoftsolutions.com/blog/high-performance-unsafe-c-code-is-a-lie 真的JIT下去優化後,很多概念似乎都不太準... 不過可以確定的是記憶體ARRAY的東西真的慢..... 有看過有一種處理技巧是用把array cop 到local變數去(array量少時), 進行後面的計算... 當然也看過一些project求好心切,都會把一些運算直接算出table.... 如果用code好維護乾淨為由是ok的...但效率來說有可能會更慢 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.121.19.98 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1451554473.A.0D0.html

12/31 18:31, , 1F
a. 有例外是你會一直掃rgb555那個TABLE,但那個TABLE太大
12/31 18:31, 1F

12/31 18:55, , 2F
所以不太可能全部在cache裡面,access到ram就是100ns左右
12/31 18:55, 2F

12/31 18:55, , 3F
的等級了
12/31 18:55, 3F

12/31 18:59, , 4F
這樣的狀況你就算在C裡面寫也一樣,除非是寫DSP ASSEMBLY
12/31 18:59, 4F
※ 編輯: erspicu (61.70.74.143), 12/31/2015 19:54:17
文章代碼(AID): #1MXFQf3G (C_Sharp)
文章代碼(AID): #1MXFQf3G (C_Sharp)