Optimization (ITI8510): erinevus redaktsioonide vahel
Mine navigeerimisribale
Mine otsikasti
Resümee puudub |
Resümee puudub |
||
| 20. rida: | 20. rida: | ||
* Väljundi kirjutamisel on võib-olla mõistlik printf asemel kirjutada oma väljundfunktsioon | * Väljundi kirjutamisel on võib-olla mõistlik printf asemel kirjutada oma väljundfunktsioon | ||
* Võib-olla on kasu parameetrist inline. | * 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); | |||
} | |||
Redaktsioon: 27. november 2014, kell 00:32
| 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);
}