2014-06-21 2 views
0

리눅스에서 C++ 코드를 실행하고 있습니다. 내 코드에는 구조의 2D 배열이 있습니다. 배열은 무작위로 액세스됩니다. 2D 배열에 액세스 할 때 얼마나 많은 캐시 누락이 발생했는지 찾아야합니다. valgrind (결과 계산에 너무 많은 시간이 소요됨)를 제외하고이 배열의 캐시 누락 및 캐시 누락 비율을 찾는 데 도움이되는 다른 솔루션이 있습니까?2D 배열의 캐시 미스/캐시 미스 비율

+0

를 확인하기 위해 구체적인 예 통계의 목록을 포함, 어쩌면 간단한 캐시 시뮬레이터 쓰기 캐시 속성 및 배열 액세스에 후크? – JarkkoL

+0

진정한 랜덤 액세스라면 hit/miss 비율은 단지 cache_size/array_size입니다. –

답변

0

일반적으로 프로그램은 2D 배열에 액세스하는 것이 아니므로 메모리 액세스는 다른 변수를 포함합니다. 다소 효과가있을 수 있습니다.

배열 액세스가 집중적이거나 캡슐화 된 경우 간단한 시뮬레이터를 사용하여 손실률을 평가할 수 있습니다.

그렇지 않으면 도구가 필요할 수 있습니다. 필자는 동적 이진 계기 도구 인 Pin을 제안합니다.이 도구는 원칙적으로 valgrind와 유사하지만 오버 헤드는 수용 할 만하지만 분석 코드를 작성해야합니다.

또는 더 나은 선택은 인텔의 성능 분석 도구 인 Vtune이 캐시 분석을 시도하는 것입니다. 아직도, 당신은 그것을 배울 약간의 시간이 필요합니다.

0

캐시를 시뮬레이트하면 사소한 차이 (대체 정책, 프로토콜 등)로 인해 정확히 동일한 동작을 재현하지 못할 수 있습니다.

더 나은 옵션은 코드를 프로파일 링하는 것입니다. 리눅스를위한 가장 간단한 프로파일 링 도구는 아마도 perf 일 것입니다. 또한 https://perf.wiki.kernel.org/index.php/Tutorial

참조 - - 여기 꽤 괜찮은 튜토리얼있다 주어진에 대한 Are there any way to profile cache miss in linux kernel?, 그것은 캐시 성능 배열에 대한 액세스가 캡슐화되어있는 경우