2013-01-24 16 views
5

有誰知道Apple的A5,A5X,A6和A6X處理器上的ERG是什麼?Apple的處理器上的獨家預訂顆粒(ERG)

我們遇到了LDREX/STREX指令中一個隱晦的錯誤,並且A5和A6的行爲不同。我唯一的解釋是他們有不同的ERG,但是找不到任何東西。我也找不到找回這個值的方法,MRC指令似乎在iOS的用戶模式下被禁止。

謝謝!

+0

雖然是一個正確的問題,但我對於爲什麼需要知道調試的目的有點感興趣? ERG的規模應該只有性能影響。 你能解釋一下你所看到的行爲是什麼,以及你期望看到的是什麼? – unixsmurf

+0

當編譯器生成的代碼在讀取獨佔訪問的變量時碰到ERG時,我們遇到了一個錯誤 - 因此,由於STREX總是失敗,因此進入無限循環。此故障僅在A6X設備上發生。 –

+0

好的。但是如果沒有看到受影響的代碼,我無法評論你是否可能是一個實際的硬件錯誤,或者你是否有一個(微妙的)軟件錯誤,你可以通過仔細對齊你的鎖解決,但可能會彈出再次在其他處理器上。 ERG _does_not_以任何其他方式而不是性能影響體系結構正確硬件的架構上正確的軟件。 – unixsmurf

回答

2

在OMAP 4460(ARM的Cortex-A9,相同蘋果A5/A5X)ERG是32個字節(這是因爲高速緩衝存儲器線的大小相同)。

我不知道這些值是在A6/A6X上(並且沒有辦法找到沒有加載自己的驅動程序,這是你不能在蘋果設備上做的),但我的猜測是緩存行大小增加到64字節,ERG也是如此。

或者,您可以優化最大512字結構(2K字節)的算法。使用LDREX/STREX當

+0

我們的測試顯示它也是64字節。奇怪的是,對A5來說,測試總是像沒有ERG一樣工作。 –

-1

ERG大小是臨界考慮。

當LDREX已經發出,如果在其中LDREX讀發生的ERG發生內存訪問時,STREX將失敗。

擁有一個包含ldrex/strex目標和一些附加數據的結構(其中在ldrex/strex對之間訪問附加數據(例如,用於存儲由ldex加載的值))並不少見。

如果ldrex/strex目標在結構中填充不足(即選擇的ERG大小太小),則訪問結構的其他成員將因此導致strex始終失敗。

遊戲結束,熄燈。

關於ldrex/strex,ARM實現了「本地監視器」和「全局監視器」。在只有本地監視器的系統上,ldrex/strex可能會失敗的唯一方法是如果在發出strex之前在同一地址上發出兩個ldrex - 只有具有全局監視器的系統實際上會注意到ERG中的內存總線通信ldrex/strex目標。

ARM系統也差異甚巨,我懷疑有對只有本地監控等實際上並不真正支持LDREX/STREX系統。

+1

這實際上並沒有回答這個問題。 –