手機內存帶寬和分辨率

糾結這個問題比較久,目前這個結果還有待確定,先記錄下自己的目前的記錄,如果有問題,歡迎跟我反饋。

由於手機soc上分佈着幾個關鍵元件,CPU,GPU等,CPU和GPU共享內存帶寬,而屏幕顯示分辨率和內存帶寬又有一定的關係,

內存帶寬:頻率 * 位寬 / 8 * 通道數 * 倍增係數 ,如小米6的LPDDR4X,如下圖

1866 * 2 * 64 / 8 * 2 = 60 GB/S

分辨率,一定分辨率下至少需要多少內存帶寬呢?以1920*1080爲例子

1920 * 1080 (兩百萬像素)* 4(字節,R8G8B8A8) * 2(framebuffer) * 60(幀)  = 0.99 GB/S,這裏有很大疑惑,網傳100萬像素需要4GB/S的內存帶寬,但是我這裏算的並不是,如果*8,那就有可能了,難道是單位不統一?

小米6的內存是LPDDR4X 1866MHZ,32bit 雙通道

所以內存帶寬是,1866 * 32 / 8 * 2 * 2 = 29.8 GB/s 

https://www.nxp.com/docs/en/application-note/AN3606.pdf

這裏也有參考文檔

今天看到另外一個計算overdraw和內存帶寬分辨率的文章感覺很好,轉一下

https://zhuanlan.zhihu.com/p/31146776

以手機遊戲的最低分辨率1280x720計算,一個屏幕緩衝區加上深度緩衝檢測(爲了遮擋不能關),每個像素需要6byte,然後以60幀/s的幀率要求,乘起來的結果是:

繪製一屏幕數據(1 overdraw),需要的帶寬至少是331776000bytes,也就是0.316Gbytes。

不過,由於透明物體需要和原屏幕像素進行混合,所以還需要回讀一次屏幕緩衝區的數據,會增加接近一倍,0.527Gbytes。

如果我們遊戲的特效峯值overdraw達到了10(測一下的話,會發現全屏特效特別容易到達高值,亂做單特效都能直接到5),也就是10個屏幕的話,那就是5.27Gbytes。

而在一些老機器上,諸如三星S3,總內存帶寬其實也就8G而已……

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章