2010-11-26 214 views
4

我試圖改進我的圖像處理項目在ARM cortex-a8處理器上運行。ARM Cortex-A8:在一次內存讀取中讀取了多少個字節?

我正在從內存訪問8位灰度圖像數據。在我的函數中,現在我正在逐字節地訪問單個像素值。

我認爲通過使用NEON,我可以通過從內存中訪問128/8 = 16個字節來改善這一點,然後在我的函數中使用它們。但是在運行更改後的版本時,我發現實際上這比實現逐字節訪問的時間更短。我認爲使用NEON進行提取會變成一個瓶頸,比我的計算時間花費更多的時間。

ARM Cortex-A8的數據總線大小是多少?在一次內存提取中從內存訪問多少個字節?

+0

緩存通常會將其抽象出來。從SDRAM開始,它將進行突發讀寫。如果您使用的是直接屏幕內存,那麼緩存可能*通過*寫入。答案取決於你使用的是什麼內存。你應該總是基準*內存性能*,然後比較你的代碼。參見:[Cortex-A8內存拷貝](http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka13544.html)。 – 2014-05-22 22:00:27

回答

3

從Cortex A8的TRM:

「您可以配置所述處理器連接到任何一個64位或128位AXI互連提供靈活性的系統設計」

是必要NEON,也許你在比較蘋果和橘子?您可以使用ldrd/strd或ldm/stm來獲得64位傳輸,而不是ldrb/strb。 ARM/AXI可以非常聰明地展望未來,並將較小的傳輸分組爲較大的傳輸,例如將兩個32位傳輸組合成一個64位。但我不會依賴這一點。我只提到它,以防萬一您通過更改爲ldr/str或ldrd/strd您不會提高性能。

你是否隔離(無數據處理)讀或寫循環,並嘗試字節vs字vs雙字?可能是從單詞中提取字節的代碼壓倒了總線上的節省。

這是什麼類型的內存?這是芯片還是芯片外,相對於AXI(ARM)時鐘速度,這種內存的速度是多少?

您是否爲該區域啓用了數據緩存?如果是這樣,它可能是一個靜音點,第一個字節的讀取將使用最佳數據總線大小進行高速緩存行填充,該高速緩存行內的後續讀取將不會達到AXI總線,遠不及目標內存。同樣,寫入操作應該儘可能地緩存,然後在更寬的總線優化大小​​的情況下出去到目標。取決於如何配置緩存/寫入緩衝區。

+0

您需要從供應商處瞭解它是否是64位或128位寬的axi總線。 – 2011-11-02 00:44:13

0

這可能是你經歷了管道失速。如果你想通讀Neon,那麼你可以在CPU內核中使用這些數據之前有一些延遲。