여기에서 캐시가 작동하는 방식에 대한 기본적인 내용은 How and when to align to cache line size? 및 여기에 : What is "cache-friendly" code?이지만이 게시물 중 아무 것도 내 질문에 대답하지 않았습니다. 액세스를 사용하지 않고 즉, 전체를 캐시 내에서 실행하는 방법이 있습니까? (아마도 HDD에서 파일을 읽는 초기 프로세스 중에) RAM에 저장합니까? 지금까지 계산상의 병목 현상은 요즘 대부분 메모리 대역폭이며 "CPU가있는 한 당신은 괜찮습니다"라는 것을 알고 있습니다.캐시 미스를 피할 수있는 방법이 있습니까? _completely_?
프로그램을 캐시에로드하고 프로그램이 종료 될 때까지 계속 유지할 수 있습니까? 그래서 제가 1MB 컴파일 된 C 프로그램을 가지고 있다고 가정 해 봅니다.이 프로그램은 다른 1MB의 메모리 요구 사항으로 과학 계산을 수행하고 5 일 동안 실행됩니다. 이 코드에 플래그를 지정하여 평가 중에 캐시에서 빠져 나오지 않도록 할 수 있습니까? 이 코드의 우선 순위를 높이거나 실행 중에 비슷하게 생각하고 있습니다.
다른 말로하면, 유휴 컴퓨터가 OS를로드하는 데 사용되는 캐시 (우분투)는 아무 것도하지 않습니까? 공회전시 과도한 캐시 사용이 있습니까? 운영 체제가 실행 이외의 다른 작업을 수행하지 않으면 내 작은 프로그램이 일 때 항상 캐시에 있어야합니까? 5 분이 지나면 스크린 세이버가 시작됩니다. 이로 인해 캐시 공간에 대한 내 프로그램과 경쟁하기 때문에 대규모 캐시 미스가 발생합니다 (따라서 성능이 크게 저하됩니다)? 내 경험에 비추어 볼 때, 화면 보호기 나 간단한 오디오 플레이어, pdf 판독기와 같은 비 요구적인 여러 프로그램을 동시에 실행해도 내 과학 프로그램의 성능이 크게 떨어지지 않는다고해도, 항상 캐시에서 들어오고 나가십시오. 문제는 속도가 영향을받지 않는 이유는 무엇입니까? 계산의 속도를 향상 (또는 오히려 : 유지)하기 위해 절대 최소 시스템을 사용하는 것이 맞습니까?
그냥 명확하게하기 위해, 우리는 매우 간단 요점은이 작은 것을 모두 증가 변수는 97 모듈로는 가장 안쪽 부분을 요약 루프 중첩의 무리라고 코드가 뭔가 것을 가정 할 수있다 캐시에 넣고 실행하기에 충분합니다.
그 때 나는 요점을 놓치고 있습니다, 나는 두렵습니다. 주 메모리에서 L3 캐시로 프로그램을로드하는 것이 프로그램 자체를 실행하는 것과 비교할 때 시간이 좀 걸린다 고 말하면 캐시 부족이 처음에는 어떻게 문제인지 이해할 수 없습니다. 두 번째 발언 : 프로그램이 매우 간단하므로이 경우 프로파일 링이 도움이되지 않을까 걱정됩니다. – Matsmath
@Matsmath : 사실 그것이 요점입니다. 경우에 따라 프로그램이 대부분의 시간을 다른 일을하기 때문에로드 *는 중요하지 않습니다. 다른 경우에는 프로그램이 매우 큰 작업 세트로 쓰러져있을 수 있습니다.이 경우 주 메모리로드가 확실히 중요합니다 *. 당신의 예가 어떤 범주에 속하는지 짐작하십시오! (예, 하드웨어 성능 카운터 등으로 프로필을 작성할 수 있습니다.) –
이 모든 것이 의미가 있습니다. 그래서 제가 정말로 찾던 대답은 "프로그램이 간단하다면 RAM에서로드하는 것이 순간적으로 (거의) 항상 캐시에 있다고 가정 할 수 있습니다. 따라서 캐시에 영구히 보관하는 멋진 방법이 필요하지 않습니다. ''정확히 내가 찾고있는 것. 나는 이것을 (짧지 만 설득력있는) 대답으로 받아들이려고 노력할 것이다. 감사! – Matsmath