2013-06-14 2 views
0

특정 계산을 수행하는 데 필요한 메모리 범위를 터치하기 위해 asm dcbt 명령을 사용하고 있습니다. 내 프로파일 러는이 범위 내의 요소에 대한 산발적 액세스 (4 회 터치, 5 회 건너 뛰기 등 - 5 회 작업마다 캐시 미스 생성)로 인해 캐시 누락 패턴을 보여줍니다.캐시 프리 패치 시나리오 - 전원 아키텍처

정확한 범위와 크기에 대한 액세스 권한이있는 A() 함수가 있습니다. 이 A() 함수는 다른 섹션보다 먼저 호출되어 A() 범위의 데이터를 사용하고 사용합니다. 난 그냥 A() 내부 dcbt을 사용하고 B(), 또는의 개선을 기대할 수 있습니까 데이터의 수집을 활용하여 동일한 기능의 범위에 dcbt를 사용해야합니까?

+0

저는 PowerPC 아키텍처에 익숙하지 않지만, 캐시의 내용이 함수를 호출/리턴함으로써 영향을받지 않는다고 생각합니다. –

+0

아마 프로세서가 자체 "손"에서 물건을 가져 와서 다음에 만날 것이라고 생각하는 것을 가져올 수 있기 때문에 함수가 수행하는 작업에 따라 다릅니다. – teodron

+0

물론 함수가 중요한 메모리 액세스를 수행하는 경우 캐시에서 물건이 제거 될 수 있습니다. 그러나 단순한 '호출'이나 'ret'(또는 PPC에 해당하는 것이 무엇이든지)가 변경된 경우 매우 놀랍습니다. 하지만, 명시된 바와 같이, 난 그냥 추측이야 ... –

답변

3

A()에 사용 된 모든 데이터가 캐시에 맞다고 가정하면 B()에서도 개선 된 부분이 있어야합니다. 그러나 사용하지 않는 캐시에 데이터를 읽게 될 수도 있습니다. 아무 것도 쓸모가 없으며 필요한 경우 ACTUAL 데이터를로드하는 데 사용할 수있을 때 메모리 버스가 사용 중일 수 있습니다. 당신의 패턴은 당신이 말하는 것처럼 산발적입니다. 꼭 한번 사용해보십시오. 그러나 마술처럼 효율적으로 작동 할 것이라고 기대하지 마십시오. 특히 "지금 데이터를 읽는 곳에서 얼마나 멀리 떨어져 있는지"와 관련해서는 종종 약간의 "튜닝"이 필요합니다.

A()B()의 정확한 동작에 따라 예를 들어 읽기 및 쓰기간에 전환하고 한 섹션에서 읽고 완전히 다른 섹션에 쓰는 경우 "쓰기 영역"에 쓰기를 일괄 처리하는 경우 그런 다음 RAM에 복사하는 것이 좋은 계획입니다. L1 캐시의 1/8-1/4와 같은 고정 영역을 만드십시오.

[주의 : PowerPC 아키텍처에 대한 경험이 전혀 없지만, x86 프로세서로 작업 할 때 캐시 프리 페칭 및 기타 메모리 최적화 기술을 사용했다. times]

+0

L1에 쓰기 영역을 잡고 RAM에 다시 쓰는 마지막 힌트를 보내 주셔서 감사합니다. 사실, B()가 A() (20 % 증가) 범위에서 만지면 개선되는 것을 볼 수 있습니다. 그래서 당신이 말한 것처럼하면 일을 더 좋게 만들 수 있습니다 (50 %가 내 목표 임). – teodron

관련 문제