2013-01-24 4 views
5

Apple의 A5, A5X, A6 및 A6X 프로세서에서 ERG가 무엇인지 압니까? Apple 프로세서의 Exclusives Reservation Granule (ERG)

우리는 LDREX/STREX 지침에 무명의 버그로 달려 동작은 A5의와 A6의 사이에 다릅니다. 내가 가진 유일한 설명은 그들이 다른 ERG를 가지고 있지만 그걸 발견 할 수 없다는 것입니다. 이 값을 검색 할 수있는 방법을 찾을 수 없기 때문에 MRC 명령은 iOS의 사용자 모드에서 금지 된 것으로 보입니다.

감사합니다. OMAP 4460에서

+0

올바른 질문을하는 동안 왜 디버깅의 목적을 알아야하는지에 대해 다소 흥미가 있습니까? ERG의 크기는 성능에 영향을주지 않습니다. 당신이보고있는 행동이 무엇이며, 대신 당신이보고 싶어하는 것을 설명해 주시겠습니까? – unixsmurf

+0

컴파일러가 독점적으로 액세스 한 변수를 읽을 때 ERG를 치는 코드를 생성 할 때 버그가 발생하여 STREX가 항상 실패 할 때 끝없는 루프가 시작됩니다. 이 오류는 A6X 장치에서만 발생했습니다. –

+0

확인. 그러나 영향을받는 코드를 보지 않고도 실제 하드웨어 버그가 있는지 또는 잠금 장치를 조심스럽게 정렬하여 해결할 수있는 (미묘한) 소프트웨어 버그인지에 대해서는 언급 할 수 없지만 다른 프로세서에서 다시 작동합니다. ERG _does_not_는 성능 이외의 다른 방법으로 구조적으로 올바른 하드웨어의 구조적으로 올바른 소프트웨어에 영향을줍니다. – unixsmurf

답변

2

ERG는 (애플 A5/A5X와 같은 ARM 코어 텍스 A9은(), 캐시 라인의 크기와 동일) 32 바이트이다.

그 값이 A6/A6X에 있다는 것을 알지 못합니다. (Apple 장치에서는 할 수없는 자신의 드라이버를로드하지 않고도 알아낼 방법이 없습니다.)하지만 내 guestimate는 캐시 라인 크기입니다 64 바이트로 증가했으며 ERG도 증가했습니다.

또는 최대 512 워드 (2K 바이트)의 아키텍처 최대 알고리즘으로 알고리즘을 최적화 할 수 있습니다. LDREX/STREX 사용시

+0

우리의 테스트 결과 64 바이트이기도합니다. 이상한 것은 A5의 경우 ERG없이 작동하는 것처럼 테스트가 항상 작동한다는 것입니다. –

-1

ERG 크기는 중요한 고려 사항이다. LDREX가 발행되었을 때 메모리 액세스는 LDREX가 발생하는 읽기 내의 ERG 발생하면

는 상기 STREX는 실패 할 것이다.

ldrex/strex 대상과 추가 데이터가 ldrex/strex 쌍 (예 : ldex에 의해로드 된 값 저장) 사이에서 액세스되는 추가 데이터가 포함 된 구조는 드문 일이 아닙니다.

구조에 패딩이 부족한 경우 (즉, 선택한 ERG 크기가 너무 작 으면) 구조의 다른 멤버에 액세스하면 스트리트가 항상 실패하게됩니다.

게임이 꺼지고 꺼집니다.

는 LDREX/STREX 대해서는 ARM은 "로컬 모니터"및 "글로벌 모니터"를 실행한다. 로컬 모니터 만있는 시스템의 경우 ldrex/strex가 실패 할 수있는 유일한 방법은 strex가 발행되기 전에 동일한 주소에서 두 개의 ldrex가 실행되는 경우입니다. 글로벌 모니터가있는 시스템에서만 실제로 ERG 내의 메모리 버스 트래픽을 감지합니다. ldrex/strex 대상.

ARM 시스템은 상당히 차이가 나는 로컬 모니터를 가지고 있고 그래서 실제로 LDREX/STREX를 지원 사실하지 않는 시스템이있다 생각한다.

+1

이것은 실제로 질문에 대답하지 않습니다. –