문제

시스템의 처리량을 개선해야합니다.

일반적인 최적화주기가 이루어졌으며 이미 1.5 배 더 나은 처리량을 달성했습니다.

이제 시스템의 처리량을 향상시키기 위해 캐시 그라인드 출력을 활용할 수 있는지 궁금해지기 시작했습니다.

누군가 나를 시작하는 방법을 알려줄 수 있습니까?

내가 이해하는 것은 가장 자주 사용되는 데이터가 L1 캐시에 남아 있도록 충분히 작게 유지해야하며 다음 데이터 세트가 L2에 적합해야한다는 것입니다.

이것이 내가 취하는 올바른 방향입니까?

도움이 되었습니까?

해결책

캐시 그라인드 출력 자체가 코드 최적화에 대한 정보를 너무 많이 제공하지 않는 것은 사실입니다. 그것을 해석하는 방법과 L1과 L2에 대한 데이터에 대한 데이터에 대해 말하는 내용은 실제로 올바른 방향입니다.

메모리 액세스 패턴이 성능에 미치는 영향을 완전히 이해하려면 훌륭한 용지를 읽는 것이 좋습니다. "모든 프로그래머가 기억에 대해 알아야 할 것" GNU LIBC 관리자 인 Ulrich Drepper에 의해.

다른 팁

캐시 그라인드 출력을 구문 분석하는 데 어려움이있는 경우 Kcachegrind를 살펴보십시오 (선택한 배포판에서 사용할 수 있어야합니다). 나는 그것을 사용하고 그것이 매우 도움이된다고 생각합니다.

에 따르면 캐시 그라인드 문서, Cachegrind가 제공 한 세부 정보는 코드의 주어진 부분에 대한 캐시 미스 수입니다. 코드를 수정하는 방법을 알 수 있도록 타겟팅하는 아키텍처에서 캐시가 어떻게 작동하는지 알아야합니다. 실제로 이것은 캐시 된 데이터가 여전히 캐시에 있도록 데이터를 작게 만들거나 일부 데이터의 액세스 패턴을 변경하는 것을 의미합니다. 그러나 정보에 따라 행동하기 전에 프로그램의 데이터 및 데이터 액세스를 이해해야합니다. 매뉴얼에서 말했듯이

요컨대, Cachegrind는 코드의 병목 현상 중 일부가 어디에 있는지 알려줄 수 있지만 수정 방법은 알려주지 않습니다. 당신은 스스로 해결해야합니다. 그러나 적어도 당신은 정보가 있습니다!

1.5 배는 좋은 속도입니다. 그것은 당신이 제거 할 수있는 시간의 33%가 걸린 것을 발견했다는 것을 의미합니다. 데이터 메모리 캐시와 같은 낮은 수준의 문제로 넘어 가기 전에도 더 많은 일을 할 수 있습니다. 이것은 방법의 예입니다. 기본적으로 25%의 말과 같이 이전에는 크지 않은 추가 성능 문제 (및 속도 업 기회)가있을 수 있습니다. 글쎄, 1.5 배 속도로 25%가 37.5%이므로 그보다 더 가치가 있습니다. 종종 그러한 문제는 비용이 얼마나 드는지를 알게되면 작업을 요청하는 중간 스택 함수 호출의 형태입니다. Kcachegrind는 실제로 이것을 정확히 지적하지 않기 때문에 그것이 문제라는 것을 깨닫지 못할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top