Skip to content

Instantly share code, notes, and snippets.

@melvyniandrag
Created June 26, 2018 00:37
Show Gist options
  • Save melvyniandrag/bbd652a0ea96ec28756d3eebbf9e2aa2 to your computer and use it in GitHub Desktop.
Save melvyniandrag/bbd652a0ea96ec28756d3eebbf9e2aa2 to your computer and use it in GitHub Desktop.
Demonstration of the impact of cache misses on a pic32 microcontroller. This should generate the same times on arduino, because arduino has no cache.
unsigned long time;
const unsigned long N = 1000;
int bigArr[N] = {0};
int sum;
int Cache = 128;
void init_arr(){
for( int i = 0; i < N; ++i){
bigArr[i] = 1;
}
}
void setup() {
Serial.begin( 9600 );
init_arr();
}
void loop() {
sum = 0;
time = millis();
for ( int iter = 0; iter < 10000; ++iter ){
for( int i = 0; i < N; ++i ){
int idx = (i*Cache + i) % N;
sum += bigArr[i];
}
}
time = millis() - time;
Serial.print( "stride 1 time:" );
Serial.print( time );
Serial.print( " sum: " );
Serial.print( sum );
Serial.print( "\n" );
sum = 0;
time = millis();
for( int iter = 0; iter < 10000; ++iter ){
for( int i = 0; i < N; ++i ){
int idx = (i*Cache + i) % N;
sum += bigArr[idx];
}
}
time = millis() - time;
Serial.print( "stride 2 time:" );
Serial.print( time );
Serial.print( " sum: " );
Serial.print( sum );
Serial.print( "\n" );
delay(N);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment