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

Slides:



Advertisements
Verwante presentaties
Negatieve getallen Klas 1 | Hoofdstuk 4
Advertisements

Gecijferdheid Negatieve getallen.
- Hoe noem je uitkomsten?
Een getal met een komma noemen we een decimaalgetal.
Standaard-bewerkingen
Positieve en Negatieve getallen
vergelijkingen oplossen

Presentatie vergelijkingen oplossen Deel 2
vwo B Samenvatting Hoofdstuk 1
Regels voor het vermenigvuldigen
Voorbeeld a5a · 4b = 20ab b-5a · 4a = -20a 2 c-2a · -6a = 12a 2 d5a · -b · 6c = -30abc e-5b · 3a · -2 = 30ab f-2 · -a = 2a opgave 1 a7a + 8a = 15a b6a.
1 het type x² = getal 2 ontbinden in factoren 3 de abc-formule
Bewegen Hoofdstuk 3 Beweging Ing. J. van de Worp.
Bewegen Hoofdstuk 3 Beweging Ing. J. van de Worp.
Numerieke Natuurkunde
Van de eerste graad in één onbekende
Verhoudingstabel Er is een voorraad laxeermiddel. Die oplossing bevat 15% natriumsulfaat. Dit betekent: 15 gram per 100 mL oplossing. Kinderen krijgen.
Meetonzekerheden In de natuurkunde moet je vaak een grootheid meten
Talstelsels, rekenen en rekenschakelingen
Talstelsels, rekenen en rekenschakelingen
Algoritmiek Object-georiënteerd Programmeren
Algoritmiek Dataweergave en bewerking Hoorcollege 2 - Ma. 11 sept L.M. Bosveld-de Smet.
H1 Experimenteel onderzoek
Vergelijkingen oplossen.
H2 Lineaire Verbanden.
Inganguitgang. inganguitgang voeding inganguitgang voeding uitgang.
Rekenen Hoofdstuk 9.
Informatica: Binair rekenen.
Maar HOE kan je nu twee BINAIRE getallen optellen?
Presentatie vergelijkingen oplossen.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
ware bewering niet ware bewering open bewering
BINAIR REKENEN.
Grote getallen.
Hoofdstuk 4: Statistiek
Lifehacking – slimmer werken en slimmer leven. Frank Meeuwsen.
Heel kleine getallen.
Regels voor het vermenigvuldigen
Het kwadraat van een getal
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
Bits & bytes.
Inleiding computersystemen en netwerken Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 2.1 Programmeren (2.9) assembler,
Toveren met kommagetallen
Rekenen.
verhoudingen – breuken – procenten - kommagetallen
Significante cijfers Wetenschappelijke notatie a • 10b
Significante cijfers Wetenschappelijke notatie
Deze les hoofdrekenen les 1 vervolg
Gameprogrammeren: Expressies
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Rekenen Les 5: vermenigvuldigen en delen Les 6: Afronden met breuken en kommagetallen.
Bewerkingen 5de leerjaar.
Hoofdrekenen 1.
Hoofdstuk 7: Handelsrekenen
Rekenen Les 5: vermenigvuldigen en delen Les 6: Afronden met breuken en kommagetallen.
Hoofdstuk 12 cijferen. Hoofdstuk 12 cijferen Paragraaf 12.1 Optellen en aftrekken.
Wetenschappelijk en significantie
Machten van natuurlijke getallen
Rekenen met letters Rekenen met letters Rekenen met letters
Binaire getallen 1. binair → decimaal 2. decimaal → binair.
Breuken delen Breuken delen Breuken delen © André Snijers.
Kommagetallen vermenigvuldigen en delen
Info 2 Rationale getallen tot een positieve macht verheffen M A R T X
Bewerkingen met natuurlijke getallen
Soms handig om priemgetallen te gebruiken.
Hoofdrekenen 1.
Verder rekenen met kommagetallen
Transcript van de presentatie:

Optimalisatie technieken

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

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

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

Optimalisatie technieken Fixed-point berekeningen Optellen:

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

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

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 =

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

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

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=

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; }

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.

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)

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

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

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

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.

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);

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; }

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

Optimalisatie technieken For loop Aftellen is voordeliger dan optellen

Optimalisatie technieken For loop Aftellen is voordeliger dan optellen Extra vergelijking

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