De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Optimalisatie technieken. Things should be made as simple as possible, but not any simpler. Optimalisatie technieken.

Verwante presentaties


Presentatie over: "Optimalisatie technieken. Things should be made as simple as possible, but not any simpler. Optimalisatie technieken."— Transcript van de presentatie:

1 Optimalisatie technieken

2 Things should be made as simple as possible, but not any simpler. Optimalisatie technieken

3 Fixed-point berekeningen Optimalisatie technieken ● Floatingpoint getallen kun je praktisch niet met elkaar vergelijken. ● De meeste embedded systemen hebben geen floatingpoint processor => floatingpoint berekeningen kosten veel tijd. Voorbeeld fixed point Notatie ● M.N 4.4 ● QN Q4 M is aantal integer bits, N is de fractionele bits Floatingpoint berekeningen

4 Optimalisatie technieken Fixed-point berekeningen Q4 Precisie:1/16 =0.0625

5 Optimalisatie technieken Fixed-point berekeningen Optellen:

6 Optimalisatie technieken Fixed-point berekeningen Aftellen: 1011 (11) (3) (11) (-3) (8)

7 Optimalisatie technieken Fixed-point berekeningen Vermenigvuldigen Negatief getal aanvullen met een 1

8 Optimalisatie technieken Fixed-point berekeningen Vermenigvuldig met 2 N en rond af naar dichtstbijzijnde integer. (int)(F * (1 =0 ? 0.5 : -0.5)) ● Conversie van float naar fixed point 1.75 *2 4 N Het aantal bits achter de komma Voorbeeld: N=4 =

9 Optimalisatie technieken Fixed-point berekeningen ● Conversie van fixed point naar float Getal delen door 2 N (float)F / (1<

10 Optimalisatie technieken Fixed-point berekeningen ● Conversie van int naar fixed point Vermenigvuldigen met 2 N (1<

11 Optimalisatie technieken Fixed-point berekeningen int main() { #define PI int a=(int)(PI* (1 =0 ? 0.5 : -0.5)); int b=(int)(PI* (1 =0 ? 0.5 : -0.5)); int c,d; c=a+a; d= a*a; d=(a*a)>>16; d=((long)a*a)>>16; float fa=(float)c/(1<<16); float fb=(float)d/(1<<16); printf("fa=%f fb=%f\n",fa,fb); return 0; } a*a=

12 Optimalisatie technieken Fixed-point arithmetic int main() { #define A 2.0 #define B 1.0 int a=(int)(A* (1 =0 ? 0.5 : -0.5)); int b=(int)(B* (1 =0 ? 0.5 : -0.5)); int d=a/b; int d=((long)a<<16)/b; float fd=(float)d/(1<<16); printf("fd=%f ",d); return 0; }

13 Optimalisatie technieken Vermijd standaard bibliotheek functies Standaard bibliotheek functies zijn grote en langzame functies o De strupr functie lijkt kort maar roept o.a. de functies strlower, strcmp, strcpy aan. o De functie printf, sprintf gebruikt o.a. floatingpoint bewerkingen. Vaak zijn er speciale functies zoals iprintf.

14 Optimalisatie technieken Inline functies Door een functie inline te declareren wordt er niet gesprongen naar de functie maar wordt de functie direct in de code verwerkt. int tel3op(int); inline int tel3op(int aantal) __attribute__((always_inline)); int main() { int a,b; a=tel3op(7); b=tel3op(8); return 0; } int tel3op(int aantal) { return aantal+3; } (gcc)

15 Optimalisatie technieken main:.LFB0:.cfi_startproc pushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16 movq%rsp, %rbp.cfi_def_cfa_register 6 subq$16, %rsp movl$7, %edi calltel3op movl%eax, -8(%rbp) movl$8, %edi calltel3op movl%eax, -4(%rbp) movl$0, %eax leave.cfi_def_cfa 7, 8 ret.cfi_endproc tel3op:.LFB1:.cfi_startproc pushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16 movq%rsp, %rbp.cfi_def_cfa_register 6 movl%edi, -4(%rbp) movl-4(%rbp), %eax addl$3, %eax popq%rbp.cfi_def_cfa 7, 8 ret.cfi_endproc Zonder inline

16 Optimalisatie technieken met inline main:.LFB0:.cfi_startproc pushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16 movq%rsp, %rbp.cfi_def_cfa_register 6 movl$7, -8(%rbp) movl-8(%rbp), %eax addl$3, %eax movl%eax, -16(%rbp) movl$8, -4(%rbp) movl-4(%rbp), %eax addl$3, %eax movl%eax, -12(%rbp) movl$0, %eax popq%rbp.cfi_def_cfa 7, 8 ret.cfi_endproc tel3op:.LFB1:.cfi_startproc pushq%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16 movq%rsp, %rbp.cfi_def_cfa_register 6 movl%edi, -4(%rbp) movl-4(%rbp), %eax addl$3, %eax popq%rbp.cfi_def_cfa 7, 8 ret.cfi_endproc

17 Optimalisatie technieken Alternatief voor inline #include #define min(x,y) ((x) <(y)) ? (x):(y) int main() { int a=4,b=5,m; m=min(b,a); printf("het minimunum van a en b=%d\n",m); return 0; } macro

18 Optimalisatie technieken Table lookups enum NodeType {NODE_A, NODE_B, NODE_C}; switch (getNodeType( )) { case NODE_A:. case NODE_B:. case NODE_C:. } ● Zet de node die het meest wordt aangeroepen bovenaan. ● Indien de nodes opeenvolgend zijn, maak een array van functiepointer.

19 Optimalisatie technieken int processNodeA(void); int processNodeB(void); int processNodeC(void); enum NodeType {NODE_A, NODE_B, NODE_C}; De aan te roepen functies. Array van functiepointers Declaratie array. int (*nodeFuncties [3] ) (void);

20 Optimalisatie technieken #include int processNodeA(void); int processNodeB(void); int processNodeC(void); int main() { int (*nodeFuncties[3]) (void); nodeFuncties[0]=processNodeA; nodeFuncties[1]=processNodeB; nodeFuncties[2]=processNodeC; int status=nodeFuncties[0](); printf("%d \n",status); } int processNodeA(void) { puts("NodeA"); return 0; } int processNodeB(void) { puts("NodeB"); return 1; } int processNodeC(void) { puts("Node"); return 2; }

21 Optimalisatie technieken int (* nodeFuncties[])( ) = {processNodeA, processNodeB, processNodeC}; status = nodeFuncties[getNodeType()]( ); int main { }

22 Optimalisatie technieken For loop Aftellen is voordeliger dan optellen

23 Optimalisatie technieken For loop Aftellen is voordeliger dan optellen Extra vergelijking

24 Optimalisatie technieken Limiteer het gebruik van C++ Gebruik van templates, exceptions, runtime type information hebben hoge kosten.


Download ppt "Optimalisatie technieken. Things should be made as simple as possible, but not any simpler. Optimalisatie technieken."

Verwante presentaties


Ads door Google