함수를 사용하여 실시간으로 큰 숫자 배열 (~ 1Mb)을 처리해야합니다. void processData(char* data)
. 시험 다음이 Cortex-A8 강제 메모리 캐싱
int j = 10;
while(j--)
processData(dataPtr);
때마다. 그것은 다음과 같은 결과를 보여 주었다 : 그것은 사실에 의해 발생할 수 있습니다
- 첫번째 실행이됩니다 ~ 22.5ms
- 2를 실행하고 다른 사람이 가지고 ~ 12,5ms 제 생각에는
을 그 2 일 실행 데이터는 이미 프로세서 캐시에 있으므로 훨씬 빠르게 작동합니다.
문제 : 실제 경우에는 데이터가 항상 달라집니다.
캐시에 "미리로드"할 수있는 방법이 있습니까?
이전에 캐시되지 않은 데이터에 액세스 할 때 적어도 한 번은 메모리 대역폭/대기 시간을 지불해야하므로 일반적으로 프리 페치 지침이나로드 지침을 통해로드하면 전반적인 차이가 발생하지 않습니다. –
갑자기 이전에 사용했던 데이터를 실행하고 지금 결과를 얻지 못하는 경우를 제외하고 항상 여분의 CPU주기가 없으면 내용을 수동으로 미리로드하는 것이 좋습니다. 다른 데이터를 처리하는 동안 한 데이터 세트를 미리로드하는 경우 캐시의 현재 반복에 대한 데이터를 강제 종료하지 않도록주의하여 다음 작업 속도를 높일 수 있습니다. –