Celem seminarium jest pogłębienie znajomości tematów omawianych na wykładzie “Architektury Systemów Komputerowych” oraz zapoznanie się zagadnieniami pobocznymi.
Przewiduje się, że każdy student wygłosi prelekcję na jeden z niżej wymienionych tematów:
-
elementy mikroarchitektury współczesnych procesorów:
-
techniki przewidywania skoków,
-
spekulatywne metody wykonywania instrukcji,
-
integracja translacji adresów z pamięcią podręczną,
-
obsługa przerwań,
-
sprzętowe wątki.
-
efektywna realizacja operacji arytmetyczno-logicznych (dodawanie, przesunięcia bitowe, mnożenie),
-
sprzętowe wsparcie do realizacji pamięci wirtualnej,
-
modele pamięci w systemach wieloprocesorowych,
-
elementy procesorów dla systemów wbudowanych,
-
sprzętowe wsparcie dla wirtualizacji,
-
analiza bieżących i historycznych systemów komputerowych i mikroarchitektur,
-
porównanie architektur zestawu instrukcji: CISC, RISC, VLIW,
-
architektura Mill,
-
wydajne techniki dokładnej symulacji sprzętu,
-
techniki generowania wydajnego kodu maszynowego,
-
języki opisu sprzętu i architektury.
Dodatkowo student będzie musiał wykonać pracę programistyczną polegającą na:
-
naprawieniu / modyfikacji / rozszerzeniu wybranego symulatora architektury MIPS,
-
implementacji procesora MIPS w języku Verilog / VHDL,
-
zaprogramowaniu symulatora MIPS na poziomie mikroarchitektury,
-
zbieraniu informacji dot. wykonania programu z użyciem narzędzia Pin.
Książki
- Computer Organization and Design: The Hardware / Software Interface; John L. Hennessy, David A. Patterson
- Computer Architecture: A Quantitative Approach; John L. Hennessy, David A. Patterson
- Memory Systems: Cache, DRAM, Disks; Jacob, Ng, Wang
- Digital Design and Computer Architecture; David Money Harris, Sarah L. Harris
- Modern Processor Design; John Paul Shen, Mikko H. Lipasti
- Integrated Circuit Design; Neil H. E. Weste, David Money Harris
- Rapid Prototyping of Digital Systems: A Tutorial Approach; James O. Hamblen, Michael D. Furman
OdnośnikiNarzędzia- Pin - A Dynamic Binary Instrumentation Tool
- MARS - MIPS Assembler and Runtime Simulator
- vmips - a virtual machine simulator based on a MIPS R3000 processor
- GEM5 - a modular platform for computer system architecture research
- DRAMsim2 - open source JEDEC DDRx memory system simulator
- CACTI - an integrated cache and memory access time, cycle time, area, leakage, and dynamic power model
Zasady zaliczania
Prezentacja
Prezentację należy przedstawić prowadzącemu na konsultacjach przed prelekcją. W prezentacji należy zawrzeć wszelkie odnośniki do materiałów, na podstawie których przygotowano slajdy.
W trakcie oceny prezentacji bierze się następujące czynniki:
- Zaawansowanie materiału.
- Treść prezentacji – ma być zrozumiała przy oglądaniu off-line.
- Sposób prezentacji – przygotowanie prelegenta, płynność i jasność wypowiedzi.
- Radzenie sobie na pytania z sali i od prowadzącego.
Na wygłoszenie wykładu studentowi przysługuje 45 minut. Przy bardziej wymagających tematach można łączyć się w pary.
Projekt programistyczny
W zależności od stopnia skomplikowania pracy studenci będą mogli organizować się w zespoły. Po zakończeniu projektu zespół będzie musiał zaprezentować wyniki w trakcie krótkiego wystąpienia.
Ocena końcowa
Do zdobycia będzie: - 10 punktów za prezentację (45 minut) o temacie wyznaczonym przez prowadzącego,
- 10 punktów za dowolną prezentację (45 minut) w temacie seminarium,
- pewna ilość punktów za projekt programistyczny zależna od stopnia trudności,
- nieusprawiedliwiona nieobecność to jeden punkt ujemny,
- nieuzasadnione niewywiązanie się z umówionego terminu jest warte do 10 punktów ujemnych.
Ocena będzie wyliczana na podstawie poniższej tabeli:
Ilość punktów
|
Ocena
|
>= 40
|
5.0 |
39 - 35
|
4.5
|
34 - 30
|
4.0
|
29 - 25
|
3.5
|
24 - 20
|
3.0
|
< 20
|
2.0
|
Kilka rad odnośnie prezentacji
Poniżej znajdziecie kilka rad odnośnie przygotowania prezentacji na seminarium. Dobrym pomysłem jest poszukanie na internecie informacji o tym jak nie należy robić prezentacji ;-)
- Odpowiedź sobie na pytanie: "Co chce przekazać uczestnikom seminarium?".
- Nadać prezentacji odpowiednią strukturę.
- Wymagać od uczestników interakcji.
- Przeprowadzić próbę generalną!
- Przygotować slajdy tak by osoba nie będąca na seminarium też miała szansę zrozumieć ich zawartość.
- Nieczytelne slajdy:
- za dużo wierszy na stronie,
- jasnozielony lub żółty kolor,
- małe czcionki,
- Mówienie cicho i/lub do ściany.
- Czytanie ze slajdów.
- Brak treningu.
- Nieprzestrzeganie ram czasowych.
- Slajdy z samym kodem bez żadnego opisu.
Błędy dotyczące prezentacji kawałków kodu:
- Za mała czcionka terminala z interpreterem.
- Wycinki kodu kopiowane ze slajdów lub z pliku (zamiast tego należy wczytywać z dysku).
- Złe sformatowanie kodu na slajdach (wcięcia / nawiasy) utrudniające czytanie.
- Brak opisu i zrozumienia funkcji wykorzystywanych przez kod na slajdach.
Tematy prelekcjiTematy obowiązkowe- [Mateusz Gołębiewski] Sprzętowe układy dodające i mnożące dla liczb całkowitych, szybkie przesunięcia bitowe.
Integrated Circuit Design: 10.2, 10.8, 10.9; - [Albert Kaluga] Przypomnienie potoku MIPS, integracja instrukcji wielocyklowych, przerwania.
Computer Architecture: A Quantitative Approach: "Pipelining: Basic and Intermediate Concepts" (rozdział dodatkowy) - [Rafał Wolter] Porównanie zestawów instrukcji:
Computer Architecture: A Quantitative Approach: "Instruction Set Principles and Examples, Survey of Instruction Set Architectures" (rozdział dodatkowy) - [Wiktor Janas] Zwiększanie wydajności pamięci podręcznej:
Computer Architecture: A Quantitative Approach: "Six Basic Cache Optimizations" (rozdział dodatkowy), "Eleven Advanced Optimizations of Cache Performance" (5.2) - [Dawid Szczyrk] Procesory superskalarne - statyczne i dynamiczne planowanie instrukcji:
Modern Processor Design: "Superscalar organization" (rozdział 4) - [Paweł Murias] Przewidywanie skoków:
Computer Architecture: A Quantitative Approach: "Reducing Branch Costs with Prediction" (rozdział 2.3) Modern Processor Design: "Instruction Flow Techniques" (rozdział 5.1) - [Krzysztof Skrzynecki] Wykonanie instrukcji poza porządkiem programu:
Computer Architecture: A Quantitative Approach: "Overcoming Data Hazards with Dynamic Scheduling" (2.4), "Dynamic Scheduling" (2.5), "Hardware-Based Speculation" (2.6) Modern Processor Design: "Register Data Flow Techniques" (rozdział 5.2) - [Mateusz Bajorski] Wykonanie dostępów do pamięci poza porządkiem programu:
Modern Processor Design: "Memory Data Flow Techniques" (rozdział 5.3) - [Łukasz Dobrowolski] Procesory wektorowe.
Computer Architecture: A Quantitative Approach (5th Edition): "Data Level Parallelism in Vector, SIMD, and GPU Architecture" (rozdział 4) i "Vector Processors in More Depth" (dodatek G) - [Adam Działak] Architektury EPIC i VLIW:
Computer Architecture: A Quantitative Approach: "Exploiting ILP Using Multiple Issue and Static Scheduling" (2.7), "Hardware and Software for VLIW and EPIC" (rozdział dodatkowy) - [Paweł Dziepak] Model pamięci w systemach wieloprocesorowych:
Modern Processor Design: "Introduction to Multiprocessor Systems" (rozdział 11.3) - [Przemysław Sierociński] Pamięć podręczna (materiał zaawansowany):
Memory systems: Cache, DRAM, Disk: "Logical Organization" (rozdział 2), "Management of Cache Contents" (rozdział 3), "Management of Cache Consistency" (rozdział 4) - [Rafał Łasocha] Pamięć wirtualna - alternatywne organizacje tablicy stron (PowerPC, MIPS), segmentacja + stronicowanie, ochrona i współdzielenie, homonimy i synonimy.
Memory systems: Cache, DRAM, Disk: "Virtual memory" (rozdział 31) - [Filip Pacanowski] Organizacja pamięci DRAM:
Memory systems: Cache, DRAM, Disk: "DRAM Memory System Organization" (10)
Propozycje prowadzącego- Mikroarchitektura Intel P6 (lub nowsza):
Modern Processor Design: rozdział 7 - [Albert Kaluga] Mikroarchitektura PowerPC 620 (lub nowsza):
Modern Processor Design: rozdział 6 - Sprzętowa wielowątkowość:
Computer Architecture: A Quantitative Approach (5th Edition): "Thread-Level Parallelism" (rozdział 5) Modern Processor Design: "Explicitly Multithreaded Processors" (rozdział 11.4) - Architektura IBM Cell:
Programming the Cell Processor: For Games, Graphics, and Computation - [Mateusz Gołębiewski] Architektura Mill.
- [Adam Działak] Architektura GPGPU na podstawie NVIDIA Kepler:
Computer Organization and Design: "Graphics and Computing GPUs". - [Mateusz Bajorski] Współczesne dyski twarde:
Memory Systems: Cache, DRAM, Disk: "The Physical Layer" (17), "The Data Layer" (18), "Drive Interface" (20), "The Cache Layer" (22). - [Przemek Sierociński] Dyski SSD.
- [Rafał Łasocha] Korekcja błędów:
Memory Systems: Cache, DRAM, Disk: "Memory Errors and Error Correction" (30) - [Paweł Dziepak] Sprzętowe wsparcie dla wirtualizacji.
- Sprzętowa pamięć transakcyjna.
- [Rafał Wolter] Architektura FPGA.
- 32-bitowe mikrokontrolery na przykładzie STM32.
- Wprowadzenie do języków HDL na podstawie jednego z: SystemC, Verilog, VHDL (na podstawie www.asic-world.com).
- Projektowanie układów scalonych - jak przenieść układ z HDL do krzemu?
Propozycje projektów programistycznychPropozycje prowadzącegoJako HDL (ang. Hardware Description Language) można używać Verilog lub VHDL. Do wykonania zadań bazujących na jednym z HDL-i można używać albo narzędzi firmy Altera albo Xilinx. - [Albert Kaluga] Szybkie dodawanie i mnożenie w HDL + weryfikacja w ModelSim.
- Szybkie dzielenie z resztą 32-bit przez 16-bit w HDL + weryfikacja w ModelSim.
- [Rafał Łasocha, Dawid Szczyrk] Symulator pamięci podręcznej danych:
- Korzystając z Intel Pin należy przygotować sobie narzędzie do zbierania śladów wykonania programów (przykład).
- Ślad powinien składać się z rekordów w formacie: {adres, operacja (r/w), rozmiar (1/2/4/8)}.
- Ślady być może będzie trzeba kompresować jakąś szybką metodą (LZO).
- Używając śladów jako benchmarków zasymulować (w C lub C++) wybraną organizację cache i podać skuteczność (cache hit ratio).
- [Przemysław Sierociński] Symulator predyktora skoków. Podobnie jak projekt wyżej z następującymi uwagami:
- Trzeba zbierać informacje o skokach warunkowych, skokach z niejawnym adresem (skoki pośrednie), powrotach z funkcji, wywołaniach funkcji z niejawnym adresem.
- Należy symulować BHT (ang. branch history table) i BTAC (ang. branch target address cache).
- Ślad powinien składać się z rekordów w formacie: {PC, adres docelowy, rodzaj (bc/bi/r/ci), skok wykonany (t/n)}
- Symulacja, z prostą wizualizacją, wybranych elementów procesora superskalarnego MIPS (na podstawie TX79 Core Architecture z PlayStation 2).
- Symulator ma przyjmować programy w postaci plików ELF.
- Należy zbudować sobie kompilator skrośny korzystając z narzędzia crosstool-ng.
- Należy symulować ograniczony zestaw instrukcji (brak operacji uprzywilejowanych i zmiennopozycyjnych).
- Zaprojektowanie potokowej / superskalarnej wersji procesora Motorola 68000 i napisanie symulatora (uwagi jak wyżej).
- Napisanie prostego procesora 8-bitowego (6502) w Verilogu + symulacja w ModelSim:
- Trzeba zaimplementować urządzenie wejścia-wyjścia ala terminal z klawiaturą.
- Koniecznie należy dodać jakiś RAM!
- Należy przetestować swój procesor pisząc proste programy w asemblerze (xa65).
- Rozszerzenie / naprawienie MARS (edukacyjnego symulatora procesora MIPS):
- [Rafał Wolter] Dodanie wizualizacji potoku.
- Dodanie ciekawej wtyczki wraz z przykładem użycia (propozycja studenta).
- Zaimplementowanie wybranych aspektów koprocesora systemowego CP0.
- Naprawienie wybranych bugów (do przypomnienia).
- Zbadanie symulatora VMIPS jako alternatywy dla MARS:
- Jak kompilować programy w C / Asemblerze?
- Jak śledzić ich wykonanie programów w debuggerze?
- Jak dodać urządzenia wejścia-wyjścia (np. framebuffer na SDL)?
- Implementacja i symulacja komputera bazowanego na procesorze NIOS II w środowisku Altera Quartus:
- Należy przejść przez kilka tutoriali i zaprezentować co się dzieje.
- Udział w dowolnym projekcie Open Source mającym coś wspólnego z architekturami systemów komputerowych (po uprzedniej akceptacji prowadzącego).
Propozycje studentów- [Krzysztof Skrzynecki] ALU procesora 4-bitowego na przekaźnikach.
- [Mateusz Bajorski, Filip Pacanowski] Implementacja prostego procesora MIPS w FPGA.
Terminarz zajęć
- [08.10.2014] Zajęcia organizacyjne.
- [15.10.2014]
- (01) Mateusz Gołębiewski: "Sprzętowe układy dodające i mnożące dla liczb całkowitych, szybkie przesunięcia bitowe".
- Wycieczka na wykład Jaan Tallinn - współzałożyciela Skype'a.
- [22.10.2014]
- (02) Albert Kaluga: "Przypomnienie potoku MIPS. Integracja instrukcji wielocyklowych i przerwań."
- (03) Rafał Wolter: "CISC, RISC, VLIW: Porównanie ISA procesorów"
- [29.10.2014]
- (04) Wiktor Janas: "Zwiększanie wydajności pamięci podręcznej."
- (05) Dawid Szczyrk: "Procesory superskalarne - statyczne i dynamiczne planowanie instrukcji."
- [05.11.2014]
- (06) Paweł Murias: "Przewidywanie skoków"
- (07) Krzysztof Skrzynecki: "Wykonanie instrukcji poza porządkiem programu"
- [12.11.2014]
- (08) Mateusz Bajorski: "Wykonanie dostępów do pamięci poza porządkiem programu"
- (09) Adam Działak: "Architektury EPIC i VLIW"
- [19.11.2014]
- (10) Paweł Dziepak: "Model pamięci w systemach wieloprocesorowych"
Bartłomiej Borzucki: "Sprzętowa wielowątkowość"
- [26.11.2014]
- (11) Przemysław Sierociński: "Pamięć podręczna" (materiał zaawansowany)
- (12) Rafał Łasocha: "Pamięć wirtualna" (materiał zaawansowany)
- [03.12.2014]
- (13) Filip Pacanowski: "Organizacja pamięci DRAM"
- [10.12.2014]
- (14) Łukasz Dobrowolski: "Procesory wektorowe"
- (15) Paweł Dziepak: "Sprzętowe wsparcie dla wirtualizacji"
- [17.12.2014]
- (16) Albert Kaluga: "Mikroarchitektura PowerPC 620"
- (17) Rafał Wolter: "Architektura FPGA"
- [14.01.2014]
- (18) Mateusz Gołębiewski: "Architektura Mill" (2h)
- [21.01.2014]
- (19) Paweł Dziepak: "Sprzętowa pamięć transakcyjna"
- (20) Mateusz Bajorski: "OpenRISC"
- [28.01.2014]
- (21) Adam Działak: "Architektura GPGPU na podstawie NVIDIA Kepler"
- (22) Rafał Łasocha: "Korekcja błędów"
- [04.02.2014]
- (23) Przemek Sierociński: "Dyski SSD"
- (24) Krzysztof Skrzynecki: "Jednostka centralna na przekaźnikach - studium możliwości."
|
 Updating...
Ċ Krystian Bacławski, 15 Oct 2014, 14:01
Ċ Krystian Bacławski, 23 Oct 2014, 07:58
Ċ Krystian Bacławski, 23 Oct 2014, 07:58
Ċ Krystian Bacławski, 17 Dec 2014, 02:27
Ċ Krystian Bacławski, 17 Dec 2014, 02:36
Ċ Krystian Bacławski, 19 Jan 2015, 10:07
Ċ Krystian Bacławski, 17 Dec 2014, 02:17
Ċ Krystian Bacławski, 17 Dec 2014, 02:57
Ċ Krystian Bacławski, 17 Dec 2014, 02:17
Ċ Krystian Bacławski, 17 Dec 2014, 02:17
Ċ Krystian Bacławski, 17 Dec 2014, 02:17
Ċ Krystian Bacławski, 17 Dec 2014, 02:57
Ċ Krystian Bacławski, 20 Jan 2015, 01:10
Ċ Krystian Bacławski, 17 Dec 2014, 09:34
Ċ Krystian Bacławski, 19 Jan 2015, 09:43
Ċ Krystian Bacławski, 21 Jan 2015, 09:04
Ċ Krystian Bacławski, 21 Jan 2015, 09:04
Ċ Krystian Bacławski, 2 Feb 2015, 02:56
Ċ Krystian Bacławski, 25 Feb 2015, 01:17
|