This shows you the differences between two versions of the page.
iocla:cursuri:curs-16_17 [2019/12/31 20:21] razvan.deaconescu |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Curs 16 - 17: Optimizări ====== | ||
- | <html> | ||
- | <iframe src="https://ctipub-my.sharepoint.com/personal/dragos_niculescu_upb_ro/_layouts/15/Doc.aspx?sourcedoc={3191d1ae-dca1-4027-a96e-c94e791e7be1}&action=embedview&wdAr=1.3333333333333333" width="722px" height="565px" frameborder="0">This is an embedded <a target="_blank" href="https://office.com">Microsoft Office</a> presentation, powered by <a target="_blank" href="https://office.com/webapps">Office</a>.</iframe> | ||
- | </html> | ||
- | |||
- | * [[https://ctipub-my.sharepoint.com/:p:/g/personal/dragos_niculescu_upb_ro/Ea7RkTGh3CdAqW7JTnkee-EBsaTLWwMQz6TymVUuPpZ69Q?e=ekuw2W|Curs 16 - 17: Optimizari (PPT)]] | ||
- | |||
- | * 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 ===== | ||
- | |||
- | Demo-urile se găsesc în [[https://github.com/iocla/demo|repository]]. Pentru a clona și accesa repository-ul folosiți comenzile: | ||
- | <code> | ||
- | git clone https://github.com/iocla/demo iocla-demo.git | ||
- | cd iocla-demo.git/ | ||
- | </code> | ||
- | |||
- | Apoi accesați directorul ''curs-16/'' sau ''curs-17/'' folosind, respectiv, în directorul repository-ului (''iocla-demo.git/'') comenzile: | ||
- | <code> | ||
- | cd curs-16/ | ||
- | |||
- | cd curs-17/ | ||
- | </code> | ||
- | |||
- | Acum putem parcurge secțiunile cu demo-uri de mai jos. | ||
- | |||
- | ==== Demo ==== | ||
- | |||
- | ''cat /proc/cpuinfo | grep Hz'' | ||
- | |||
- | În directorul ''curs-16/'' rulăm: | ||
- | * ''make'': pentru compilarea executabilelor | ||
- | * ''./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. |