2013-01-24 26 views
5

Czy ktoś wie, co to jest ERG w procesorach A5, A5X, A6 i A6X firmy Apple?Ekskluzywne granulaty rezerwacji (ERG) na procesorach Apple

Natknęliśmy się na niejasny błąd z instrukcjami LDREX/STREX, a zachowanie różni się między A5 i A6. Jedyne wyjaśnienie, jakie mam, to to, że mają różne ERG, ale nie mogą znaleźć niczego na ten temat. Również nie mogłem znaleźć sposobu na odzyskanie tej wartości, instrukcja MRC wydaje się być zabroniona w trybie użytkownika na iOS.

Dziękujemy!

+0

Podczas gdy prawidłowe pytanie, jestem nieco zaintrygowany, dlaczego powinieneś wiedzieć w celu debugowania? Wielkość ERG powinna mieć wyłącznie wpływ na wyniki. Czy możesz wyjaśnić, czym jest obserwowane zachowanie i czego spodziewałeś się zobaczyć? – unixsmurf

+0

Napotkaliśmy błąd, gdy kompilator wygenerował kod, który uderzył w ERG podczas odczytu zmiennej, do której dostęp uzyskał dostęp - w ten sposób wprowadzając nieskończoną pętlę jako STREX zawsze zawodzi. To niepowodzenie zdarzyło się tylko na urządzeniach A6X. –

+0

Ok. Ale nie widząc kodu, którego dotyczy ten problem, nie jestem w stanie skomentować, czy masz prawdziwy błąd sprzętowy, czy też masz (subtelny) błąd oprogramowania, który możesz obejść, ostrożnie dopasowując zamki, ale może odskoczyć ponownie na innych procesorach. ERG _nie robi_nie_ wpływa na architekturalnie poprawne oprogramowanie na architekturalnie poprawnym sprzęcie w jakikolwiek inny sposób niż wydajność. – unixsmurf

Odpowiedz

2

Na OMAP 4460 (ARM Cortex-A9, taki sam jak Apple A5/A5X) ERG ma 32 bajty (co jest takie samo, jak rozmiar linii w pamięci podręcznej).

Nie wiem, że te wartości są na A6/A6X (i nie da się tego dowiedzieć bez załadowania własnego sterownika, którego nie można wykonać na urządzeniach Apple), ale moim gościem jest rozmiar linii pamięci podręcznej zwiększono do 64 bajtów, podobnie jak ERG.

Alternatywnie można zoptymalizować algorytm architektoniczny maksymalnie 512 słów (2 kilobajty).

+0

Nasze testy pokazują, że ma on również 64 bajty. Dziwne jest to, że dla A5 test zawsze działa tak, jakby działał bez ERG. –

-1

Wielkość ERG jest krytyczna pod względem krytycznej wartości przy użyciu ldrex/strex.

Po wydaniu ldrex, jeśli w ERG wystąpi dostęp do pamięci, w którym wystąpił odczyt ldrex, potok zakończy się niepowodzeniem.

Nie jest niczym niezwykłym posiadanie struktury, która zawiera cel docelowy ldrex/strex i dodatkowe dane, gdzie dostęp do dodatkowych danych uzyskuje się między parą ldrex/strex (na przykład, aby zachować wartość załadowaną przez ldex).

Jeżeli cel docelowy ldrex/strex ma niewystarczające wypełnienie w strukturze (tj. Wybrany rozmiar ERG jest zbyt mały), dostęp do innych elementów struktury spowoduje, że strumień ZAWSZE zawodzi.

Gra się kończy, gaśnie.

Jeśli chodzi o ldrex/strex, ARM wdraża "monitor lokalny" i "monitor globalny". W systemach z tylko monitorem lokalnym, jedynym sposobem, w jaki ldrex/strex może zawieść, jest to, że dwa ldrexy są wydawane na ten sam adres przed wydaniem strex - tylko systemy z monitorami globalnymi rzeczywiście zauważają ruch w magistrali pamięci w ramach ERG Cel ldrex/strex.

Systemy ARM różnią się znacznie i podejrzewam, że istnieją systemy, które mają tylko lokalne monitory, a więc w rzeczywistości nie obsługują ldrex/strex.

+1

To nie odpowiada na pytanie. –