__sync_sync_sync_sync는 어떤 역할을 합니까?
__sync_synchronize()를 사용한 타이밍에 대한 질문에 대한 답변을 보았습니다.
- 이 기능은 어떤 기능을 합니까?
- 그리고 언제 사용해야 합니까?
이것은 완전한 기억 장벽을 위해 내장된 원자입니다.
어떤 메모리 피연산자도 전진 또는 후진 작업을 통해 이동되지 않습니다.또한, 프로세서가 작업 전반에 걸쳐 부하를 추측하는 것을 방지하고 작업 후 저장소를 큐잉하는 것을 방지하기 위해 필요에 따라 명령이 발행될 것입니다.
자세한 사항은 위 링크에서 확인하세요.
기억의 울타리를 강제하는 것 같아요.
이 내장형은 전체 메모리 장벽을 발행합니다.
메모리 장벽의 경우 cpu는 명령어를 정렬하여 일반적으로 효율성을 향상시키지만 예상치 못한 결과를 초래할 수 있습니다.예를 들어, 하드웨어에 4개의 레지스터가 있을 수 있습니다. 작업 명령을 내릴 때 레지스터 1개는 작업 명령을 저장하고(읽기 등), 레지스터 2개는 파라미터를 저장하고(주소, 크기 등), 마지막 레지스터는 제어 레지스터입니다.모든 매개변수가 준비되면 하드웨어는 매개변수를 읽고 프로그램을 실행합니다. 이는 다음과 같습니다.
writereg (dev.register_size,size);
writereg (dev.register_addr,addr);
writereg (dev.register_cmd,READ);
writereg (dev.register_control,GO);
마지막 동작 코드가 다른 코드보다 먼저 배치되면 이는 우리가 예상했던 것과 다릅니다. 따라서 처음 세 코드와 마지막 코드 사이에 메모리 장벽을 설치하여 CPU가 처음 세 코드 다음에 마지막 코드를 작동하도록 할 수 있습니다.
writereg (dev.register_size,size);
writereg (dev.register_addr,addr);
writereg (dev.register_cmd,READ);
__sync_synchronize();
writereg (dev.register_control,GO);
쓰기 대기열과 읽기 캐싱을 중지합니다.
"volatile"은 코드를 사용하여 값을 즉시 가져오거나 저장하는 컴파일러 옵션이지만, 오늘날의 CPU는 메모리 캐시와 외부 메모리에 대한 지연된 쓰기를 가진 여러 개의 코어를 가지고 있습니다.__sync_synchron화 ()은 모든 코어가 동일한 값을 동시에 볼 수 있도록 합니다.
...
X = new_value; // compiler and/or CPU could update X later when convienent
...
if ( X ) ... // compiler and/or CPU could use previous cached value of X
...
언급URL : https://stackoverflow.com/questions/982129/what-does-sync-synchronize-do
'programing' 카테고리의 다른 글
선언은 Swift 1.2의 '최종' 오류와 '동적' 오류 모두일 수 없습니다. (0) | 2023.11.02 |
---|---|
linux/list.h의 macro의 container_뒤에 있는 이론적 근거 (0) | 2023.11.02 |
XML 구문 분석 - 요소트리 대 SAX 및 DOM (0) | 2023.11.02 |
Spring Security로 사용자 업데이트 시 권한을 다시 로드하는 방법 (0) | 2023.11.02 |
자바스크립트에서 Pass by Value and Pass by Reference (0) | 2023.11.02 |