> _"Każda wystarczająco zaawansowana technologia jest nieodróżnialna od magii."_ --- Arthur C. Clarke.
Celem wykładu jest przedstawienie studentom organizacji współczesnych maszyn obliczeniowych: procesorów wielordzeniowych, kart graficznych GPGPU, akceleratorów obliczeń (sieci neuronowe, przetwarzanie genomu); oraz środków przechowywania danych: pamięci DRAM i nieulotnej pamięci półprzewodnikowej.
Zajęcia są skierowane do studentów, którzy czują niedosyt po wykładzie z _Architektur systemów komputerowych_ i _Logiki cyfrowej_, i chcą:
* zrozumieć po co w procesorze jest aż kilka miliardów tranzystorów,
* nauczyć się organizować wydajne oprogramowanie korzystające z procesorów wielordzeniowych i GPGPU,
* dowiedzieć się z czego wynikają algorytmy optymalizacji kodu maszynowego w kompilatorach,
* poznać kilka ciekawych algorytmów _online_ implementowanych w sprzęcie,
* zaprojektować własny procesor.
Wykład będzie prowadzony na podstawie materiałów [Onura Mutlu](http://people.inf.ethz.ch/omutlu/) z [ETH Zurich](https://inf.ethz.ch/department/awards-rankings/rankings.html) do wykładów [Digital Design & Computer Architecture](https://safari.ethz.ch/digitaltechnik/spring2021) i [Computer Architecture](https://safari.ethz.ch/architecture/fall2020).
**Uwagi od wykładowcy:** Będę prowadzić te zajęcia po raz pierwszy. Oznacza to, że będę się douczać, listy zadań będą niedopracowane, a organizacja zajęć będzie momentami pozostawiać wiele do życzenia. W związku z tym planuję nieco luźniejsze tempo pracy niż na pozostałych przedmiotach, które prowadzę.
Jeśli jesteś zainteresowany tematem, to obejrzyj godzinną prezentację [Indistinguishable From Magic: Manufacturing Modern Computer Chips](https://www.youtube.com/watch?v=NGFhc8R_uO4).
##### Tematy wykładów
1. Potokowe przetwarzanie instrukcji.
2. Przetwarzanie przerwań.
3. Wykonanie poza porządkiem programu (out-of-order)
4. Dataflow, wykonywanie spekulacyjne i atak Spectre.
5. Przewidywanie skoków.
6. Organizacja pamięci i atak RowHammer.
7. Kontrolery pamięci i obliczenia w modułach pamięci.
8. Polityki wymiany dla pamięci podręcznych.
9. Procesory graficzne GPU.
10. Prefetching.
11. Systemy wieloprocesorowe.
12. Synchronizacja pamięci podręcznych w SMP.
13. Organizacja sieci między rdzeniami.
14. Pamięci półprzewodnikowe dla dysków SSD.
15. Architektury do wyspecjalizowanych obliczeń.