Optimization (ITI8510)

Allikas: Lambda
Redaktsioon seisuga 27. november 2014, kell 00:32 kasutajalt Irve (arutelu | kaastöö)
Mine navigeerimisribale Mine otsikasti
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);
}