Optimization (ITI8510)
| Real-Time Operating Systems and Systems Programming |
| [ @ ] |
Harjutame programmi optimeerimist
Programm
Kirjutage programm, mis loeb sisse faili ning väljastab selle faili statistika.
- "Standardse" sisendfaili saamiseks jooksutage:
dd if=/dev/urandom of=random_file count=1048576 bs=1
- Programmi väljundiks on 256 (inimloetavat) rida ASCII numbreid, mis kajastavad faili sisu. Esimesel real oleks baidi väärtusega 0x0 esinemiskordade arv, real 256 baidi 0xff esinemiskordade arv.
- Programmi käivitumise aega mõõtke käsuga:
time programminimi
Vihjeid
- Vaadake kas saate mmap() abil faili lugemist kiirendada.
- Vaadake kas on kasu loop unroll trikist
- Võib-olla soovite thread-e või paralleelprogramme proovida?
- Optimeerige programm -O võtmega
- Väljundi kirjutamisel on võib-olla mõistlik printf asemel kirjutada oma väljundfunktsioon
- Võib-olla on kasu parameetrist inline.
Example code for base program
#include <stdlib.h>
#include <stdio.h>
long int stats[256];
int main() {
int i, c;
FILE * f;
f = fopen("random_file", "r");
if(f == NULL) {
perror("slowstat");
exit(EXIT_FAILURE);
}
while((c = fgetc(f)) != EOF) {
stats[c]++;
}
for(i = 0; i < 255; i++) {
printf("%ld\n", stats[i]);
}
exit(EXIT_SUCCESS);
}