Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This is a sample Python script.
- import random
- questions = [["Architektura superskalarna:", {"Umożliwia równoległe wykonywanie kilku rozkazów w jednym procesorze":"P",
- "Wymaga zastosowania protokołu MESI":"F",
- "Wywodzi się z architektury VLIW": "F"}],
- ["Cechy architektury CISC:", {"czy występuje model wymiany danych typu pamięć - pamięć":"P",
- "jest mała liczba rozkazów":"F",
- "czy może być wykonana w VLIW":"F"}],
- ["Cechy architektury RISC:", {"czy występuje model wymiany danych typu rej-rej":"P",
- "jest mała liczba trybów adresowania":"P",
- "jest wykonywanych kilka rozkazów w jednym takcie":"P",
- "układ sterowania w postaci logiki szytej":"P",
- "jest wykonywanych kilka instrukcji procesora w jednym rozkazie asemblerowym":"F"}],
- ["Efektywne wykorzystanie równoległości na poziomie danych umożliwiają:", {"komputery wektorowe":"P",
- "komputery macierzowe": "P",
- "procesory graficzne":"P",
- " rozszerzenia SIMD procesorów superskalarnych":"P"}],
- ["Hazard danych:", {" czasami może być usunięty przez zmianę kolejności wykonania rozkazów":"P",
- "nie występuje w architekturze superskalarnej":"F",
- " jest eliminowany przez zastosowanie specjalnego bitu w kodzie programu":"F",
- "może wymagać wyczyszczenia potoku i rozpoczęcia nowej (...)":"F"}],
- ["Jak można ominąć hazard danych:", {"przez zamianę rozkazów":"P",
- " poprzez rozgałęzienia":"F",
- "poprzez uproszczenie adresowania - adresowanie bezpośrednie":"F"}],
- ["Komputery macierzowe:", {"wykonują synchroniczną operację wektorową w sieci elementów przetwarzających":"P",
- " maja w liście rozkazów m.in. rozkazy operujące na wektorach danych":"P",
- " maja macierzowe potokowe układy arytmetyczne":"F",
- "maja w typowych rozwiązaniach zestaw pełnych procesów połączonych siecią połączeń":"F"}],
- ["Komputery wektorowe:", {"posiadają w liście rozkazów m.in. rozkazy operujące na wektorach danych":"P",
- "wykorzystują od kilku do kilkunastu potokowych jednostek arytmetycznych":"P",
- " posiadają listę rozkazów operujących wyłącznie na wektorach":"F"}],
- ["Mechanizm skoków opóźnionych:", {"polega na opóźnianiu wykonywania skoku do czasu wykonania rozkazu następnego za skokiem": "P",
- "wymaga umieszczenia rozkazu NOP za rozkazem skoku lub reorganizację programu":"P",
- "wymaga wstrzymania potoku na jeden takt":"F",
- "powoduje błąd na końcu pętli":"F"}],
- ["Mechanizmy potokowe stosowane są w celu:", {"uzyskania równoległej realizacji rozkazów":"P",
- "przyspieszenia realizacji rozkazów":"P",
- "uszeregowania ciągu wykonywanych rozkazów":"F"}],
- ["Metoda przemianowania rejestrów jest stosowana w celu eliminacji:", {" zależności wyjściowej między rozkazami":"P",
- "antyzależności między rozkazami":"P",
- "błędnego przewidywania rozgałęzień":"F",
- " chybionego odwołania do pamięci podręcznej":"F",
- " prawdziwej zależności danych":"F"}],
- ["Moc obliczeniowa komputerów wektorowych:", {"jest odwrotnie proporcjonalna do długości taktu zegarowego":"P",
- "zmierza asymptotycznie do wartości maksymalnej wraz ze wzrostem długości wektora":"P",
- "zależy od liczby stopni potoku":"F",
- "jest wprost proporcjonalna do długości taktu zegarowego":"F",
- "zależy odwrotnie proporcjonalnie od liczby jednostek potokowych połączonych łańcuchowo":"F",
- "nie zależy od długości wektora":"F",
- "zależy liniowo od długości wektora":"F"}],
- ["Model SIMD:", {" jest wykorzystywany w multimedialnych rozszerzeniach współczesnych procesorów":"P",
- " zapewnia wykorzystanie tej samej operacji na wektorach argumentów":"P",
- " był wykorzystywany tylko w procesorach macierzowych":"F"}],
- ["Podstawą klasyfikacji Flynna jest:", {"Liczba strumieni rozkazów i danych w systemach komputerowych":"P"}],
- ["Problemy z potokowym wykonywaniem rozkazów skoków (rozgałęzień) mogą być wyeliminowane lub ograniczone przy pomocy:", {"tablicy historii rozgałęzień":"P",
- "wystawienia do programu rozkazów typu „nic nie rób":"P",
- "wykorzystania techniki skoków opóźniających":"P",
- "technologii MMX":"F",
- "techniki wyprzedzającego pobrania argumentu":"F"}],
- ["Procesory wektorowe:", {"Mogą być stosowane w systemach wieloprocesorowych":"P",
- "mają moc kilka razy większą od procesorów skalarnych":"P"}],
- ["Przetwarzanie potokowe:", {"daje przyspieszenie nie większe od liczby segmentów (stopni) jednostki potokowe":"P",
- "nie jest realizowane dla operacji zmiennoprzecinkowych":"F",
- "nie jest realizowane w procesorach CISC":"F",
- "w przypadku wystąpienia zależności między danymi wywołuje błąd i przerwanie wewnętrzne":"F",
- "jest realizowane tylko dla operacji zmiennoprzecinkowych":"F"}],
- ["Przetwarzanie wielowątkowe:", {"zapewnia lepsze wykorzystanie potoków":"P",
- "minimalizuje straty wynikające z chybionych odwołań do pamięci podręcznej":"P",
- "nie może być stosowane w przypadku hazardu danych":"F"}],
- ["Rozkazy wektorowe:", {"w komputerach wektorowych ich czas wykonania jest wprost proporcjonalny dodługości wektora":"P",
- "są charakterystyczne dla architektury SIMD":"P",
- "są rozkazami dwuargumentowymi i w wyniku zawsze dają wektor":"F",
- "nie mogą być wykonywane bez użycia potokowych jednostek arytmetycznych":"F"}],
- ["Rozkazy wektorowe mogą być realizowane przy wykorzystaniu:", {"Macierzy elementów przetwarzających":"P",
- "Technologii MMX":"P",
- "Potokowych jednostek arytmetycznych":"P",
- " Zestawu procesorów superskalarnych":"F",
- "Sieci połączeń typu krata":"F"}],
- ["Tablica historii rozgałęzień:", {"zawiera m.in. adresy rozkazów (?) rozgałęzień":"P",
- "pozwala zminimalizować liczbę błędnych przewidywań rozgałęzień w zagnieżdżonej... (pętli?)":"F",
- "nie może być stosowana w procesorach CISC":"F",
- "jest obsługiwana przez jądro systemu operacyjnego":"F"}],
- ["W procesorach superskalarnych:", {"jest możliwe równoległe wykonywanie kilku rozkazów w jednym procesorze(rdzeniu)":"P",
- "rozszerzenia architektury wykorzystujące model SIMD umożliwiają wykonanie rozkazów wektorowych":"P",
- "mogą wystąpić nowe formy hazardu danych: zależności wyjściowe między rozkazami oraz antyzależności":"P",
- "nie występuje prawdziwa zależność danych":"F",
- "liczba rozkazów, które procesor może wykonać w jednym takcie, zależy od liczby stopni potoku":"F",
- "liczba rozkazów pobieranych z pamięci, w każdym takcie musi przekraczać liczbę jednostek potokowych":"F"}],
- ["W tablicy historii rozgałęzień z 1 bitem historii można zastosować następujący algorytm przewidywania (?) (najbardziej złożony):", {"przewidywanie, że kolejne wykonanie rozkazu rozgałęzienia będzie przebiegało tak samo jak poprzednie":"P",
- "skok opóźniony":"F",
- "przewidywanie, że rozgałęzienie(skok warunkowy) zawsze nastąpi":"F",
- "przewidywanie, że rozgałęzienie nigdy nie nastąpi":"F",
- "wstrzymanie napełniania potoku":"F"}],
- ["Bufor zmiany kolejności (Reorder Buffer) w procesorach superskalarnych umożliwia m.in:", {"spekulatywne wykonanie rozkazów":"P",
- "zatwierdzanie wykonanych rozkazów":"P",
- "zmianę kolejności wykonania rozkazów dla uniknięcia hazardu danych":"P",
- "przewidywanie rozgałęzień":"F",
- "przełączanie wątków":"F"}],
- ["Najlepsze wykorzystanie jednostek funkcjonalnych rdzenia procesora zapewnia:", {"wielowątkowość jednoczesna (współbieżna)":"P",
- "rozdzielenie wątków pomiędzy dostępne rdzenie":"P",
- "przełączanie wątków przez system operacyjny":"P",
- "wielowątkowość drobnoziarnista":"F",
- "wielowątkowość gruboziarnista":"F"}],
- ["Przetwarzanie potokowe zapewnia m.in.:", {"zwiększenie przepustowości procesora (liczbę rozkazów wykonanych w jednostce czasu)":"P",
- "równoległe wykonywanie wielu rozkazów":"P",
- "skrócenie czasu wykonania pojedynczych rozkazów":"F",
- "zabezpieczenie przed chybieniem w dostępie do pamięci podręcznej":"F",
- "poprawę trafności przewidywania rozgałęzień":"F"}],
- ["Przemianowanie rejestrów pozwala uniknąć hazardu spowodowanego przez:", {"wystąpienie rozgałęzienia":"F",
- "zależność wyjściową":"P",
- "chybienie przy odczycie z pamięci podręcznej":"F",
- "antyzależność":"P",
- "prawdziwą zależność danych":"F"}]
- ]
- oldQuestions = []
- while len(oldQuestions) != len(questions):
- print(100 * "\n")
- question = random.choice(questions)
- if question in oldQuestions:
- continue
- oldQuestions.append(question)
- print(question[0])
- for key, value in question[1].items():
- print(key)
- answer = input("P or F: ")
- if answer.upper() == value:
- print("To jest dobra odpowiedź\n")
- else:
- print("ZŁA ODPOWIEDŹ!!!!!!\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement