Dagens tema. Raskere kode [REB&DRO H kap 5]
|
|
|
- Lars Amundsen
- 8 år siden
- Visninger:
Transkript
1 Dagens tema Dagens tema Raskere kode [REB&DRO H kap 5] Når er det viktig? Hvordan måle eksekveringshastighet? Hvordan oppnår man raskere kode? Blanding av C og assemblerkode
2 Dagens tema CPU-ene går ikke fortere
3 Dagens tema men det er likevel en liten økning i prosessorkraft
4 Er hastighet så viktig? Når er eksekveringshastighet viktig? Ofte har noen millisekunder fra eller til lite å si, men andre ganger er det avgjørende for suksess: Når prosessering må skje i sanntid Når det er en skikkelig stor oppgave som skal løses Når man lager kode som mange skal bruke ofte Når det er en konkurransesituasjon
5 Et eksperiment Vårt eksempel Vi trenger en rask strlen fordi vi skal jobbe mye med lange tekster i Latin-1 på norsk. Data Som eksempel skal vi bruke den norsk oversettelsen fra 1930 av Bibelen. % wc bibelen.text bibelen.text Vi bruker 100 eksemplarer etter hverandre.
6 Et eksperiment Forsøk 1 En naiv implementasjon int strlen_array(char s[]) { int ix = 0; } while (s[ix]!= 0) ++ix; return ix; Hvor rask er denne?
7 Hvordan måle hastighet? Hvordan måle ekskveringstiden? Målemetode 1 Tell antall eksekveringssykler Noen prosessorer teller sykler; på en x86-maskin kan vi bruke rdtsc # Legger antall sykler i %edx:%eax. (På våre maskiner er C-typen long long på 64 bit og funksjonsverdier av denne typen returneres i %EDX:%EAX når vi er i 32-bits modus.)
8 Hvordan måle hastighet? Hvor lang tid tar hver sykel? Linux % more /proc/cpuinfo processor : 0 vendor_id : GenuineIntel model name : Intel(R) Core(TM) i7 CPU [email protected] cpu MHz : cache size : 8192 KB fdiv_bug : no fpu : yes bogomips : Windows 7 (altså 2,93 GHz)
9 Hvordan måle hastighet? Konklusjon + Nøyaktig (i utgangspunktet) men moderne CPU-er kan redusere hastigheten for å spare strøm Vil bli forstyrret av OS-er og andre prosesser Fungererer bare på maskiner uten OS eller for veldig korte instruksjonssekvenser. Løsning Kjør testkoden mange ganger og velg det raskeste resultatet.
10 Hvordan måle hastighet? Målemetode 2 Ta tiden med stoppeklokke $ time./prog real 0m17.571s user 0m13.749s sys 0m3.778s (men nøyaktigheten er sjelden 1 ms så kjør testen flere ganger!) Konklusjon + Realistisk Ikke helt nøyaktig Tar med initieringen Forutsetter at det går få andre prosesser på maskinen
11 Hvordan måle hastighet? Målemetode 3 Bruk OS-mekanismer #include <unistd.h> #include <sys/times.h> double cpu_time(void) { struct tms t; } times(&t); return (t.tms_utime+t.tms_cutime)/ (double)sysconf(_sc_clk_tck); (På min Linux-maskin er tikk 10 ms.)
12 Eksperimentet vårt Resultatet Enkel C-versjon med array 865,6 ms Testen ble kjørt i løkke 50 ganger for å få et rimelig nøyaktig resultat. Tommelfingerregel La testen kjøre minst 10 s. Kan dette gjøres bedre?
13 Eksperimentet vårt Forsøk 2 Bruk pekere i stedet for array. long strlen_peker(char *s) { char *p = s; } while (*p!= 0) ++p; return p-s;
14 Eksperimentet vårt Resultatet Enkel C-versjon med array Enkel C-versjon med pekere 865,6 ms 853,0 ms Hvorfor det?
15 Eksperimentet vårt Med array: while (s[ix]!= 0) ++ix; Med pekere: while (*p!= 0) ++p;.l3:.l2: jmp.l2 addl $1, -4(%ebp) movl -4(%ebp), %eax addl 8(%ebp), %eax movzbl (%eax), %eax testb %al, %al jne.l3.l8:.l7: jmp.l7 addl $1, -4(%ebp) movl -4(%ebp), %eax movzbl (%eax), %eax testb %al, %al jne.l8
16 Eksperimentet vårt Forsøk 3 Er ikke assemblerkode raskere?.globl strlen_ass: pushl movl strlen_ass %ebp %esp,%ebp movl 8(%ebp),%eax l_as: cmpb $0,(%eax) jz x_as incl %eax jmp l_as x_as: subl 8(%ebp),%eax popl %ebp ret
17 Eksperimentet vårt Resultatet Enkel C-versjon med array Enkel C-versjon med pekere Enkel versjon i assemblerkode 865,6 ms 853,0 ms 254,7 ms Ikke verst, men kan den bli enda bedre?
18 Spesialinstruksjoner Spesialinstruksjoner Forsøk 4 Har ikke en CISC-prosessor som x86 noen egnede instruksjoner? movsb cmpsb scasb stosb flytter en byte fra (%ESI) til (%EDI) sammenligner (%ESI) og (%EDI) sammenligner (%EDI) med %AL lagrer %AL i (%EDI)
19 Spesialinstruksjoner Alle vil dessuten øke %EDI og (for movsb og cmpsb) %ESI. Det vil si: D = 0 økning D = 1 senkning D-flagget gis riktig verdi med cld D-flagget nulles std D-flagget settes (Mye kode forutsetter at D-flagget skal være 0.)
20 Spesialinstruksjoner Byte-instruksjonene gis et prefiks som forteller hvor lenge de skal jobbe: rep %ECX ganger repz %ECX ganger og Z=1 repnz %ECX ganger og Z=0
21 Spesialinstruksjoner Koden blir da:.globl strlen_ass_rep: pushl movl pushl strlen_ass_rep %ebp %esp,%ebp %edi movl 8(%ebp),%edi movl $0xffffffff,%ecx cld movb $0,%al repnz scasb movl subl popl popl ret $-2,%eax %ecx,%eax %edi %ebp
22 Spesialinstruksjoner Resultatet Enkel C-versjon med array Enkel C-versjon med pekere Enkel versjon i assemblerkode Assemblerkode med repnz 865,6 ms 853,0 ms 254,7 ms 252,0 ms
23 Kompilatoren kan bedre! Forsøk 5 Hva med optimalisering? De fleste kompilatorer kan lage optimalisert kode. -O3 Enkel C-versjon med array 865,6 ms 249,2 ms Enkel C-versjon med pekere 853,0 ms 249,6 ms Enkel versjon i assemblerkode 254,7 ms Assemblerkode med repnz 252,0 ms
24 Hva med å gjøre flere ting samtidig? Forsøk 6 Parallellisering Dagens prosessorer har flere kjerner; kan vi utnytte det? P 1 P 2 P 3 P 4 Svaret hadde vært ja, om det ikke hadde vært fordi vi ikke vet hvor vårt minne slutter! Konklusjon: Dette problemet egner seg ikke for parallellisering.
25 Hva med å gjøre flere ting samtidig? Forsøk 7 Kan vi forbedre algoritmen? Vi kan kanskje få en raskere funksjon om vi sjekker 4 og 4 tegn. Vi får færre tester. Vi reduserer antall hopp. (Og hopp tar lang tid pga pipeline-en.) Vi utnytter maskinens båndbredde og får færre aksesser til cache-en. (Punkt 1 og 2 kalles «utrulling av løkker».)
26 Hva med å gjøre flere ting samtidig? Problem 1: Hvordan sjekke raskt om minst én av fire byte er 0. Løsning (((x - 0x ) & ~x) & 0x ) == 0 1 Ved 1 vil 0 skifte fortegn til 1, andre verdier ikke. 2 Ved &~x vil de bit som skiftet 0 1, bli 1, de øvrige 0. 3 Ved siste & nuller vi alle bit unntatt fortegnsbit-ene.
27 Hva med å gjøre flere ting samtidig? (((x - 0x ) & ~x) & 0x ) == & & xxxxxxx yyyyyyy & 1xxxxxxx 0zzzzzzz & = & & = 0 1xxxxxxx yyyyyyy & 0xxxxxxx 0zzzzzzz & = 0
28 Hva med å gjøre flere ting samtidig? Testløkken blir da: (((x - 0x ) & ~x) & 0x ) == 0 movl 8(%ebp),%eax movl $0x ,%ebx. l_c4b: movl (%eax),%edx addl $4,%eax movl %edx,%ecx subl %ebx,%edx notl %ecx andl %ecx,%edx testl $0x ,%edx jz l_c4b
29 Hva med å gjøre flere ting samtidig? Et ekstra problem Når testen slår til, må vi sjekke byte-ene én for én for å finne 0-byte-en. subl cmpb je incl cmpb je incl cmpb je incl $4,%eax $0,(%eax) x_c4b %eax $0,(%eax) x_c4b %eax $0,(%eax) x_c4b %eax
30 Hva med å gjøre flere ting samtidig? En forbedring Vi bør unngå å bryte ord-grenser. Derfor må vi ta 0 3 byte først. a_c4b: testl $0x3,%eax jz l_c4b cmpb $0,(%eax) je x_c4b incl %eax jmp a_c4b
31 Hva med å gjøre flere ting samtidig? Det endelige resultatet er da: -O3 Enkel C-versjon med array 865,6 ms 249,2 ms Enkel C-versjon med pekere 853,0 ms 249,6 ms Enkel versjon i assemblerkode 254,7 ms Assemblerkode med repnz 252,0 ms Sjekk 4 og 4 tegn 98,6 ms
32 Hva med å gjøre flere ting samtidig? Men vi kjører nå på en 64-bits maskin! Hva om vi dropper -m32 og sjekker 8 og 8 byte? -O3 Enkel C-versjon med array 865,6 ms 249,2 ms Enkel C-versjon med pekere 853,0 ms 249,6 ms Enkel versjon i assemblerkode Assemblerkode med repnz Sjekk 4 og 4 tegn Sjekk 8 og 8 tegn 254,7 ms 252,0 ms 98,6 ms 53,7 ms
33 Hva med å gjøre flere ting samtidig? Hva gjør Linux clib og gcc? 1 Kall på strlen("xxx...") beregnes av gcc. 2 Andre direkte kall på strlen oversettes til kode med repz (altså ingen kall og retur). 3 Indirekte kall på strlen (f eks som parameter) tester 4 og 4 (eller 8 og 8) byte med følgende test basert på at det nesten bare brukes engelske bokstaver: (x - 0x ) & 0x (Falske positiver må oppdages under byte-for-byte-testen.)
34 Hva med å gjøre flere ting samtidig? Oppsummering -O3 Enkel C-versjon med array 865,6 ms 249,2 ms Enkel C-versjon med pekere 853,0 ms 249,6 ms Enkel versjon i assemblerkode 254,7 ms Assemblerkode med repnz 252,0 ms Sjekk 4 og 4 tegn 98,6 ms Sjekk 8 og 8 tegn 53,7 ms Linux inline-kode 250,4 ms strlen i clib 32 bit 92,0 ms strlen i clib 64 bit 53,8 ms
35 Hvordan unngår man kall og retur? Å blande C og assemblerkode #include <stdio.h> typedef unsigned int uint; uint mult (uint a, uint b) { return a*b; } int main (void) { uint res = 1; int i; } for (i = 1; i <= 12; ++i) { res = mult(res,10); printf("%2d:%14u\n", i, res); } return 0; Dette programmet gir galt svar: 1: 10 2: 100 3: : : : : : : : : :
36 Hvordan unngår man kall og retur? La oss bruke assemblerkode til å multiplisere i stedet: #include <stdio.h> #include <stdlib.h> typedef unsigned int unint; unint mult (unint a, unint b) { unint res, top; asm("mull %%edx" : "=a" (res), "=d" (top) : "a" (a), "d" (b)); if (top) { fprintf(stderr, "\n**overflow**\n"); exit(1); } return res; } 1: 10 2: 100 3: : : : : : : **Overflow**
37 Hvordan unngår man kall og retur? «Funksjonen» asm Man skriver «inline assembly» med en asm-konstruksjon. Den har inntil fire deler adskilt med kolon(!): 1 selve koden 2 utparametre 3 innparametre 4 ekstra registre
38 Hvordan unngår man kall og retur? Assemblerkoden Koden skrives som vanlig assemblerkode, men registre angis som %%eax %0, %1,... angir parametre flere instruksjoner skilles med \n
39 Hvordan unngår man kall og retur? unint mult (unint a, unint b) { unint res, top; asm("mull %%edx" : "=a" (res), "=d" (top) : "a" (a), "d" (b)); if (top) { fprintf(stderr, "\n**overflow**\n"); exit(1); } return res; } mult: #APP #NO_APP.L5: pushl movl subl movl movl mull %edx %ebp %esp, %ebp $24, %esp 8(%ebp), %eax 12(%ebp), %edx movl %eax, -4(%ebp) movl %edx, %eax movl %eax, -8(%ebp) cmpl $0, -8(%ebp) je.l5 movl $.LC0, 4(%esp) movl stderr, %eax movl %eax, (%esp) call fprintf movl $1, (%esp) call exit movl leave ret -4(%ebp), %eax
40 Hvordan unngår man kall og retur? Parametrene Ut- og innparametre bruker en spesiell notasjon "xxx" (var) som tolkes slik: Variabelen var angir en C-variabel. Spesifikasjonen xxx legger restriksjoner på hvorledes variabelen kommer til assemblerkoden: a register %EAX g ingen restriksjoner b register %EBX n samme som param n r et vilkårlig register = variabelen blir endret m minnet
41 Hvordan unngår man kall og retur? Ekstra registre Her angis om man bruker (dvs ødelegger) andre registre enn parametrene.
42 Hvordan unngår man kall og retur? Oppsummering om inline-kode («Språket» for blandingskode er ganske mye rikere enn det som er nevnt hittil.) + Blandingskode kan gi tilgang til maskinressurser som ikke kan nås fra høynivåspråket. + Det er en liten hastighetsgevinst i å slippe call+ret og pushl/popl av parametrene. + Man reduserer antall filer. Programmene er like lite portable som assemblerfiler. Man må lære et nytt «språk» for å programmere blandingskode. Koden blir mindre oversiktlig. Man er aldri sikker på om kompilatoren genererer riktig kode.
43 Hastighet er viktig, men ikke alltid! Nyttig å tenke på Amdahls lov sier at hvis vi forbedrer en α-del av eksekveringen med en faktor k, er forbedringen S = 1 (1 α) + α/k
44 Hastighet er viktig, men ikke alltid! En velkjent tese er: S = 1 (1 α) + α/k 90% av kjøretiden brukes i 10% av koden. Fordobler man hastigheten i den mest «aktive» delen 1 av koden, oppnår man S = (1 0,9)+0,9/2 = 1,82. Om man dobler hastigheten i den minst aktive delen, 1 får man S = (1 0,1)+0,1/2 = 1,05.
45 Hastighet er viktig, men ikke alltid! Konklusjon Optimaliser koden der det virkelig teller og legg mest vekt på lesbarhet ellers.
Dagens tema. Er maskinen big endian? Denne funksjonen tester det: INF1070 INF1070 INF1070 INF1070
Dagens tema Bit fikling Makroer Blanding av C og assemblerkode Mer om Core War Dag Langmyhr,Ifi,UiO: Forelesning 22. mai 2006 Ark 1 av 25 Bit fikling Når alt er bit, gir det oss som programmerere nye muligheter.
Løsningsforslag til eksamen i INF2270
Løsningsforslag til eksamen i INF227 Oppgave 9 Omid Mirmotahari Oppgave 6 Dag Langmyhr. juni 24 Eksamen INF227 Sensorveiledning Oppgave 2 Kretsforenkling Hva er funksjonsuttrykket for Output gitt av A
En oppsummering. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen. Programmeringsoppgaver Flervalgsoppgaver
En oppsummering Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen Programmeringsoppgaver Flervalgsoppgaver Pensum Pensum Læreboken Forelesningene De obligatoriske oppgavene Ukeoppgavene
Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Hovedkortet Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Hovedkortet Grovt sett inneholder et hovedkort En prosessor Minne (for både program og data) Klokke Kontrollere for periferutstyr.
En oppsummering (og litt som står igjen)
En oppsummering (og litt som står igjen) Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen En oppsummering Oppsummering Pensum læreboken til og med kapittel 7 forelesningene de
Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Hovedkortet Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Data.data Stakk %EAX %ECX %EDX %EBP %ESP Prosessor Kode Minne.text Hovedkortet Grovt sett inneholder et hovedkort En prosessor
Løsningsforslag til eksamen i INF2270
Løsningsforslag til eksamen i INF2270 Omid Mirmotahari (oppgave 1 4) Dag Langmyhr (oppgave 5 6) 14. juni 2012 Eksamen inf2270 V12 - fasit 1) (5%) Forkort følgende uttrykk med karnaugh diagram zw xy 00
Dagens tema Programmering av x86 Flytting av data Endring av størrelse
Dagens tema Programmering av x86 Flytting av data Endring av størrelse Aritmeriske operasjoner Flagg Maskeoperasjoner Hopp Tester Stakken Rutinekall Kall og retur Frie og opptatte registre Dokumentasjon
Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen
Den siste dagen Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen En oppsummering Oppsummering Pensum Læreboken til og med kapittel 7, kompendiet, forelesningene
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 13. juni 2013 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 9 sider. Vedlegg: Tillatte hjelpemidler: INF2270 Datamaskinarkitektur
Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):
Hovedkortet Det viktigste i en moderne datamaskin er hovedkortet («motherboard»): Data.data Stakk %EAX %ECX %EDX %EBP %ESP Prosessor Kode Minne.text Hovedkortet Grovt sett inneholder et hovedkort En prosessor
Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering
Oppsummering Pensum Grovt sett er alt fra forelesningene og øvingsoppgavene pensum. Detaljert oversikt finnes på kurssidene. Hovedtanker fra kurset Litt om eksamen Hvorfor har dere lært dette? Ikke mange
Dagens tema. Minnestrukturen Grovt sett ser minnet for hver process slik ut: Flytting av data. Programmering av x86
Dagens tema Programmering av x86 Minnestrukturen Flytting av data Endring av størrelse Aritmeriske operasjoner Flagg Maskeoperasjoner Hopp Tester Stakken Minnestrukturen Grovt sett ser minnet for hver
Dagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler
Dagens tema Dagens tema: Maskinkode Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler Charles Babbage Datamaskinenes historie Menneskene har alltid prøvd
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: Eksamensdag: 12. juni 2015 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 11 sider. Vedlegg: Tillatte hjelpemidler: INF2270
Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variabler Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del 0
Tema for siste forelesning:
Dagens tema Tema for siste forelesning: Kodegenerering Funksjoner Testing Ulike testprogrammer Kompilering av programsystemer make ant Hva må gjøres for funksjoner? Funksjoner For funksjoner må vi kunne
Oppgave 1 - Linux kommandolinje (%)
Løsningsforslag Eksamen høst 2017 Operativsystemer Oppgave 1 - Linux kommandolinje (%) a) pwd b) ps Oppgave 2 - Bash-scripting (%) a) ping -i 5 www.hin.no b) ping -c 1 www.hin.no ping -c 1 -t 1 www.hin.no
Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner og array-er.) Prosjektoversikt
Løsningsforslag til eksamen i INF2270
Løsningsforslag til eksamen i INF2270 Philipp Häfliger (oppgave 1, 2 og 3) Dag Langmyhr (oppgave 4 og 5) 10. juni 2010 1 1 Boolsk Algebra Det fins 5 forskjellige funksjoner blant disse Boolske uttrykene.
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 14. juni 2007 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 9 sider. Vedlegg: INF1070 og INF2270 Datamaskinarkitektur
Tema for siste forelesning:
Tema for siste forelesning: Kompilering av programsystemer make ant Kodegenerering Funksjoner Testing Ulike testprogrammer Hvordan kompilere riktig? Programmet make Det er mange praktiske problemer forbundet
Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering
Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at
Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen
Dagens tema Dagens tema: Kodegenerering Introduksjon Enkle variable Uttrykk Tilordning Litt mer kompliserte setninger med betingelser (Alt om kodegenerering unntatt funksjoner.) Prosjektoversikt Del-0
Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema
Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Charles Babbage Midt på 1800-tallet
Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin?
Dagens tema Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin? Intel-prosessoren Enkel assemblerprogrammering Dag
Innhold. 2 Kompilatorer. 3 Datamaskiner og tallsystemer. 4 Oppsummering. 1 Skjerm (monitor) 2 Hovedkort (motherboard) 3 Prosessor (CPU)
2 Innhold 1 Datamaskiner Prosessoren Primærminnet (RAM) Sekundærminne, cache og lagerhierarki Datamaskiner Matlab Parallell Jørn Amundsen Institutt for Datateknikk og Informasjonsvitenskap 2010-08-31 2
IN 147 Program og maskinvare
Dagens tema Mer om C Cs preprosessor Allokering av variable Separat kompilering Programmet make Pekere i C Operasjoner på pekere Pekere og vektorer Referanseparametre Pekere til «alt» og «ingenting» Dynamisk
Programmeringsspråket C
Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger
Del 4 Noen spesielle C-elementer
Del 4 Noen spesielle C-elementer 1 RR 2016 Header-filer inneholder Prototypene til funksjonene i standard biblioteket Verdier og definisjoner som disse funksjonene bruker #include #include
Tema for siste forelesning:
Dagens tema Tema for siste forelesning: Versjonskontroll CVS og Subversion Kodegenerering Funksjoner Testing Ulike testprogrammer Samarbeidsproblemer Når flere samarbeider Når flere jobber sammen, kan
Del 1 En oversikt over C-programmering
Del 1 En oversikt over C-programmering 1 RR 2016 Starten C ble utviklet mellom 1969 og 1973 for å re-implementere Unix operativsystemet. Er et strukturert programmeringsspråk, hvor program bygges opp av
Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering
Uke 34 Uke 35 Uke 36 Uke 37 Uke 38 Uke 39 Uke 40 Uke 41 Uke 42 Uke 43 Uke 44 Uke 45 Uke 46 Uke 47 sikkerhet datanett programvare digitale kretser Prosessoren II Kort oppsummering Løkker og tester Mer om
Dagens tema. 2. Feilsøking. 1. Minnet. Fast minne. gdb ddd Valgrind Egne testutskrifter. Noen nyttige instruksjoner. Bit-fikling
Dagens tema 1. Minnet Fast minne Store og små indianere «align»-ing Noen nyttige instruksjoner Vektorer Hva er adressen? 2. Feilsøking gdb ddd Valgrind Egne testutskrifter Bit-fikling Faste variable Faste
Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer
Dagens program Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer Nyttige forklaringer Sikker opprettelse av nye prosesser Hva
2 Parser. 1 Skanner. 4 Kodegenerator. 3 Sjekker. Oversikt Datamaskinhistorie x86 Kodegenerering Setninger Uttrykk.
Dagens tema Dagens tema: Maskinkode del 1 Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode for setninger Konstanter og uttrykk Prosjektoversikt f.pas f.s 1 Skanner :Token
Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?
Dagens tema Dagens tema Kildekode Hva er kompilering? Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Hvordan oppdage feil? Anta at vi lager dette lille
Programmeringsspråket C
Programmeringsspråket C Programmeringsspråket C Laget til implementasjon av Unix ved AT&Ts Bell labs i Palo Alto 1969 73. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI-standard
Programmeringsspråket C Del 2
Programmeringsspråket C Del 2 Michael Welzl E-mail: [email protected] 8/25/10 inf1060 1 Et eksempel Dette er lite eksempel som ber om et tall, leser det og så teller fra det ned til 0. 8/25/10 inf1060
Notater: INF2270 Assembler
Notater: INF2270 Assembler Veronika Heimsbakk [email protected] 11. juni 2014 Innhold 1 Registere 2 2 Assembler-programmering 2 2.1 Instruksjoner........................... 3 2.2 Variabler..............................
Programmeringsspråket C
Programmeringsspråket C Programmeringsspråket C Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI-standard i 1988;
Dagens tema INF1070. Signaturer. Typekonvertering. Pekere og vektorer. struct-er. Definisjon av nye typenavn. Lister
Dagens tema Signaturer Typekonvertering Pekere og vektorer struct-er Definisjon av nye typenavn Lister Dag Langmyhr,Ifi,UiO: Forelesning 24. januar 2005 Ark 1 av 20 Signaturer I C gjelder alle deklarasjoner
Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.
Oppgaver uke 35: Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin. Oppgave 1. Skriv et C-program som leser mål i tommer og skriver det ut i fot og tommer. (Det er 12 tommer
Samtidige prosesser. Prosessor modus. Hvordan kan OS effektivt kontrollere brukerprosesser? Hvordan kan OS. kontrollere brukerprosesser?
Samtidige To (tasks) må ikke ødelegge for hverandre: skrive til samme minne kapre for mye CPU-tid få systemet til å henge Beste løsning: All makt til OS = Preemptive multitasking Preemptive = rettighetsfordelende.
Seksjon 1. INF2270-V16 Forside. Eksamen INF2270. Dato 1. juni 2016 Tid Alle trykte og skrevne hjelpemidler, og en kalkulator, er tillatt.
Seksjon 1 INF2270-V16 Forside Eksamen INF2270 Dato 1. juni 2016 Tid 14.30-18.30 Alle trykte og skrevne hjelpemidler, og en kalkulator, er tillatt. Dette oppgavesettet består av 14 oppgaver som kan løses
Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.
Dagens tema Dagens tema C-programmering Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Adresser og pekere Parametre Vektorer (array-er) Tekster (string-er) Hvordan ser minnet
Kapittel 1 En oversikt over C-språket
Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske
Oppgave 1 JK-flip-flop (Total vekt 20%)
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 147 Program- og maskinvare Eksamensdag: 12. mai 1997 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 6 sider. Vedlegg: Tillatte
Eksamensinformasjon. Linux kommandolinje. Linux kommandolinje. Eksamensinformasjon. Fakultet: Teknologi, kunst og design. Tid: 3 t.
Eksamensinformasjon Eksamensinformasjon Fakultet: Teknologi, kunst og design Utdanning: Teknologiske fag Emnenavn: Operativsystemer Emnekode: DATS/ITPE2500 (Kont) Dato: 4.august-2017 Tid: 3 t. Tillatte
Dagens tema. Representasjon av mantissen En desimalbrøk: 1 1, INF1070 INF1070 INF1070 INF1070
Dagens tema Flyt tall Oppbygning IEEE 754 Programmering med flyt tall Selvmodifiserende kode Core War Flyt tall Tall med desimalkomma kan skrives på mange måter: 8 388 708,0 8,388708 0 6 8,39 0 6 De to
Pekere og vektorer. Dagens tema. I C gjelder en litt uventet konvensjon:
Pekere og vektorer I C gjelder en litt uventet konvensjon: Dagens tema Det siste om C Pekere og vektorer Pekere til pekere Vanlige pekerfeil struct-er og typedef Lister Feilsøking Bruk av et vektornavn
