[心得] 記憶體效能瓶頸

作者: erspicu (.)   2015-12-31 17:34:28
全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的...但效率來說有可能會更慢
作者: Litfal (Litfal)   2015-12-31 18:31:00
a. 有例外是你會一直掃rgb555那個TABLE,但那個TABLE太大所以不太可能全部在cache裡面,access到ram就是100ns左右的等級了這樣的狀況你就算在C裡面寫也一樣,除非是寫DSP ASSEMBLY

Links booklink

Contact Us: admin [ a t ] ucptt.com