Zrównoleglenie i przetwarzanie potokowe

Podobne dokumenty
Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Dr inż. hab. Siergiej Fialko, IF-PK,

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Architektura systemów komputerowych. Przetwarzanie potokowe I

Architektura komputerów

Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Wydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Organizacja pamięci współczesnych systemów komputerowych : pojedynczy procesor wielopoziomowa pamięć podręczna pamięć wirtualna

ARCHITEKTURA PROCESORA,

Organizacja typowego mikroprocesora

Architektura potokowa RISC

Programowanie Niskopoziomowe

System pamięci. Pamięć podręczna

Procesory. Schemat budowy procesora

METODY ELIMINACJI STUDENTÓW INFORMATYKI. Czyli co student INF-EKA powinien wiedzieć o MESI...

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Budowa komputera Komputer computer computare

Logiczny model komputera i działanie procesora. Część 1.

Przetwarzanie potokowe pipelining

System pamięci. Pamięć podręczna

Architektura mikroprocesorów z rdzeniem ColdFire

Systemy operacyjne i sieci komputerowe Szymon Wilk Superkomputery 1

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

Architektura Systemów Komputerowych

Mikroprocesor Operacje wejścia / wyjścia

Architektura komputerów

Architektura systemów komputerowych. dr Artur Bartoszewski

Budowa i zasada działania komputera. dr Artur Bartoszewski

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Architektura komputerów

Mikroprocesory rodziny INTEL 80x86

Architektura Systemów Komputerowych

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

dr inż. Rafał Klaus Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia i ich zastosowań w przemyśle" POKL

Architektura komputerów

Budowa Mikrokomputera

Architektura komputerów

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Architektura komputerów

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK SP.01 Rok akad. 2011/ / 27

Struktura i funkcjonowanie komputera pamięć komputerowa, hierarchia pamięci pamięć podręczna. System operacyjny. Zarządzanie procesami

Magistrala systemowa (System Bus)

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Wydajność obliczeń a architektura procesorów

Plan wykładu. Architektura systemów komputerowych. Strategie zapisu. Cezary Bolek

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Ograniczenia efektywności systemu pamięci

System pamięci. Pamięć wirtualna

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Obliczenia Wysokiej Wydajności

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

System obliczeniowy laboratorium oraz. mnożenia macierzy

Ograniczenia efektywności systemu pamięci

architektura komputerów w. 4 Realizacja sterowania

Technika mikroprocesorowa. Linia rozwojowa procesorów firmy Intel w latach

LEKCJA TEMAT: Współczesne procesory.

Optymalizacja skalarna. Piotr Bała. Wykład wygłoszony w ICM w czercu 2000

Architektura systemów komputerowych. dr Artur Bartoszewski

Architektura systemów komputerowych. dr Artur Bartoszewski

Budowa systemów komputerowych

Energooszczędne programowanie

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Wstęp do informatyki. Architektura co to jest? Architektura Model komputera. Od układów logicznych do CPU. Automat skończony. Maszyny Turinga (1936)

Programowanie współbieżne Wykład 2. Iwona Kochańska

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

architektura komputerów w. 7 Cache

Komputer. Komputer (computer) jest to urządzenie elektroniczne służące do zbierania, przechowywania, przetwarzania i wizualizacji informacji

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Rys. 1. Podłączenie cache do procesora.

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Architektura komputerów, Informatyka, sem.iii. Rozwiązywanie konfliktów danych i sterowania w architekturze potokowej

Architektura komputerów

Podstawy Informatyki DMA - Układ bezpośredniego dostępu do pamięci

Optymalizacja kodu. Ze wszystkich metod optymalizacji kodu programowego zwrócimy uwagę na: Usunięcie (po możliwości) skoków danych.

Pamięci półprzewodnikowe w oparciu o książkę : Nowoczesne pamięci. Ptc 2013/

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Architektura systemów informatycznych

Numeryczna algebra liniowa. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

System pamięci. Pamięć wirtualna

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Procesor ma architekturę rejestrową L/S. Wskaż rozkazy spoza listy tego procesora. bgt Rx, Ry, offset nand Rx, Ry, A add Rx, #1, Rz store Rx, [Rz]

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

System pamięci. Pamięć wirtualna

Architektura systemów komputerowych

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Architektura Systemów Komputerowych

Architektura Systemów Komputerowych

Architektura Systemów Komputerowych. Architektura potokowa Klasyfikacja architektur równoległych

Pamięć wirtualna. Przygotował: Ryszard Kijaka. Wykład 4

Klasyfikacje systemów komputerowych, modele złożoności algorytmów obliczeniowych

Systemy operacyjne. Struktura i zasady budowy. Rozdział 1 Wprowadzenie do systemów komputerowych

Zarządzanie zasobami pamięci

Kto mówi? Inżynier systemów wbudowanych Linux, ARMv7, ARMv8

Transkrypt:

Zrównoleglenie i przetwarzanie potokowe Zrównoleglenie wysoka wydajność pozostaje osiągnięta w efekcie jednoczesnego wykonania różnych części zagadnienia. Przetwarzanie potokowe proces jest rozdzielony na drobne części stopni przebiegu. Każdy stopień będzie wykonany oddzielnym blokiem sprzętu. Przetwarzanie dowolnego rozkazu można rozdzielić na kilka stopni i zorganizować przekazanie danych od jednego etapu do innego. Przetwarzanie potokowe można wykorzystać dla skojarzenia etapów wykonania różnych rozkazów. Wydajność rośnie w efekcie tego, że na różnych stopniach przetwarzania potokowego jednocześnie nie są wykonane kilka rozkazów. Przykład: mamy 5 etapów wykonania operacji trwałością 50, 50, 60, 50 i 50 ns odpowiednio, a 5 ns nakład na organizacje przetwarzania potokowego. Średni czas wykonania rozkazu przy przetwarzani sekwencyjnym wynosi 260 ns, a przy przetwarzani potokowym (t sr pot ) trwałości najdłuższego taktu plus nakład na przetwarzanie potokowe 60+5 = 65 ns [t sr pot = (maksymalna trwałość etapu)*(ilość etapów)/(ilość potoków) = 65*5/5 = 65 ns]. Więc przyspieszenie wynosi 260/65 = 4 razy. Większość współczesnych procesorów używają przetwarzanie potokowe. 1

2

Typowe etapy przetwarzania typowego rozkazu: IF - obliczenie adresu rozkazu, pobranie rozkazu ID - dekodowanie rozkazu OF - obliczenie adresu operandu, pobranie operandu EX - wykonanie operacji na operandach WB - zapisanie wyniku Przykład 1 Hazardy danych: for(i=0; i<n; i++) { A[i] = 1.1* A[i]; } Potok, pobierający wartość operandu A[ ] (etap OF) na iteracji i+1, będzie wstrzymany dokąd licznik iteracji pętli i nie pozostanie inkrementowany. 3

Rozwiązanie: for(i=0; i<n; i+=2) { A[i] = 1.1* A[i]; A[i+1] = 1.1*A[i+1]; } Instrukcji w pętli są niezależne ne potoki procesora w stanie działać równoległe. Przykład 2 while(next = p[next]) { //ciało pętli next++; } Dokąd nie będzie wykonana ostatnia linia instrukcji pętli, dotąd procesor nie wie wartość zmiennej next i nie w stanie użyć prefetch. Czas wykonania tego kodu jest wyznaczony latentością układu pamięci. 4

Rozwiązanie: while(next = p[next++]) { //ciało pętli } Procesor wysyła do chipsetu zapotrzebowanie na ładowanie słowa p[next] i natychmiast inkrementuje next. Adres następnego słowa już jest wiadomy. Dalej procesor wysyła kolejne zapotrzebowanie, nie oczekując operacji w pętle (po co oczekiwać?). Dokąd procesor liczy, chipset dostarcza nową porcje danych dla kolejnej iteracji pętli. Czas ładowania w rejestr N zależnych słów wynosi T = N (T ch +T mem ), gdzie T ch latentność chipseta, T mem latentność pamięci. Czas ładowania N niezależnych słów wynosi T = N/C + T ch +T mem, gdzie C przepustowość układu pamięci. 5

Przykład 3 for(i=0; i<n; i++) { A[i] = A[i]+B[i]; //line 1 C[i] = A[i]+1.0; //line 2 A[i] = D[i]+1.0; //line 3 } Linia kodu 3 nie może być wykonana dokąd nie będzie zakończona linia 2. Inaczej A[i] będzie zmodyfikowano wcześniej od jego użycia w linii 2. Rozwiązanie: register double rrr; for(i=0; i<n; i++) { A[i] = A[i]+B[i]; //line 1 rrr = A[i]; C[i] = rrr+1.0; //line 2 A[i] = D[i]+1.0; //line 3 } 6

Wpływ różnych technik oprogramowania na szybkość wykonania algorytmu. Przykład MemTest_1: Obliczenie iloczynu skalarnego dot = X*X różnymi sposobami. Charakterystyki komputera: Procesor Intel Core 2 Quad CPU Q6600@2.40 GHz Cache - L1: 32 KB, L2:4096 KB Pamięć: DDR2 800 MHz4 GB 7

Parametry rozwijania pętli i prefetchu istotnie zależą od architektury procesora, częstości magistrali i wielu różnych czynników. 8

Prefetch pobieranie danych z wyprzedzeniem z celą ukryć zwłokę (latentność) układu pamięci. Typowy schemat bez prefetch u: for(i=0; i<n; i++) dot += X[i]*X[i]; i=0; procesor wystawia na chipset zapotrzebowanie na słowo X[0]. Chipset stawi to w kolejkę zapotrzebowań. Jak tylko opracowanie tej kolejki dojdzie do naszego zapotrzebowania, podane słowo będzie odczytane z pamięci głównej i za pomocą magistrali przesunięte do cache L2. Procesor w tym czasie wykonuje puste cykle. Odczinek czasu licząc od momentu wystawienia zapotrzebowania na chipset do umieszczenia danych w cache jest latentnością układu pamięć chipset (T ch +T mem ). i=1; Wszystko będzie powtórzone dokładnie tak, jak dla poprzedniej iteracji. Czas wykonania takiego algorytmu : T = N (T ch +T mem ) +2 N t ops N (T ch +T mem ), gdzie t ops czas wykonania jednego mnożenia lub dodawania. 9

Typowy schemat z prefetch em: for(i=0; i<n; i+=8) { //inicjujemy ładowanie następnej linii cache danych za adresem //&X[i+8] do cache L1. Przy niemożliwości ładowania cache L1 //będzie ładowany cache L2. Zakładamy, że rozmiar cache linii //dla podanego sprzętu wynosi 64 B = 8 słów double. Ten kod jest //zależny od sprzęntu. } _mm_prefetch((const char *)(&X[i+8]), _MM_HINT_T0); dot += X[i]*X[i]+X[i+1]*X[i+1] + +X[i+7]*X[i+7]; Teraz oczekiwanie procesora w skutek latentności układu pamięci odbywa się tylko przy i = 0. Dalej procesor i układ pamięci działają równoległe. Przyczyną hamowania obliczeń dla takiego kodu jest ograniczona przepustowość magistrali, a nie latentność układu pamięci. Czas wykonania takiego algorytmu: T = N/C + T ch +T mem + 2 N t ops /k N/C, gdzie C przepustowość układu pamięci, k przyspieszenie obliczeń w skutek usunięcia zaburzeń potokowego przetwarzania danych. 10

http://www.docstoc.com/docs/284306/mmcodec_amd64 11

Hierarchia pamięci 12

Przykładowe rozmiary i czasy dostępu dla różnych rodzajów pamięci: Typ pamięci rozmiar Czas dostępu, ns rejestry Kilkaset B < 1 ns podręczna (L1) kilkanaście KB Kilka ns podręczna (L2 - L3) Kilka MB Kilkanaście ns główna Kilkaset MB sto kilkadziesiąt ns Optymalne wykorzystanie pamięci podręcznej jest bardzo ważne dla wydajności programów Pamięć podręczna składa się z linij o kilku słow (32 B, 64 B, 128 B). Dane z pamięci głównej będą umieszczone w pamięci podręcznej przed umieszczeniem w rejestrach procesora. Mówimy o odwzorowaniu bloków pamięci głównej w linie pamięci podręcznej. 13

Cache-konflikty Przy czytaniu danych (słowo, bajt) procesor najpierw sprawdza stan swojej pamięci podręcznej. Jeśli te dane są w pamięci podręcznej (read hit trafienie), oni będą umieszczone w rejestry procesora. Jeśli tych danych (słowa, bajta) niema w pamięci podręcznej (read miss chybienie), będzie przeładowana cała linia pamięci podręcznej. Przy pobraniu tych danych (bajta, słowa) z pamięci głównej będą pobrane nie tylko to słowo, bajt, a i bajty sąsiednie tak, żeby wypełnić całą linie pamięci podręcznej. W zależności od typu procesora cache-linii mają 32 B, 64 B, 128 B,... Dane, które będą umieszczone w kache-linie, muszą być wyrównane po granicach, wielokrotnych 32 B, 64 B, 128 B odpowiednio. Ideologia cache-linij polega na tym, że zadania najczęściej pracują ze zbiorem sąsiednich słów (bajtów), więc przy odczycie tych słów (bajtów) często wynika stan read hit, i procesor pobiera te dane w rejestry z cachelinii, a nie przez wolny kanał magistral pamięć główna. 14

Przecież cache-linii istotnie komplikują odnowienie pamięci w środowisku wieloprocesorowym z pamięcią wspólną Przykład 1. Procesor P0 odczytuje słowo 0, a również i słowa sąsiedni w swój cache 2. Procesor P1 odczytuje słowo 1, a również i słowa sąsiedni w swój cache, przy czym słowo 0 procesora P0 w skutek wyrównania po granicach, wielokrotnych rozmiary cache-linii, znajduje się w cache-linii procesora P1 też. 3. Procesor P0 modyfikuje słowo 0 i umieszcza ten wynik w swój cache. Wartość tego słowa w pamięci głównej na razie pozostaje bez zmian. 4. Procesor P1 nic nie wie o tym, że zawartość słowa 1 podległa zmianie. Teraz wartość słowa 0 zależy od tego, cache którego procesora będzie wyładowany w pamięć główną później. 15

Procesor P0 odczytuje słowo 0, a również i słowa sąsiedni w swój cache 16

Procesor P1 odczytuje słowo 1, a również i słowa sąsiedni w swój cache, przy czym słowo 0 procesora P0 17

Procesor P0 modyfikuje słowo 0 i umieszcza ten wynik w swój cache. Wartość tego słowa w pamięci głównej na razie pozostaje bez zmian. 18

Procesor P1 nic nie wie o tym, że zawartość słowa 1 podległa zmianie. Teraz wartość słowa 0 zależy od tego, cache którego procesora będzie wyładowany w pamięć główną później. 19

Taki scenariusz był by katastrofą. Producenci sprzętu komputerowego bardzo dobrze wiedzą o tym, i dla tego rzeczywisty komputer nigdy tak nie działa. 1. Procesor P0 odczytuje słowo 0, a również i słowa sąsiedni w swój cache 2. Procesor P1 odczytuje słowo 1, a również i słowa sąsiedni w swój cache, przy czym słowo 0 procesora P0 w skutek wyrównania po granicach, wielokrotnych rozmiary cache-linii, znajduje się w cache-linii procesora P1 też. 3. Procesor P0 modyfikuje słowo 0 i umieszcza ten wynik w swój cache. Wartość tego słowa w pamięci głównej na razie pozostaje bez zmian, ale procesor P1 w skutek snooping'u zgłasza zawartość swojego cache unieważnioną. 4. Procesor P0 wyładuje zawartość swojego cache w pamięć główną, a procesor P1 ponownie załadowuje swoją cache-linie. Teraz dane w pamięci głównej i w cache-liniach procesorów P0, P1 są spójne (koherentne). Przecież płacą za tą spójność nadliczbowe przeładowania cache-linij procesorów P0, P1. 20

Procesor P0 odczytuje słowo 0, a również i słowa sąsiedni w swój cache 21

Procesor P1 odczytuje słowo 1, a również i słowa sąsiedni w swój cache, przy czym słowo 0 procesora P0 22

Procesor P0 modyfikuje słowo 0 i umieszcza ten wynik w swój cache. Wartość tego słowa w pamięci głównej na razie pozostaje bez zmian, ale procesor P1 w skutek snooping'u zgłasza zawartość swojego cache unieważnioną. 23

Procesor P0 wyładuje zawartość swojego cache w pamięć główną, a procesor P1 ponownie załadowuje swoją cache-linie. Teraz dane w pamięci głównej i w cache-liniach procesorów P0, P1 są spójne (koherentne). 24

To się okazuje, że obecność pamięci podręcznej, przeznaczonej dla przyspieszenia obliczeń wskutek zmniejszenia ilości odczytów-zapisów bezpośrednich z /w pamięć(i) głównej, może stać przyczyną istotnego zmniejszenia wydajności obliczeń, jeśli dane nie będą wyrównane z uwzględnieniem podanej powyżej specyfiku pracy z cache-liniami. To leży na programiście. Środki, które zapobiegają wyniknięciu cache-konfliktów: wyrównanie rozmieszczenia danych w pamięci głównej tak, żeby różne procesory mieli dostęp do różnych adresów pamięci, rozdzielonej przynajmniej granicą cache-linii Rozdzielenie danych tylko dla odczytu od danych dla odczytu i zapisu Użycie pamięci lokalnej dla każdego potoku UWAGA! Cache-konflikty powstają dla architektury ze wspólną pamięcią. Dla architektury z pamięcią rozproszoną każdy procesor odczytuje-zapisuje dane, pobierane z pamięci lokalnej cache konflikty nie występują. 25