This shows you the differences between two versions of the page.
iocla:cursuri:curs-12 [2018/10/16 14:19] dragos.niculescu |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Curs 12: Optimizări ====== | ||
- | |||
- | <html> | ||
- | <iframe src="https://docs.google.com/viewer?url=http://elf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_12_Optimizari.pdf&embedded=true" width="600" height="480" style="border: none;"> | ||
- | </iframe> | ||
- | </html> | ||
- | |||
- | * [[http://elf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_12_Optimizari.pdf|Curs 12: Optimizări (PDF)]] | ||
- | * [[http://elf.cs.pub.ro/asm/res/cursuri/IOCLA_curs_12_Optimizari-notes3on1.pdf|Curs 12: Optimizări (handout: 3on1 notes)]] | ||
- | |||
- | |||
- | * Suport curs | ||
- | * Ray Sefarth, "Introduction to 64 Bit Intel Assembly Language Programming for Linux", 2011, capitolul 15 | ||
- | * Richard Blum, "Professional Assembly Language", 2005, capitolul 16 | ||
- | * De citit, alte surse | ||
- | * [[http://agner.org/optimize/| Agner Fog optimization manuals - optimizarea e un curs de semestru! ]] | ||
- | * [[https://danluu.com/assembly-intrinsics/|Hand coded assembly beats intrinsics in speed and simplicity]] | ||
- | * [[http://arjunsreedharan.org/post/82710718100/kernel-101-lets-write-a-kernel|Let's write a kernel]] | ||
- | * [[http://neilkemp.us/src/sse_tutorial/sse_tutorial.html|Intel SSE Tutorial : An Introduction to the SSE Instruction Set]] | ||
- | |||
- | | ||
- | |||
- | |||
- | ===== Demo-uri ===== | ||
- | |||
- | Pentru parcurgerea demo-urilor, folosim [[http://elf.cs.pub.ro/asm/res/cursuri/capitol-09/capitol-09-demo.zip|arhiva aferentă]]. Demo-urile rulează pe Linux. Descărcăm arhiva folosind comanda<code bash> | ||
- | wget http://elf.cs.pub.ro/iocla/res/cursuri/capitol-09/capitol-09-demo.zip | ||
- | </code> și apoi decomprimăm arhiva<code bash> | ||
- | unzip capitol-09-demo.zip | ||
- | </code> și accesăm directorul rezultat în urma decomprimării<code bash> | ||
- | cd capitol-09-demo/ | ||
- | </code> | ||
- | |||
- | Acum putem parcurge secțiunile cu demo-uri de mai jos. | ||
- | |||
- | ==== Demo ==== | ||
- | |||
- | ''cd capitol-09-demo/'' | ||
- | |||
- | ''cat /proc/cpuinfo | grep Hz'' | ||
- | |||
- | ''make'' | ||
- | |||
- | ''./test_freq'' | ||
- | estimează frecvența procesorului folosind registrul TSC pentru sleep(1) | ||
- | |||
- | ''./test_rdtsc'' | ||
- | în bucla rep trebuie încercate diverse combinații de instrucțiuni. | ||
- | Programul afișează numărul de instrucțiuni din buclă și numărul de cicli folositi. | ||
- | |||
- | ''./test_sse'' | ||
- | se compară viteza de execuție cu operații SSE cu prelucrarea clasică octet cu octet | ||
- | |||
- | ''./lock'' | ||
- | Cum arată inline assembly? Cu C++ | ||
- | Cum arată un "race condition"? | ||
- | Instrucțiunile nu sunt atomice! | ||
- | Prefixul lock. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||