Dydaktyka‎ > ‎

Seminarium: Architektury Systemów Komputerowych (zima 2014)

Podstawowe informacje

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

Odnośniki

Narzę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 ;-)

Należy:
  • 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ść.
Błędy:
  • 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 prelekcji

Tematy obowiązkowe

  1. [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;
  2. [Albert Kaluga] Przypomnienie potoku MIPS, integracja instrukcji wielocyklowych, przerwania. 
    Computer Architecture: A Quantitative Approach: "Pipelining: Basic and Intermediate Concepts" (rozdział dodatkowy)
  3. [Rafał Wolter] Porównanie zestawów instrukcji:
    Computer Architecture: A Quantitative Approach: "Instruction Set Principles and Examples, Survey of Instruction Set Architectures" (rozdział dodatkowy)
  4. [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)
  5. [Dawid Szczyrk] Procesory superskalarne - statyczne i dynamiczne planowanie instrukcji:
    Modern Processor Design: "Superscalar organization" (rozdział 4)
  6. [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)
  7. [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)
  8. [Mateusz Bajorski] Wykonanie dostępów do pamięci poza porządkiem programu:
    Modern Processor Design: "Memory Data Flow Techniques" (rozdział 5.3)
  9. [Ł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)
  10. [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)
  11. [Paweł Dziepak] Model pamięci w systemach wieloprocesorowych:
    Modern Processor Design: "Introduction to Multiprocessor Systems" (rozdział 11.3)
  12. [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)
  13. [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)
  14. [Filip Pacanowski] Organizacja pamięci DRAM:
    Memory systems: Cache, DRAM, Disk: "DRAM Memory System Organization" (10)

Propozycje prowadzącego

  1. Mikroarchitektura Intel P6 (lub nowsza):
    Modern Processor Design: rozdział 7
  2. [Albert Kaluga] Mikroarchitektura PowerPC 620 (lub nowsza):
    Modern Processor Design: rozdział 6
  3. 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)
  4. Architektura IBM Cell:
    Programming the Cell Processor: For Games, Graphics, and Computation
  5. [Mateusz Gołębiewski] Architektura Mill.
  6. [Adam Działak] Architektura GPGPU na podstawie NVIDIA Kepler:
    Computer Organization and Design"Graphics and Computing GPUs".
  7. [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).
  8. [Przemek Sierociński] Dyski SSD.
  9. [Rafał Łasocha] Korekcja błędów:
    Memory Systems: Cache, DRAM, Disk: "Memory Errors and Error Correction" (30)
  10. [Paweł Dziepak] Sprzętowe wsparcie dla wirtualizacji.
  11. Sprzętowa pamięć transakcyjna.
  12. [Rafał Wolter] Architektura FPGA.
  13. 32-bitowe mikrokontrolery na przykładzie STM32.
  14. Wprowadzenie do języków HDL na podstawie jednego z: SystemC, Verilog, VHDL (na podstawie www.asic-world.com).
  15. Projektowanie układów scalonych - jak przenieść układ z HDL do krzemu?

Propozycje projektów programistycznych

Propozycje prowadzącego

Jako 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.
  1. [Albert Kaluga] Szybkie dodawanie i mnożenie w HDL + weryfikacja w ModelSim.
  2. Szybkie dzielenie z resztą 32-bit przez 16-bit w HDL + weryfikacja w ModelSim.
  3. [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).
  4. [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)}
  5. 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).
  6. Zaprojektowanie potokowej / superskalarnej wersji procesora Motorola 68000 i napisanie symulatora (uwagi jak wyżej).
  7. 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).
  8. 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).
  9. 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)?
  10. Implementacja i symulacja komputera bazowanego na procesorze NIOS II w środowisku Altera Quartus:
    • Należy przejść przez kilka tutoriali i zaprezentować co się dzieje.
  11. Udział w dowolnym projekcie Open Source mającym coś wspólnego z architekturami systemów komputerowych (po uprzedniej akceptacji prowadzącego).

Propozycje studentów

  1. [Krzysztof Skrzynecki] ALU procesora 4-bitowego na przekaźnikach.
  2. [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."
    Ċ
    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