현대 멀티 코어 프로세서에서는 일반적으로 로컬 L1 캐시이지만 공유 L2 캐시가 있습니다. L2 캐시를 사용하면서 메모리의 일부분을 위해 L1 캐시를 우회 할 수 있습니까? 성능 예측을 위해 타이밍 예측 가능성을 향상시키기 위해이 작업을 수행하려고합니다.멀티 코어 프로세서에서 L1 캐시를 우회 할 수 있습니까?
답변
내가 아는 한 주류 CPU의 L1 캐시를 우회 할 방법이 없습니다.
그러나 목표를 달성하려면 (즉, 타이밍 측정에 변동을 일으킬 수있는 캐시 누락을 방지하려면) 컴파일러에게 데이터를 캐시로 프리 페치하도록 요청할 수 있습니다.
GCC 또는 LLVM을 사용하는 경우 __builtin_prefetch을 참조하십시오.
그러나 귀하의 질문은 매우 모호합니다. 귀하의 제안이 귀하의 필요에 부합하지 않을지 확신 할 수 없습니다.
캐시
난 강력하게 당신이 캐시가 무엇을 잘못 이해 한 것으로 의심하고 그것이 무엇을위한 것입니다.
캐시는 메모리 내용의 관점에서 투명합니다. 하나의 코어가 메모리 위치에 쓰면 캐시 (L1, L2, L3 등)가 공유되거나 저장되지 않는 다른 모든 코어가 해당 위치를 캐시하여 우연히 업데이트됩니다.
이 아닌 것은이 아니기 때문에 코어가 값을 경쟁 할 수 없다는 것을 의미합니다. 다른 코어가 '잘못된 값을 얻는다.'전에 한 코어가 부분적으로 위치를 읽는 경쟁 조건을 여전히 가질 수 있습니다. 또한 CPU에 상관없이 모든 종류의 캐시가 있는지 여부가 발생합니다. '순서 지정'문제를 해결하려면 소스 코드에서 세마포어 또는 다른 IPC 기본 형식을 사용해야합니다.
일부 캐시 시스템에서는 '힌트를'드롭 할 수 있습니다. Matthieu Rouget은 __builtin_prefetch를 사용하여 그 예를 제시했습니다. 이러한 종류의 것들은 프로그래머가 캐시 시스템에 미리 데이터를 가져올만한 가치가 있다고 말할 수있게합니다. 일부 시스템 (예 : PowerPC 7450)을 사용하면 프로그래머가 캐시 대신 프로그래머 캐시 컨트롤의 일종 인 캐시 대신 메모리의 일부를 사용할 수있었습니다.
그러나 이러한 것들은 모든 캐시가 가지고있는 메모리보기에 어떤 변화도주지 않습니다. 한 캐시의 내용이 업데이트되면 나머지도 업데이트됩니다.
캐시 및 성능 프로그래밍
최고의 프로그래머는 캐시의 문제를 해결 코딩하여 CPU에서 최고의 성능을 추출 할 수 있습니다. 그 영역에서는 일반적으로 캐시가 전혀 존재하지 않기를 바랄 것입니다. 이것의 궁극적 인 구현은 PS3의 Cell 프로세서입니다. 수학 코어에는 캐시가 전혀 없습니다. 대신에 프로그램에서 요구할 데이터를 추측하기 위해 일부 캐시로 남겨두기보다는 자신의 모든 데이터를 가져 와서 소스 코드에 직접 작성해야합니다. 맞고 성과는 여전히 블리스 터로 좋다.
버스 스누핑
일부 CPU가 장치 드라이버를 작성할 때 특정 문제가 될 수 캐시 버스 스누핑을 필요가 없습니다. 버스 스누핑은 CPU 코어가 CPU 코어 이외의 다른 것으로 (예 : DMA 컨트롤러가 장치에서 데이터를 읽음으로써) 업데이트되는 메모리의 내용을 찾아내는 메커니즘입니다.그리고 다른 방법으로는 같은 - 메모리에서 DMA는 현재 캐시에 갇혀 값을 가져옵니다. 요즘 AFAIK 거의 모든 CPU가 버스 스누핑을하므로 문제가되지는 않습니다.
IO 및 메모리 주소 공간 (예 : Intel)을 사용하는 시스템에서 I/O 주소 공간이 어쨌든 캐시되지 않는다고 생각합니다. 메모리 매핑 장치가있는 시스템의 경우 메모리는 일반적으로 캐시되지 않으며 OS는 CPU를 그런 식으로 설정합니다 (this 참조).
귀하의 질문에 대한 이유로 돌아가려면 타이밍 예측 가능성 - 타이밍을 예측. 잘못된 기술을 사용하고있을 수 있습니다. 시스템에 타이밍 제약이있어 문제가 메인 메모리 쓰기 시간의 변동이라면 솔직히 멀티 코어 CPU를 사용하는 것이 처음부터 잘못된 것처럼 들립니다. @Griwes이 바로 그 시점에 있습니다 (실제로 전체 설명). 당신은 FPGA의 라인을 따라 무언가 순수한 하드웨어 설계에 의지 할 필요가있을 것입니다 (펌웨어가 정말로 소프트웨어인지에 대한 코멘트가 없습니다!).
의심 스럽지만 실제로는 세마포어와 다른 IPC 프리미티브를 사용하여 시스템의 두 스레드를 동기화하지 않으려 고하면 성공하지 못하고 공유 캐시를 만들지 못하게됩니다. 코드가 제대로 작동하려면 세마포어 등을 사용해야합니다.
- 1. 멀티 코어 멀티 프로세서에서 CPU 부하
- 2. 단일 코어 프로세서에서 PLinq
- 3. 멀티 코어 프로세서에서 Android 오류가 발생했습니다.
- 4. sysconf (_SC_CLK_TCK) 멀티 코어 프로세서에서 무엇을 반환합니까?
- 5. 다른 멀티 코어 프로세서에서 테스트하기위한 속도 정규화
- 6. 멀티 코어 프로세서에서 현재 실행중인 스레드는 무엇입니까?
- 7. 멀티 코어 프로세서에서 CRx 레지스터에 액세스하는 방법
- 8. 멀티 코어 프로세서에서 TPL 작동 방법
- 9. 단일 스레드로 멀티 코어 프로세서에서 데이터를 볼 수 있음
- 10. 멀티 코어, 하이퍼 스레딩 또는 멀티 프로세서에서 프로그래밍 방식으로 어떻게 결정할 수 있습니까?
- 11. Hibernate L1 캐시를 미리 채우는 것
- 12. L1 및 L2 캐시를 어떻게 조회합니까?
- 13. Linux 스케줄러가 멀티 코어 프로세서에서 프로세스를 스케줄하는 방법은 무엇입니까?
- 14. 다른 프로세서에서 동일한 멀티 스레딩 코드에 대해 시차가 있습니까?
- 15. OpenEdge 감사를 우회 할 수 있습니까?
- 16. 어떻게 공격자가 crossdomain.xml을 우회 할 수 있습니까?
- 17. 다른 프로세서에서 단일 스레드 예약 - 캐시를 지울 필요가 있습니까?
- 18. 여기에 멀티 코어 이점이 있습니까?
- 19. 어떻게 코어 수를 쿼리 할 수 있습니까?
- 20. 듀얼 코어 프로세서에서 2 개의 OS 실행
- 21. vs 2008에서 컴파일 플래그를 지정하여 cuda에서 l1 캐시를 비활성화하는 방법
- 22. 얼랑 SMP 멀티 코어 서버
- 23. 멀티 코어 프로세서 용 MESI 프로토콜에 대한 세부 정보
- 24. 멀티 코어 프로세서를 통한 RTOS의 갱 스케쥴
- 25. 클라이언트 캐시를 업데이트 할 수 있습니까?
- 26. Google 캐시를 쿼리 할 수 있습니까?
- 27. i7 멀티 코어 프로세서의 .Net 3.5
- 28. 멀티 프로세서에서 공유 메모리 영역을 보호하십시오.
- 29. 여러 코어/프로세서에서 작업을 분할하는 방법
- 30. 캐시를 해칠 수 있습니까?
실시간 OS를 사용합니까? –
왜 나는 downvotes를 받고 있습니까? – MetallicPriest
읽기 또는 쓰기 중 또는 둘 다에서 바이 패스 L1? – osgx