2012-08-22 4 views
3

일부 아키텍처는 "prefetch write"명령을 사용하여 실제로 수행하기 전에 메모리 위치에 쓰려고한다는 것을 CPU에 알려줍니다. 멀티 코어 컴퓨터에서는 코어에서 나중에 주어진 캐시 라인의 소유권을 확보해야하므로 힌트로 사용할 수 있으므로 나중에 더 빨리 위치에 쓸 수 있다는 것을 알고 있습니다. 그러나 AFAICT는 잠재적으로 캐시 라인에 대해 경합하는 두 개의 코어가있는 상황에서만 중요합니다. 단일 코어에서만 읽고 쓰는 캐시 라인의 경우 프리 페치 쓰기가 사용됩니까?쓰기를 프리 페치하면 단일 코어 성능에 영향을 미칩니 까?

답변

1

다른 모든 것이 동일하면 Prefetch-Write는 단일 코어에 의해서만 액세스되는 라인에 대해 Prefetch-Read보다 이점이 없습니다. 어떤 종류의 프리 페치 후에도 코어는 Exclusive 상태의 라인을 소유하게됩니다. 후속 쓰기에서 라인은 Modified 상태로 바뀝니다. 정의에 의해 다른 코어에는이 라인이 없으므로 Exclusive-to-Modified 전환은 무료입니다. E → M 상태 변경은 스누핑없이 로컬에서 완료됩니다.

코어에는 자체 하드웨어 프리 페치 논리가 있습니다. 한 줄에 접근하면 코어가 인접한 줄을 자동으로 잡을 수 있습니다. 전역 변수 나 다른 데이터가 근처에 있으면 SMP 시스템에서 예기치 않은 크로스 스누핑이 많이 발생할 수 있습니다.

0

캐시 라인이 메모리에없고 쓰기 프리 페치 플래그가 필요할 때 도움이 될 것이라고 생각합니다. 쓰기를 위해 줄을 비우는 것과 같은 하우스 키핑 잡일은 더 이상 방해가 될 수 있습니다. 분명히 이것은 CPU가 쓰기 작업을 캐시의 무릎에 파란색의 쓰기를 언로드 한 것보다 빨리 완료해야합니다.

아니면 뭔가 근본적으로 빠졌습니까?

+0

그래서 쓰기 프리 페치가 일반 프리 페치와 같이 작동하기 때문에 도움이 될 것이라고 말하는 것입니까? 당신이 옳을 수도 있습니다. –

+0

CPU와 RAM 사이에있는 모든 것은 캐시 라인을 통해 이루어져야합니다. 해당 캐시 라인이로드되지 않은 경우 읽기 또는 쓰기는 캐시 라인이로드 될 때까지 기다려야합니다. –