Erinevus lehekülje "Optimization (ITS8020)" redaktsioonide vahel
Mine navigeerimisribale
Mine otsikasti
(→Hints) |
|||
(ei näidata sama kasutaja üht vahepealset redaktsiooni) | |||
7. rida: | 7. rida: | ||
dd if=/dev/urandom of=random_file count=1048576 bs=1 | dd if=/dev/urandom of=random_file count=1048576 bs=1 | ||
− | * The output of the program should be 256 human-readable lines of ASCII numbers, which represent the content of the file. The first line should contain the number of occurences of byte with a value of 0x0 (or binary zero) in the file and the last line the number of occurences of byte with value 0xff (or | + | * The output of the program should be 256 human-readable lines of ASCII numbers, which represent the content of the file. The first line should contain the number of occurences of byte with a value of 0x0 (or binary zero) in the file and the last line the number of occurences of byte with value 0xff (or 255 in decimal). |
* Measure the running time of the program with: | * Measure the running time of the program with: | ||
time programname | time programname | ||
18. rida: | 18. rida: | ||
* Can you replace printf with something faster that you write yourself? | * Can you replace printf with something faster that you write yourself? | ||
* Perhaps the keyword inline can be used. | * Perhaps the keyword inline can be used. | ||
− | * (Sadly mmap for file reading fails in dijkstra) Can you speed up the reading of the file with mmap()? | + | * (Sadly mmap for file reading fails in dijkstra) Can you speed up the reading of the file with mmap()? |
== Example code for base program == | == Example code for base program == |
Viimane redaktsioon: 30. november 2018, kell 09:37
Optimization of a program
Programm
Write a program which will read a file and outputs its statistics.
- For a "standard" input file with random content, please run:
dd if=/dev/urandom of=random_file count=1048576 bs=1
- The output of the program should be 256 human-readable lines of ASCII numbers, which represent the content of the file. The first line should contain the number of occurences of byte with a value of 0x0 (or binary zero) in the file and the last line the number of occurences of byte with value 0xff (or 255 in decimal).
- Measure the running time of the program with:
time programname
Hints
- Does the loop unrolling trick work?
- Perhaps it is possible to use parallel programming or threads?
- Does compilation optimization with -O work?
- Can you replace printf with something faster that you write yourself?
- Perhaps the keyword inline can be used.
- (Sadly mmap for file reading fails in dijkstra) Can you speed up the reading of the file with mmap()?
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); }