이것은 내가 요구하는 것입니다. 특정 알고리즘이 캐시를 잘 사용하고, 어떤 알고리즘은 특정 데이터 세트에서 다른 것보다 I/O를 더 많이합니다. 나는 그것을보고 분석하고 싶다.C/C++ 프로그램의 캐시 히트/미스
그래서 특정 메모리/변수가 읽히는 방식을 알 수있는 방법이 있는지 궁금 해서요. 즉 캐시에서 가져온 것이거나 캐시 미스가있는 것입니다. 또한이 값을 검색하는 동안 페이지 오류가있는 경우
고마워요!
이것은 내가 요구하는 것입니다. 특정 알고리즘이 캐시를 잘 사용하고, 어떤 알고리즘은 특정 데이터 세트에서 다른 것보다 I/O를 더 많이합니다. 나는 그것을보고 분석하고 싶다.C/C++ 프로그램의 캐시 히트/미스
그래서 특정 메모리/변수가 읽히는 방식을 알 수있는 방법이 있는지 궁금 해서요. 즉 캐시에서 가져온 것이거나 캐시 미스가있는 것입니다. 또한이 값을 검색하는 동안 페이지 오류가있는 경우
고마워요!
캐시가 언제 치고 있는지 알고 싶으면 현대 프로세서에이 용도로 사용할 수있는 성능 카운터가 있습니다. 나는 그들을 학술 연구에 광범위하게 사용했다. 가장 쉬운 방법은 perfmon2입니다. Perfmon2에는 프로그램에 링크 할 수있는 라이브러리 나 기존 프로그램을 모니터링하는 독립 실행 형 프로그램이 있습니다. this document (PDF)의
참고로pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program
, 부록 A 사용할 수있는 하드웨어 카운터에 인텔의 문서를 나열 예를 들어, 다음은 모든 레벨 1 데이터 캐시 읽기 요청과 미스를 기록 독립 실행 형 프로그램입니다.
특정 컴파일러, OS 및 실행중인 프로세서의 특정 모델에 따라 다릅니다. C/C++ 언어로는 (내가 알고있는) 아무것도 캐시 수준에서 무슨 일이 일어나고 있는지 알 수 없습니다.
다양한 측정 도구가 있지만 언어와 크게 관련이 없습니다.
캐시 및 페이징 문제를 최소화하기위한 몇 가지 "규칙"이 있지만 합리적으로 포괄적 인 목록을 생각하는 데 다소 시간이 걸립니다.
나는 valgrind cachegrind tool을 사용해 보겠다. 주석이 달린 소스 라인을 그 라인의 캐시에있는 히트 수/미스 수와 함께 출력 할 수있다.
그 cachegrind 캐시 미스는 실제되지 않습니다 캐시 미스가 있지만 시뮬레이션 된 것입니다. – osgx
AMD CodeAnalyst가 해당 레벨을 표시 할 수 있는지는 잘 모르지만 확인하는 것이 좋을 것 같습니다.
Intel 플랫폼에서 AMD CodeAnalyst가 약간 제한적이지만 (기본 기능이 작동합니다). 따라서 Intel의 경우 Intel Vtune이 있습니다. 리눅스 oprofile/perf/perfmon2. – osgx
당신 이이 질문에 관심이있을 수 있습니다 : http://stackoverflow.com/questions/3052776/how-to-detect-cache-misses-from-users-codes –