2014-09-30 4 views
1

주어진 프로그램에서 계기 캐시 히트와 누락을 방지하기 위해 pintool을 작성하려고했습니다. INS_IsMemoryRead/Write와 같은 호출이있어 명령어가 LD/ST인지 확인합니다.Intel의 PIN 도구를 사용하여 프로그램에서 캐시 적중 횟수를 계산합니다.

  • 명령에 캐시 적중 여부를 확인할 수있는 방법이 있습니까?
  • 그렇다면 캐시/메모리에서 데이터를 가져 오는 데 소비되는 사이클 수를 구할 수 있습니까?

답변

1

둘 중 어느 것도 수행 할 수 없습니다.

핀과 함께 제공되는 캐시 도구 인 "메모리"는 캐시의 매우 간단한 기능 시뮬레이터입니다. 즉, 캐시 도구를 사용하여 크기, 개수 수, 캐시 수준과 같은 캐시 구성에 따라 응용 프로그램이 가질 수있는 캐시 누락을 몇 가지로 보거나 시뮬레이션 할 수 있습니다. 간단한 코드 작성을 통해 캐시가 손실 된 명령어를보고하고 나중에 이러한 명령어를 소스 코드에 다시 매핑 할 수 있습니다. 그러나 캐시 시뮬레이터가 실제 시스템과 동일한 캐시 구성을 갖도록 구성되는 경우에도 캐시 시뮬레이션의 히트/미스 결과는 실제 컴퓨터 시스템과 동일하거나 일치하지 않을 수 있습니다.

또한 캐시 도구의 한 가지 제한 사항은 단일 스레드라는 것입니다. 멀티 스레드 응용 프로그램에는 사용할 수 없습니다.

또한 캐시 미스를 처리하는 데 필요한주기 수와 같은 타이밍 정보를 가져올 수 없습니다. 이는 아키텍처에 따라 매우 다르며 실제 시스템에서이 정보를 제공 할 수있는 도구를 알지 못합니다. 대신 사람들은 CPU 타이밍 시뮬레이터를 사용합니다. 예제 CPU 타이밍 시뮬레이터는 Gem5 http://www.gem5.org/ 및 PtlSim http://marss86.org/을 기반으로하는 화성입니다.