programing

__sync_sync_sync_sync는 어떤 역할을 합니까?

muds 2023. 11. 2. 22:09
반응형

__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

반응형