2012-03-15 2 views
0

하이퍼 스레딩은 경계가 정렬 된 경우에도 32 비트 int (32 비트 프로세서에서)가 아닌 원자를 읽고 쓸 수 있다고 읽었습니다. 하이퍼 쓰레딩이 어떻게 영향을 미치는지 설명 할 수 있습니까?하이퍼 스레딩은 32 비트 프로세서에서 32 비트 int 읽기/쓰기의 원 자성에 영향을 줍니까?

+0

정확하게 이해하고 있는지 잘 모르겠습니다. 나는 읽기가 원자 적이라고 믿는다. (단어 단위로 정렬 된 4 바이트는 한 번에 읽는다.) 그러나 실제로 읽혀지는 것에 대해 메모리 모델은 놀라움을 줄 수있다. –

+6

링크 또는 그렇지 않습니다. 우리는 "어딘가에서 읽은"모든 미친 소문에 대해 논박 할 수 없습니다. (아마도 잘못 읽었을 것입니다.) – cHao

+2

단순한 산술 연산이 한마디로 원자 단위로 수행 될 수 없다면, 나는 다소 흥미로운 영향을 미칠 것입니다. – Corbin

답변

5

사실이라면 특정 모델이나 스테핑에만 해당되는 끔찍한 CPU 버그 일 것입니다. 32 비트 읽기 및 쓰기는 원자 적이며 x86 플랫폼의 속성에 기본적이며 Windows, Linux 및 많은 응용 프로그램 소프트웨어에 의존합니다.

하이퍼 스레딩이없는 단일 코어 CPU에서 하이퍼 스레딩이있는 단일 물리적 코어 CPU로 전환하는 경우를 생각해 볼 수 있습니다. 하이퍼 스레딩 기능이없는 단일 코어 x86 CPU에서 정렬 된 32 비트 변수에 대한 읽기 - 수정 - 쓰기 작업을 수행하는 단일 명령 (예 : 증분)은 잠금 접두사가 없어도 원자 적입니다. 하이퍼 스레딩을 사용하는 CPU는 두 개의 물리적 코어가있는 CPU와 비슷하게 작동하므로 읽기 - 수정 - 쓰기 작업 (그 외 교환은 제외)이 잠금 접두사.

소프트웨어의 대다수의 CPU에서 발생할 수있는 핵심 사항은 여러 가지 핵심이 있으므로 관련성이 없습니다. 따라서 정렬 된 32 비트 값에 대한 단일 명령어 읽기 - 수정 - 쓰기 연산조차도 고정되어 있지 않으면 원자 적이되지 않습니다. (접두사 없이도 잠겨 있기 때문에 Exchange가 예외입니다.)

2

멀티 CPU 시스템에서도 정렬 된 읽기 또는 쓰기는 항상 원자 적입니다. 원자가 아닌 것은 (아마도 이것은 들었을 것입니다 - 또는 적어도 들었어야만합니다) 증가와 같은 읽기 - 수정 - 쓰기 명령어 또는 메모리 타겟을 추가합니다. 그것들은 심지어 HT 시스템에서도 원 자성이 아니지만 잠긴 상태가 아닐지라도 단일 논리 CPU가있는 시스템에서는 원자 적입니다 (우연히 보장되는 것이 아니라 우연히).

+0

더 자세히 설명하는 참고 자료가 있으십니까? – DuckMaestro

관련 문제