Optimalisatie technieken



Vergelijkbare documenten
Examen computerarchitectuur

PROS1E1 Gestructureerd programmeren in C Dd/Kf/Bd

EE1400: Programmeren in C BSc. EE, 1e jaar, , 3e college

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

10 Meer over functies

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

9 Meer over datatypen

8.1 Herleiden [1] Herleiden bij vermenigvuldigen: -5 3a 6b 8c = -720abc 1) Vermenigvuldigen cijfers (let op teken) 2) Letters op alfabetische volgorde

Een eenvoudig algoritme om permutaties te genereren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

8.1 Herleiden [1] Herleiden bij vermenigvuldigen: -5 3a 6b 8c = -720abc 1) Vermenigvuldigen cijfers (let op teken) 2) Letters op alfabetische volgorde

Examen computerarchitectuur

Examen computerarchitectuur

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers

Praktische Toets Computerarchitectuur

VAN HET PROGRAMMEREN. Inleiding

Oefententamen 2. Tijd: 2 uur. Maximaal aantal punten: 30. Naam: Studentnummer:

4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Examen computerarchitectuur

slides12.pdf December 14,

Instructies en blokken

PYTHON REEKS 1: BASICS. Mathias Polfliet

De standaard programmeertaal

Talstelsels, getalnotaties en Ascii code

4EE11 Project Programmeren voor W. College 2, , Blok D Tom Verhoeff, Software Engineering & Technology, TU/e

Programmeren in Java les 3

int main() { int m; m = power(2,3) /* berekent 2^3 en geeft de resultaat naar m terug */ }

Tentamen Programmeren in C (EE1400)

Hoofdstuk 1. Illustratie 2

DEC SDR DSP project 2017 (2)

VOORBLAD SCHRIFTELIJKE TOETSEN

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

Jörg R. Hörandel Afdeling Sterrenkunde.

Vraag 1 (4 punten) Gegeven het getal -132

EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college

Tentamen Programmeren in C (EE1400)

Uitwerkingen Rekenen met cijfers en letters

Vakgroep CW KAHO Sint-Lieven

Examen computerarchitectuur

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

OEFENINGEN PYTHON REEKS 1

3.1 Haakjes wegwerken [1]

Variabelen en statements in ActionScript

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, uur

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

[8] De ene 1 is de andere niet

Operaties op bestanden

Week 5 : Hoofdstuk 11+ extra stof: meer over functies. Hoofdstuk 11:

Programmeren met Arduino-software

5.2.1 Kijk uit! o 5.3 Wat doet "enum" instruktie? o 5.4 Programmeeropdrachten! 6. Strings & Arrays o 6.1 Wat is array? o 6.2 Wat is een string? o 6.

Examen Software Ontwikkeling I 2e Bachelor Informatica Academiejaar Januari, **BELANGRIJK** : Schrijf je naam onderaan dit blad

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

ALGORITMIEK: answers exercise class 7

PROGRAMMEREN IN C CURSUS VOOR STARTERS. J.W. Welleman. header files. source files. *.h. *.c. compiler. object files. library builder. *.

Interne voorstelling. types en conversies. Binaire en andere talstelsels. Voorstelling van gegevens: bits en bytes

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Instructies en blokken

Opdrachten numerieke methoden, serie 2

Basisvaardigheden algebra. Willem van Ravenstein Den Haag

Objectgericht Programmeren. (in Python)

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

17 Operaties op bits Bitoperatoren en bitexpressies

Recursie: definitie. De som van de kwadraten van de getallen tussen m en n kan als volgt gedefinieerd worden:

Groepen, ringen en velden

OEFENINGEN PYTHON REEKS 1

C++ C++ als een verbetering van C. Abstracte datatypen met classes. Constructoren en destructoren. Subklassen. binding van functies

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Jörg R. Hörandel Afdeling Sterrenkunde

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Arduino Cursus, Deel 2 Programmeren. Simon Pauw, ZB45, Amsterdam

1.1 Programmeren en voorbereiding

Tentamen Programmeren in C (EE1400)

De MySQL C API. Variabelen in C Functies in C Pointers in C

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Technology, Innovation & Society Delft

OEFENINGEN PYTHON REEKS 1

VOORBLAD SCHRIFTELIJKE TOETSEN

Javascript oefenblad 1

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Extra oefeningen Hoofdstuk 8: Rationale getallen

Technology, Innovation & Society Delft

Functies van vectoren

Talstelsels en getalnotaties (oplmodel)

Datastructuren: stapels, rijen en binaire bomen

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

Lineaire data structuren. Doorlopen van een lijst

// hier wordt de functie: ZegHallo aangeroepen

Go: een snelle introductie

1 Rekenen in eindige precisie

Computervaardigheden I

Willem van Ravenstein

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

scc = b) CD AB

Transcriptie:

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

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

Fixed-point berekeningen 5.75 4.4 Q4 Precisie: 1/16 =0.0625

Fixed-point berekeningen Optellen:

Fixed-point berekeningen Aftellen: 1011 (11) - 0011 (3) 001011 (11) + 111101 (-3) 1001000 (8)

Fixed-point berekeningen Vermenigvuldigen Negatief getal aanvullen met een 1

Fixed-point berekeningen Conversie van float naar fixed point Vermenigvuldig met 2 N en rond af naar dichtstbijzijnde integer. Voorbeeld: N=4 1.75 *2 4 =28 N Het aantalbits achter de komma 0 0 0 1 1 1 0 0 (int)(f * (1<<N) + (F>=0? 0.5 : -0.5))

Fixed-point berekeningen Conversie van fixed point naar float 0 0 0 1 1 1 0 0? Getal delen door 2 N (float)f / (1<<N) 1.75

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

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

Fixed-point arithmetic int main() { #define A 2.0 #define B 1.0 int a=(int)(a* (1<<16) + (A>=0? 0.5 : -0.5)); int b=(int)(b* (1<<16) + (B>=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;

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.

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; } (gcc) int tel3op(int aantal) { return aantal+3; }

main:.lfb0: Optimalisatie technieken.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 call tel3op movl %eax, -8(%rbp) movl $8, %edi call tel3op movl %eax, -4(%rbp) movl $0, %eax leave.cfi_def_cfa 7, 8 ret.cfi_endproc Zonder inline 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

main:.lfb0: Optimalisatie technieken met inline.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

Alternatief voor inline #include <stdio.h> macro #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;

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.

enum NodeType {NODE_A, NODE_B, NODE_C}; Array van functiepointers De aan te roepen functies. int processnodea(void); int processnodeb(void); int processnodec(void); Declaratie array. int (*nodefuncties[3]) (void);

#include <stdio.h> int processnodea(void); int processnodeb(void); int processnodec(void); intmain() { 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; }

int main { int (* nodefuncties[])( ) = {processnodea, processnodeb, processnodec}; status = nodefuncties[getnodetype()]( ); }

For loop Aftellen is voordeliger dan optellen

For loop Aftellen is voordeliger dan optellen Extra vergelijking

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