2012-03-08 2 views
0

나는 메모리 장벽이 필요한 이유를 이해하지만, 유니 프로세서의 경우에는 이해하지 못한다.메모리 장벽은 SMP에서만 의미가 있습니까?

내가 UP을 사용할 때도 장벽을 해결해야합니까? 모든 문서는 SMP로 설명하지만 UP는 아닙니다.

다음 코드에서 r2 == 0은?

// the location 0xdeadbeef has a zero initial value 
ldr r0, =0xdeadbeef 
ldr r1, =0xdeadbeef 
ldr r2, =1 
str r2, [r0] 
ldr r2, [r1] 
// point a 
+0

슈퍼 스칼라 순서가 잘못된 단일 프로세서와 관련이 있습니다. 프로세서의 메모리 모델과 명령어 세트에 의해 실제로 지정되어야합니다. (악은 세부 사항에있다). –

+0

@Basile : 나는 그렇게 생각하지 않습니다. 철칙은 단일 프로세서에서 단일 스레드를 실행하면 항상 다음 원인을 초래합니다. –

답변

2

메모리 장벽과 컴파일러 장벽이 있습니다 다루는 가정보다 낫다.

하나의 프로세서에는 메모리 장벽이 필요하지 않지만 하이퍼 스레딩이 다중 프로세서로 간주되는지는 잘 모르겠지만 컴파일러 장벽은 컴파일러가 실패 할 수있는 다른 스레드의 코드를 다시 정렬 할 수 있습니다.

0

메모리 장벽은 "전역 변수"에만 사용해야합니다. 로컬 (스택에 있음) 및 레지스터는 스레드가 전환되는 동안 자동으로 저장되기 때문입니다.

수 있음 보편성은 당신이 항상 UP

관련 문제