2012-12-07 3 views
1

다른 프로세서에서 단일 스레드를 예약 할 때마다 캐시를 ​​지워야합니까? 캐시가 지워지지 않으면 다음과 같이 처리 할 수 ​​없습니다.다른 프로세서에서 단일 스레드 예약 - 캐시를 지울 필요가 있습니까?

두 개의 프로세서 P1 및 P2에서 다음과 같은 (의사) 코드를 실행한다고 가정합니다.

 1. foo() { 
    2. int x=5; 
    3. x=10; 
    4. print x; 
    5. } 

초기 스레드는 (스택) (X)의 메모리 위치가 캐시 라인에 1, 2, 5 및 저장을 실행 P1에 예정되어있다.

그러면 스레드는 3 행을 실행하는 P2에서 예약되고 에 0을 저장하여 x의 메모리 위치에 대해 캐시에 저장합니다.

마지막으로 스레드는 P1에서 다시 예약되고 4 행을 실행하면 5가 인쇄됩니다 (P1의 캐시에서 x의 값).

아직 10 점이 인쇄 될 것으로 예상됩니다.

답변

1

예, 프로세서 캐시/레지스터를 업데이트하거나 적어도 메인 메모리로 플러시해야하므로 스레드가 다른 코어/프로세서로 마이그레이션 된 경우 스레드가 최신 메모리를 차지할 수 있습니다.

다행히 공통 서버/데스크톱 플랫폼은 우리가 일반적으로 cache coherent 있습니다에 대한 코드를 작성하기 때문에 하드웨어는이 작품의 권리를 만들기 위해 모든 마법을 담당하고, 운영 체제 어쨌든 적절한 메모리가 부여되도록해야합니다 스레드/프로세스는 운영 체제가 해당 스레드를 실행하기로 결정할 때마다 사용할 수 있습니다. 이것은 응용 프로그램 코드가 걱정해야 할 작업이 아닙니다.

캐시 일관성이없는 플랫폼을 사용하는 경우 OS를 결정하면 캐시가 올바르게 업데이트되는지 확인하는 것이 가장 가능성이 높습니다. 스레드를 다른 프로세서로 마이그레이션하십시오.