최근 Herb Sutter는 "Modern C++: What You Need to Know"에 대한 훌륭한 토론을했습니다. 이 강연의 주요 주제는 효율성과 데이터 지역성 및 메모리 액세스 방법에 관한 것입니다. 그는 또한 메모리의 선형 액세스 (배열/벡터)가 CPU에서 어떻게 사랑 받을지 설명했습니다. 그는이 주제에 대한 또 다른 고전적 참조 "Game performance by Bob Nystrom"에서 한 예를 취했습니다.C에서 명령어 캐시 친화적 인 프로그램을 작성하는 방법 + +?
- 데이터 캐시 이
- 명령 캐시
Cachegrind 도구는 모두 캐시 유형을 측정 :
이 기사를 읽은 후, 프로그램의 성능에 미치는 영향 캐시의 두 가지 유형이 있음을 얻었다 우리 프로그램의 기계 사용 정보. 첫 번째 사항은 많은 기사/블로그와 좋은 데이터 캐시 효율성 (데이터 지역성)을 달성하는 방법으로 설명되었습니다.
그러나 주제 에 대한 많은 정보를 얻지 못했습니다. 명령어 캐시 및 더 나은 성능을 얻기 위해 프로그램에서 어떤 조치를 취해야합니까? 내 이해에 따라, 우리 (프로그래머)는 어떤 명령이나 어떤 명령이 실행될 지에 대한 많은 통제를하지 못한다.
작은 C++ 프로그램이이 카운터 (.i.e 명령어 캐시)가 우리의 프로그램 작성 스타일에 따라 어떻게 달라진다면 정말 좋을 것입니다. 이 시점에서 더 나은 성능을 얻기 위해 프로그래머가 따라야 할 모범 사례는 무엇입니까?
우리 프로그램이 (vector vs list) 비슷한 방법으로 2 차 지점에 대해 설명 할 수 있다면 데이터 캐시 항목에 대해 이해할 수 있다는 것을 의미합니다. 이 질문의 주된 의도는 가능한 한이 주제를 이해하는 것입니다.
가상 함수를 피하고 복잡한 코드를 작은 루프로 나누십시오. – lpapp
@Leeor : 어떤면에서 복제본입니까? – lpapp
죄송합니다. 잘못된 질문을 언급했습니다. 일단 컴퓨터 옆에 앉으면 투표를 철회 하겠지만 코드 캐시 컨텍스트 (예 : 추적 캐시, 디코딩 된 uop 캐시 등)를 사용하여 이전에 응답 한 것이 확실합니다. – Leeor