Obliczenia równolegle w architekturze SMP
|
|
- Andrzej Stefański
- 7 lat temu
- Przeglądów:
Transkrypt
1 Obliczenia równolegle w architekturze SMP Przykład: przeglądanie stron internetowych przez browser zajmuje dość sporo czasu. Sposoby przyspieszenia: o przewidujemy, który strony będą następnymi, i przygotujemy zadanie na pobieranie z wyprzedzeniem(prefetching) o uruchamiamy kilka przeglądarek jednocześnie, i dokąd jedna strona się ładuje, pracujemy z inną stroną(multithreading) Multithreading jest używany dla ukrycia zwłoki (hiding of latency). Rozważymy przykład: użytkownik drukuje duży dokument. W trybie jednowątkowym CPU będzie czekał na następne zadanie dokąd drukowanie się nie skończy. W trybie wielowątkowym można stworzyć osobny wątek, który weźmie na siebie drukowanie dokumentu, a CPU może się przełączyć do wykonania innego zadania. Analogiczna sytuacje powstaje przy zapisu/ odczycie na/z dysk(u) dużego pliku. 1
2 Wielowątkowość może być zrealizowana na podstawie bibliotek wielowątkowych ( Win 32 platform SDK, Posix Thread library) lub na podstawie dyrektyw kompilatora (OpenMP). Oprogramowanie na podstawie bibliotek wielowątkowych wymaga od programisty ręcznie tworzyć potoki, rzutować na potoki zadania równoległe, wprowadzić synchronizacje na dolnym poziomie, jawnie wyznaczać klasy pamięci dla danych (stack potoku, Thread Local Storage, ), łączyć potoki do fizycznych procesorów, zawieszać potoki, obudzać potoki, zmieniać priorytet potoków, zniszczać potoki i wielu innych rzeczy. Taki sposób oprogramowania nadaje możliwość pisać elastyczne, wysoko wydajne kody. Z innej strony bezpośrednie zastosowanie bibliotek wielowątkowych istotnie komplikuje kod programu w stosunku do programu sekwencyjnego. Zadania równoległe muszą być umieszczoną w funkcje potoków, które będą rzutowane na potoki. Trzeba przygotowywać specjalne struktury danych dla przekazania danych funkcjom potoku. 2
3 Oprogramowanie równoległe na podstawie dyrektyw kompilatora (OpenMP) nadaje możliwość ukryć wielu szczegółów i uniknąć w taki sposób komplikacji kodu, który są niezbędne przy użyci oprogramowania jawnego (na podstawie bibliotek wielowątkowych). Dyrektywy kompilatora robią kod przenośnym na różne systemy operacyjne, a jeśli kompilator nie wspiera OpenMP, to po prostu te dyrektywy pozostają pominięte. 3
4 OpenMP nie nadaje możliwości zmieniać priorytet potoków, przyklejać potoki do procesorów fizycznych. OpenMP jest modelem wielowątkowym, który nadaje możliwość zrealizować tylko połączenie widłowe (fork-joint) pomiędzy potokami typu master-worker. To oznacza, że zakres zastosowania OpenMP jest ograniczony w stosunku do jawnego oprogramowania wielowątkowego. Typy zrównoleglenia: zrównoleglenie funkcjonalne (zrównoleglenie zadań) - różne potoki wykonują różne rozkazy, algorytmy, zadania, i zrównoleglenie danych- różne potoki wykonują ten samy fragment kodu zestaw rozkazów. Typowym przykładem zrównoleglenia zadań jest procesor tekstowy. Takie zadania, jak sprawdzenie pisowni, zapis czas od czasu, wydrukowanie dokumentu nie przerywają wprowadzenia nowych symbolów z klawiatury i nie przeszkadzają ich wyświetlaniu na monitorze, więc mogą być zrealizowane jako niezależne zadania funkcjonalne na podstawie wielowątkowości. Dla takich celów zastosowują oprogramowanie na podstawie bibliotek wielowątkowych. Drygi typowy przykład zrównoleglenia zadań dwa potoki, jeden z których interfejsowy, a drugi roboczy(obliczeniowy), wykonują te same zadanie. 4
5 Zrównoleglenie danych: ten samy algorytm (zestaw rozkazów) jest wykonany dla różnych danych. Na przykład: o obliczenie iloczynu skalarnego: N (ip + 1) np 1 np T a = = xi yi ip= 0 N i = ip np x y gdzie ip= numer potoku, np ilość potoków ( x x x ) x y 0 y1 = x y0 + x1y 1 + x2y2 + x y 2 y 3 0 3y3 5
6 o całkowanie numeryczne: N ( ip + 1 ) b np 1 np f ( xi ) + f ( xi+ 1) c = f ( x) dx x a ip= 0 N 2 i= ip np o mnożenie macierzy przez wektor i. Zadania, który polegają na zrównolegleni danych, można rozwiązywać na podstawie OpenMP, a również, na podstawie bibliotek wielowątkowych 6
7 Prawo Amdahl a podstawa teoretyczna dla wyznaczenia górnej granicy wydajności algorytmów równoległych przy zrównolegleni danych. Zakładamy, że w podanym algorytmie część operacji nad danymi pozostała wykonana w trybie sekwencyjnym, a część w trybie równoległym: T total czas wykonania algorytmu w trybie sekwencyjnym; T parallel - czas wykonania algorytmu przy zastosowaniu zrównoleglenia; P T Parallel = + np ( 1 P) + Ttotal Onp P cześć instrukcji, które są wykonane w trybie równoległym 0 P 1 n p ilość procesorów O np wytarty na zrównoleglenie 7
8 Jeśli pominąć nakładem na zrównoleglenie O np, to S = T T total Parallel = 1 ( 1 P) + P n p Faktor S (speed up) wskazuje, jak rośnie przyspieszenie obliczeń przy zwiększeniu ilości procesorów. Prawo Amdalh a ustawia górną (teoretyczną) granice przyspieszenia dla danego algorytmu przy podanej ilości procesorów. Jeśli przyjąć n p, dostaniemy największe możliwe przyspieszenie dla danego algorytmu Prawo Amdalh a oszacowuje teoretyczną granice przyspieszenia dla danego algorytmu wychodząc z samego algorytmu. Osobliwości pracy sprzętu nie są wzięte pod uwagę. (dot = X T *Y) 8
9 S inf = T T total Parallel = 1 ( 1 P) Przykład: dola instrukcji sekwencyjnych w algorytmie wynosi 15%. P = 0.85; Przyspieszenie tego algorytmu nie może przekroczyć
10 Rozdrobnienie (granularity) jakościowa miara stosunku obliczeń do komunikacji o grube rozdrobienie (coarse granularity) znaczna część roboty obliczeniowej jest wykonana pomiędzy zdarzeniami komunikacyjnymi o drobne rozdrobienie (fine granularity) odnośnie niewielka część roboty obliczeniowej jest wykonana pomiędzy zdarzeniami komunikacyjnymi Projektowanie aplikacji wielowątkowych składa się z o rozdzielenia zadania na tyle drobnych zadań równoległych, ile to jest możliwe (partitioning). Jedną z celów tu jest zabezpieczenie zrównoważonego obciążenia potoków (load balance) czym drobniej podział, tym łatwiej to osiągnąć. Z drugiej strony zbyt drobny podział powoduje duże narzuty OS na tworzenie i obsługę potoków. Dla tego często preferują odnośnie grube drobienie (coarse granularity). o projektowanie komunikacji z punktu widzenia danych i synchronizacji o Rozważanie wydajności algorytmu 10
11 Przykład: metodę iteracyjną dla rozwiązania układu równań liniowych algebraicznych. Stan danych na kroku iteracyjnym k+1 zależy od stany na krokach poprzednich więc zrównolegleniu podlegają tylko funkcje, które działają na oddzielnym kroku. Dalej powstaje pytanie: ile przyjąć potoków? Od tego zależy grubość rozdrobienia. Jeśli czas przetworzenia jednej porcji danych jest mniej od narzutu, który system operacyjny wytraca na tworzenie i obsługę potoku, zwiększenie ilości potoków będzie powodowało spad wydajności. To jest przykład zbyt drobnego rozdrobienia (too fine granularity). Tworzenie potoków wymaga pewnego narzutu czasy dla OS Windows tworzenie potoku zgrubnie jest równoważnym ~1000 dzieleni liczb całych (int). OS musi również obsługiwać i planować potoki, wykonywać context switching. To wymaga nakładu pracy systemu operacyjnego dla tego program równoległy powinien być dobrze projektowany, żeby minimalizować narzuty OS, który ograniczają skalowalność systemu obliczeniowego. 11
12 Zrównoważenie obciążenia potoków (loading balance) jest bardzo ważne dla osiągnięcia wysokiej wydajności. Głównym celom tu jest minimalizacje czasu idle dla każdego potoku. Przyczyny idle są różne pobieranie danych z pamięci, I\O, oczekiwanie na jakieś zdarzenie, lock przy synchronizacji,. Trzeba minimalizować idle czas (jałowy) dla każdego potoku (nakładanie (overlapping, asynchronic) I/O, pobieranie danych z pamięci z wyprzedzeniem (prefetching), uporządkowanie pobierania danych dla ułatwienia użycia pamięci podręcznej (usunięcie skoków, ),. 12
13 Dla zabezpieczenia poprawności danych globalnych jest koniecznie użycie synchronizacji. Przecież synchronizacja istotnie zmniejsza wydajność kodu i jego zdolność do przyspieszenia przy zwiększeniu ilości procesorów (speed up). Projektujemy algorytm tak, żeby minimalizować synchronizacje o Używamy dane lokalne potoku o Dla dynamicznej alokacji pamięci Thread Local Storage (TLS) o Dla synchronizacji w architekturze SMP sekcje krytyczne. o Spin-blocking: BOOL InitalizeCriticalSectionAndSpinCount( PCRITICAL_SECTION pcs, DWORD dwspincount); DWORD SetCriticalSectionSpinCount( PCRITICAL_SECTION pcs, DWORD dwspincount); Jeśli mamy tylko jeden procesor, to dwspincount = 0 (domyślnie) o Non-blocking:.. while(!tryentercriticalsection(&cs)) { //do something } //start of critical section block my_shared_objekt =.. LeaveCritical section(&cs); 13
14 Kiedy potok próbuje wstąpić w obszar, kontrolowany przez sekcją krytyczną, która jest zajęta innym potokiem, OS przeprowadza potok z trybu użytkownika (user mode) do trybu jądra (kernel mode) potok przechodzi w stan oczekiwania. Procesor na to wytraca ~1000 taktów to dość wysoka cena. Na komputerach wieloprocesorowych często się zdarza, że resurs, blokowany sekcją krytyczną, pozostanie zwolniony wcześniej, niż potok będzie przeprowadzony w tryb jądra, i inny procesor odnowi wykonanie tego potoku. Przecież wielu taktów procesorów było wytracone na przeprowadzenie potoku w tryb jądra i odwrotnie w tryb użytkownika. Dla tego i wymyślili spin-blokowanie jest to skutecznie, jeśli wspólny resurs pozostaje blokowany w ciągu krótkiego odcinku czasu, który jest rzędu przeprowadzenia potoku w tryb jądra i odwrotnie. Drugi sposób zmniejszyć narzuty, związane z sekcjami krytycznymi używać non-blocking funkcje TryEnterCriticalSection, która nie przeprowadza potok w tryb jądra, jeśli resurs jest zajęty, a nadaje możliwość wykonać korzystną robotę. 14
15 Sterowanie pamięcią Dynamiczne alokowanie pamięci w stosie procesu jest kosztowna procedura, która wymaga synchronizacji potoków przy dostępie do wspólnego resursu heap. Wywołanie PVOID HeapAlloc( HANDLE hheap, DWORD fdwflags, SIZE_T dwbytes); z flagą!= HEAP_NO_SERIALIZE powoduje dostęp do heap tylko jednego potoku w trakcie alokowania dynamicznego. Inne potoki, jeśli też mają wydzielić pamięć w tym samym heap, będą czekali dokąd d pierwszy potok nie skończy wydzielenia pamięci. Dla tego,żeby uniknąć synchronizacji i przyspieszyć alokowanie pamięci dynamicznej, można dla każdego potoku stworzyć swój własny stos z flagą HEAP_NO_SERIALIZE : HANDLE HeapCreate(HEAP_NO_SERIALIZE, 0, 0); Jeśli HANDLE tego stosu przechowywać w pamięci lokalnej potoku (TLS Thread Local Storage), ten stos można używać dla dynamicznego wydzielenia i zwolnienia pamięci danego potoku. 15
16 Najbardziej sensownym jest umieszczenie tej procedury w DLL: static DWORD tls_key; BOOL APIENTRY DllMain( HMODULE hmodule, DWORD ul_reason_for_call, LPVOID lpreserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: if((tls_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) { cout << " TlsAlloc problem during dll_process_attach\n"; } if(!tlssetvalue(tls_key, GetProcessHeap())) { cout << "TlsSetValue problem during dll_process_attach\n"; } break; case DLL_THREAD_ATTACH: if(!tlssetvalue(tls_key, HeapCreate(HEAP_NO_SERIALIZE, 0, 0))) { cout << "TlsSetValue problem during dll_thread_attach\n"; } break; case DLL_THREAD_DETACH: HeapDestroy(TlsGetValue(tls_key)); break; case DLL_PROCESS_DETACH: TlsFree(tls_key); break; } return TRUE; } 16
17 declspec (dllexport) void * thr_malloc(size_t n) { return HeapAlloc(TlsGetValue(tls_key), 0, n); } declspec (dllexport) void thr_free(void *ptr) { return HeapFree(TlsGetValue(tls_key), 0, ptr); } Tu każdy potok używa TLS dla przechowywania HANDLE do swojego własnego heap u nie powstaje problemu wspólnego resursu (heap) dla różnych potoków. Pamięć lokalna potoku Thread Local Storage Zmienne statyczne i globalne są wspólne dla każdego potoku danego procesu. TLS nadaje możliwość stworzyć dla każdego potoku unikalne dane, do których proces może mięć dostęp, używając indeks globalny. Jeden potok alokuje indeks, który może być użyty innym potokiem dla dostępu do unikalnych danych, związanych z pierwszym potokiem. Kiedy potoki są tworzone, OS alokuje tablice typu LPVOID dla TLS indeksów i inicjuje ją jako NULL. Przed tym, jak użyć indeks, on powinien być alokowany jednym z potoków przez wywołanie funkcji TlsAlloc(). 17
18 Każdy potok przechowuje swoje dane, które odpowiadają TLS indeksowi, w TLS Slot. Dane, związane z TLS indeksem, muszą być rzutowane do typu LPVOID, i wtedy można bezpośrednio umieścić ich w TLS Slot. 18
19 W tym przykładzie proces ma dwa potoki, Thread1, Thread2, i alokuje 2 indeksy dla użycia w TLS, gdwtlsindex1 i gdwtlsindex2. Każdy potok alokuje dwa bloki pamięci (jeden blok dla każdego indeksu), w których przechowuje dane, a wskaźniki do tych bloków zapisuje w odpowiedni TLS Sloty. Żeby się dostać do danych, związanych z indeksem, potok pobiera wskaźnik do bloku pamięci z TLS Slotu, i przypisuje jego wartość do zmiennej lokalnej lpvdata. Spojrzeć jeszcze raz kod wydzielenia pamięci w DLL (przykład ParMV) 19
20 Thread 1 TLS Process Global Data tls_key 1. wątek 1 procesu alokuje TLS indeks w tablice TLS wydziela pozycje: tls_key = TlsAlloc(); Zmienna globalna tls_key dostaje numer elementu w tablice (tls_key = 2) Thread 1 TLS Process Thread 2 TLS Global Data tls_key 2. Powstaje wątek 2. On ma swój własny slot TLS, przecież numery elementów aktualnych w tym slocie są takie same 20
21 Thread 1 TLS heap1 Process Thread 2 TLS Global Data tls_key 3. Wątek 1 łączy element TLS tablicy o numerze tls_key z HANDLE heap_1: TlsSetValue(tls_key, HANDLE heap_1) Process Thread 1 Thread 2 TLS heap1 TLS heap2 Global Data tls_key 4. Wątek 2 łączy element TLS tablicy o numerze tls_key z HANDLE heap_2: TlsSetValue(tls_key, HANDLE heap_2) Teraz w każdym wątku mamy dostęp do swojego własnego heap przez zmienną globalną tls_key: HANDLE heap_1 = TlsGetValue(tls_key); HANDLE heap_2 = TlsGetValue(tls_key); Każdy wątek pobiera element swojej własnej tablicy TLS o numerze tls_key i dla tego dostaje dostęp do swojego własnego heap. 21
22 Thread 1 TLS 0 Process Thread 2 TLS 0 Global Data 5. Przed zakończeniem pracy każdy wątek niszczy swój własny heap: tls_key HeapDestroy(TlsGetValue(tls_key)); Thread 1 TLS Process Global Data tls_key 6. Przy zakończeniu pracy wątek 1 niszczy swoje resursy, a również i slot TLS: 22
23 Thread 1 TLS Process Global Data tls_key 7. Wątek 1 zwalnia element tablicy TLS o numerze tls_key ustawia ten element na NULL: TlsFree(tls_key); Teraz ten element slotu TLS może być użyty dla innych celów. Wielu algorytmów przypuszcza usunięcie synchronizacji, jeśli użyć TLS zamiast danych wspólnych (shared data). To może istotnie zmniejszyć narzut i podnieść wydajność algorytmu. Przy użyci TLS dane mogą się pozostać w pamięci podręcznej procesorów znacznie dłuższej od przypadku, kiedy są używane dane wspólne, jeśli procesory nie mają wspólnej pamięci podręcznej. 23
24 Dane wspólne przy modyfikacji i zapisu jednym z procesorów powodują zgłoszenia o niepoprawności (invalidation) pamięci podręcznej innych procesorów powstaje przeładowanie cache - linii. Przy użyci TLS taka sytuacja jest wykluczoną TLS data mogą być umieszczone w pamięci podręcznej tylko jednego procesora. Osobliwości Hyper-Threading u (procesory Intel). Hyper-Threading taka technologia, kiedy dwa logicznych procesory rozdzielają pomiędzy sobą jeden cache L1. Częsty dostęp do adresów pamięci wirtualnej, nie rozdzielonych wartością 64 KB, może powodować istotny spad wydajności. Stack potoku zwykłe nie jest wyrównany po granicach 64 KB, i jeśli w tym samym cache znajdują się stack i dwóch potoków, przyczyna cachekonfliktów jest oczywistą - steki dwóch potoków będą mieli wspólną stronę pamięci o rozmiarze 64 KB. Rozmiar 64 KB zależy od typu procesora. Jednym ze sposobów, który nadaje możliwość poprawić sytuacje, jest wprowadzenie stack offsets, które w sposób sztuczny rozdzielają przestrzeń adresową pomiędzy danymi każdego potoku. Szczegóły są podane w podręczniku użytkownika korporacji Intel: Developing Multithreaded Applications: A Platform Consistent Approach. 24
25 Przykład: obliczenie iloczynu skalarnego: dot_prod = X T *Y Rozdzielenie danych pomiędzy wątkami: Coarse granularity X Y o Ilość podziałów danych jest taka sama, jak ilość procesorów. Zabezpiecza load balance (zrównoważenie pomiędzy wątkami). o Narzut OS na tworzenie i planowanie wątków jest minimalny. Związek komunikacyjny pomiędzy wątkami jest słaby. Synchronizacja na poziomie sygnałów przy zakończeni wątków. Operacje reduction (sumowanie wyników działania każdego wątku po ich zakończeniu sekwencyjna część kodu) minimalne. o Dane w pamięci dla każdego wątku są umieszczone ciągłe brak skoków danych, minimalna ilość przeładowań pamięci podręcznej 25
26 Coarse granularity X Y o Ilość podziałów danych istotnie większa od ilości procesorów. Zabezpiecza load balance (zrównoważenie pomiędzy potokami). Ilość potoków jest taka sama jak ilość procesorów. o Narzut OS na tworzenie i planowanie potoków jest minimalny. Synchronizacja na poziomie sygnałów przy zakończeni potoków. Operacje reduction (sumowanie wyników działania każdego potoku po ich zakończeniu sekwencyjna część kodu) minimalne. Tu zakładamy, że potoki nie będą komunikowali pomiędzy sobą przy przejściu od jednego podziału danych do innego dla tego i coarse granularity. o Dane dla każdego potoku są pobierane ze skokami częste przeładowanie pamięci podręcznej - powoduje drastyczny spad wydajności 26
27 Fine granularity X Y o Ilość podziałów danych istotnie większa od ilości procesorów. Zabezpiecza load balance (zrównoważenie pomiędzy potokami). Ilość potoków jest taka sama jak ilość podziałów danych. o Narzut OS na tworzenie i planowanie potoków jest duży. Synchronizacja na poziomie sygnałów przy zakończeni potoków. Operacje reduction (sumowanie wyników działania każdego potoku po ich zakończeniu sekwencyjna część kodu) duże. o Dane dla każdego potoku są pobierane ciągłe, przecież stack każdego potoku jest lokalny tworzenie nowego potoku powoduje umieszczenie jego stack u w pamięci głównej i ładowanie w pamięć podręczną - powoduje drastyczny spad wydajności. 27
28 Wybieramy pierwszy schemat podziału danych: X Y Schemat blokowy algorytmu: - potok pierwotny - potoki potomne Wprowadzenie danych (N, np), alokacja pamięci, wypełnienie X, Y inicjowanie pomiarów czasu do ip=0, np-1 ip numer potoku, np ilość procesorów enddo Wypełnienie struktury danych, przekazywanych potokowi ip Tworzenie potoku ip ip=0: r0 =X T 0*Y 0 ip=1: r1 = X T 1*Y 1 ip=2: r2= X T 2*Y 2 ip=3: r3 = X T 3*Y 3 WaitWorMultipleObjects( ) Reduction: dot_prod = r0+r1+r2+r3 Pomiar czasu 28
29 Uwagi: Tablicy X, Y w obszarze każdego potoku potomnego są tylko do odczytu tablicy można bez problemów rozdzielić pomiędzy potokami adres_local_x = adres_x[ip*local_n], gdzie local_n = N/np. Przy dostępie do elementów tablicy w obszarze każdego potoku synchronizacja nie potrzebna (indeksy elementów tablicy dane lokalne potoku) Cache-konfliktów nie powstaje dane są tylko do odczytu Wynik działania każdego potoku r ip = X T ip*y ip definiujemy jako zmienną lokalną potoku, a po obliczeni wartość r ip przypisujemy do pola struktury danych, przekazywanych potokowi ip: r = 0.0; for(i=0; i<local_n; i++) r += X[i]*Y[i]; dane_ptoku_ip->wynik_potoku = r; 29
30 Synchronizacja: pierwotny potok jest zawieszony dokąd potoki potomne nie skończą swojej pracy. Każdy potok potomny działa niezależnie speed up algorytmu jest ograniczony tylko przepustowością magistrali-pamięci głównej Przykład DotProd, OMP_DotProd Wyniki numeryczne Dane sprzętu: Procesor Intel Core 2 Quad CPU GHz 4 procesory Cache 4xL1: 32 KB (code), 4xL1: 32 KB (data), 2xL2:4096 KB Pamięć: DDR2 800 MHz 4 GB Dla wiarygodności pomiarów czasu pozostała wprowadzona powtarzalność obliczeń na poziomie każdego potoku potomnego (tylko w obszarze równoległej części kodu): 30
31 for(it=0; it<ptrdat->ntimes; it++) //powtarzamy mnożenie ntimes razy { rrr = 0.0; for(i=0; i<loc_n; i++) { rrr += X_loc[i]*Y_loc[i]; } ptrdat->res = rrr; } Przedstawiamy wyniki wersji release (/O2) Sp=T1/Tp Real Ideal Rozmiar wektorów N= , ntimes = Speed up jest idealny p 31
32 Sp=T1/Tp real Rozmiar wektorów N= , ntimes = ideal Speed up jest bardzo słaby p Ilość operacji zmiennoprzecinkowych w tych dwóch przykładach jest taka sama 2 x N x ntimes = 2x W pierwszym przykładzie rozmiar tablic X, Y wynosił 1.53 MB, co się mieści w L2 podanego komputera. Dla tego, że przedstawiony algorytm nie wymaga przeładowania cache linii przy powtarzani mnożenia, wydajność i speed up są wysokie W drygiem przykładzie rozmiar tablic X, Y wynosił MB. W trakcie mnożenia linie cache L2 pozostają wielokrotnie przeładowane, co drastycznie zmniejsza wydajność 32
33 Debug wersia, Sp=T1/Tp real Rozmiar wektorów N= , ntimes = ideal Speed up jest istotnie lepszy niż w wersji release p Wydajność algorytmu przy różnych rozmiarach tablic X, Y, MFLOPS Ilość procesorów, np x x 100 release x 100 debug 33
34 Obliczenia na różnych komputerach AMD Phenom II x GHz; L1: 4x64 KB L2: 4x512 KB L3: 6 MB Memory: DDR3 669 MHz 8 GB, OS: Windows Vista x64 Test dotprod = X*Y (N = ntimes = 50 ia32) Proc QuadCore(2.4 GHz) I7 (3.2 GHz) AMD Phenom IIx4 995 Time, ms Sp=T 1 /T p Time, ms Sp=T 1 /T p Time, ms Sp=T 1 /T p
35 dot=x*y, Przyspieszenie czasu obliczeń przy zwiększeniu ilości wątków dla różnych komputerów 4 3 Sp p=t1/tp 2 1 ideal QuadCore/DDR2 AMD/DDR P 35
36 Współczynnik wydajności q = f/m (f ilość operacji arytmetycznych, m ilość przesyłek danych) dla podanego algorytmu wynosi 1. To oznacza, że na każdą przesyłkę danych wypada jedna operacja arytmetyczna. Założymy, że trwałość jednej operacji arytmetycznej wynosi 1 ns, a trwałość przesyłki jednego słowa double 100 ns. To oznacza, że 99 ns procesor będzie czekał następnej przesyłki danych. Teraz zwiększamy ilość procesorów do 2 - za 1 cykl każdego procesora będzie wykonywana 1 operacja arytmetyczna razem 2 operacji arytmetyczne. Magistral musi obsłużyć 2 procesora i przesłać 2 kolejne słowa double. Jeśli magistral nie ma zapasu wydajności, będzie potrzebne dla tego 200 ns. Czas oczekiwania każdego procesora będzie zwiększony praktycznie dwukrotnie, przecież ilość operacji arytmetycznych, wykonywanych każdym procesorem, zmniejszyłaś też dwukrotnie, więc ogólny czas wykonania zadania pozostaje taki samy, jak w przypadku obliczeń sekwencyjnych. Podobna sytuacja występuje i dla algorytmów q = 2. (Mnożenie macierzy przez wektor, mnożenie macierzy przez macierz, algorytm naiwny, i t. d.). Typowy speed-up przedstawiona na podanym poniżej wykresie. 36
37 Test ParMV: y = A*x ( N = ; ntimes = 50; ia32 application) Proc QuadCore(2.4 GHz) I7 (3.2 GHz) AMD Phenom IIx4 995 Time, ms Sp=T 1 /T p Time, ms Sp=T 1 /T p Time, ms Sp=T 1 /T p Sp=T1/Tp 2 1 ideal QuadCore/DDR2 AMD/DDR P 37
38 Powstaje pytanie: a istnieją takie algorytmy, które można łatwo przyspieszyć przy zrównolegleniu na komputerach wielordzeniowych? Tak, mnożenie macierzy przez macierz, algorytm blokowy. Oszacowanie współczynnika wydajności wynosi q ~ M gdzie M rozmiar cache L1. To oznacza, że na jedną przesyłkę danych wypada M operacji arytmetycznych. Zaczynając od jakiejś wartości M procesor nie będzie miał pustych cyklów. Magistral nie będzie zbyt obciążoną, on i takie algorytmy demonstrują dobry speed up Wydajność różnych algorytmów zadania C = C + A*B przy zwiększeniu liczby procesorów (platforma x64, komputer z procesorem CoreQuad): Algorytm np=1 np=2 np=3 np=4 Naiwny (ikj) Cache blocking only Cache blocking, register s blocking DGEMM Intel MKL
39 4 3 Sp=T1/Tp trace 1 trace 2 trace 3 trace 4 Nuber of processors Trace 1 idealny speed up, trace 2 algorytm naiwny (ikj), trace 3 cache blocking only, trace 4 cache blocking, register s blocking 39
40 Stąd wynika, że przy konstruowaniu algorytmów złożonych wszystko, co nie będzie doprowadzone do algorytmu mnożenia macierzy przez macierz, będzie przyspieszone bardzo słabo. Ten wniosek dotyczy algorytmów algebry liniowej dla macierzy gęstych, zrealizowanych dla komputerów wielordzeniowych klasy PC. Mnożenie macierzy przez wektor: y = y + A*x. Jest skalowany bardzo słabo. Jeśli zadanie obliczeń technicznych może być sformułowane dla pakietu wektorów {x}, {y}, jego speed up i wydajność będzie wielokrotnie zwiększoną. Na przykład, rozwiązanie zanie układu równań liniowych algebraicznych metodą iteracyjną. Często trzeba rozwiązywać to zadanie przy pakiecie prawych stron. Najbardziej pracochłonną procedurą jest mnożenie macierzy przez wektor {y} = {y} + A*{y}, które wielokrotnie się powtarza na każdej iteracji. Tu faktycznie mnożenie macierzy przez wektor pozostało zastąpione mnożeniem macierzy przez macierz. Rozwiązywanie układów równań liniowych algebraicznych metodą blokową Choleskiego (Gaussa). 40
41 Wydajność faktoryzacji gęstej symetrycznej macierzy blokową metodą Choleskiego. Przy obliczeniu dopełnienia Schura użyto blokowanie rejestrów wektorowych, blokowanie cache L1 i pakowanie danych zgodnie z techniką Intel MKL (Komputer z procesorem CoreQuad) Platforma ia32 Intel 64 (x64) Liczba procesorów MFLOPS S p =T 1 /T p Wydajność faktoryzacji gęstej symetrycznej macierzy blokową metodą Choleskiego. Przy obliczeniu dopełnienia Schura użyto blokowanie tylko cache L1 (Komputer z procesorem CoreQuad) Platforma ia32 Intel 64 (x64) Liczba procesorów MFLOPS S p =T 1 /T p
42 Podział danych pomiędzy wątkami Umieszczenie danych Krok blokowej faktoryzacji: A = ~ L W ~ C = LL T = C T L T W ~ ~ T W W ~ W 42
43 Algorytm obliczenia dopełnienia Schura na poziomie bloków // Pack ~ W # pragma omp parallel for private ( ib, jb ) scheduler ( dynamic ) for ( jb = 0; jb < Nb ; jb + + ) { // for Pack ( ib = ~ W T jb jb ; ib < Nb ; ib + + ) { } ~ C ib, jb = ~ C ib, jb ~ W ib ~ W T jb } 43
44 Pakowanie danych dla skutecznego użycia rejestrów wektorowych C lb W mr N mr lb -= ib nr lb W T jb N M 44
45 Jeśli Wasz komputer zawiera dwa procesory, to nasz program będzie liczył w dwa razy szybciej Sformułujemy to inaczej: czy może speed up występować jako wyczerpująca miara jakości systemu obliczeniowego równoległego? Przykład: obliczenie iloczynu skalarnego dwóch wektorów: dot = X*Y, rozmiar zadania N = Zastosujemy dla rozwiązania Intel Threading Building Blocks, przy czym jeden raz użyjemy dla wektorów typ danych concurrent_vector, wprowadzony przez Intel, a drugi raz typ double. 45
46 Sp Czas wykonania, ms Number of processors, p 1 przyspieszenie idealne 2 typ concurrent_vector 3 typ double Ilość procesorów concurrent _vector double
47 Chocza speed up zadania przy użyci typu concurrent_vector jest wspaniały, wydajność dla typu double na jednym procesorze jest większa od wydajności dla typu concurrent_vector na 4 procesorach. Z tego wynika: speed up zadania nie może być przyjęty jako główna miara jakości systemu obliczeniowego. 47
Obliczenia równolegle w architekturze SMP
Obliczenia równolegle w architekturze SMP Przykład: przeglądanie stron internetowych przez browser zajmuje dość sporo czasu. Sposoby przyspieszenia: o przewidujemy, który strony będą następnymi, i przygotujemy
Obliczenia równolegle w architekturze SMP
Obliczenia równolegle w architekturze SMP Przykład: przeglądanie stron internetowych przez browser zajmuje dość sporo czasu. Sposoby przyspieszenia: o przewidujemy, który strony będą następnymi, i przygotujemy
Zrównoleglenie i przetwarzanie potokowe
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
Dr inż. hab. Siergiej Fialko, IF-PK,
Dr inż. hab. Siergiej Fialko, IF-PK, http://torus.uck.pk.edu.pl/~fialko sfialko@riad.pk.edu.pl 1 Osobliwości przedmiotu W podanym kursie główna uwaga będzie przydzielona osobliwościom symulacji komputerowych
Programowanie współbieżne Wykład 2. Iwona Kochańska
Programowanie współbieżne Wykład 2 Iwona Kochańska Miary skalowalności algorytmu równoległego Przyspieszenie Stały rozmiar danych N T(1) - czas obliczeń dla najlepszego algorytmu sekwencyjnego T(p) - czas
Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.
Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania
Wydajność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Wydajność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Wydajność obliczeń równoległych Podobnie jak w obliczeniach sekwencyjnych, gdzie celem optymalizacji wydajności było maksymalne
Numeryczna algebra liniowa
Numeryczna algebra liniowa Numeryczna algebra liniowa obejmuje szereg algorytmów dotyczących wektorów i macierzy, takich jak podstawowe operacje na wektorach i macierzach, a także rozwiązywanie układów
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 Motywacja - memory wall Krzysztof Banaś, Obliczenia wysokiej wydajności. 2 Organizacja pamięci Organizacja pamięci:
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Przetwarzanie Równoległe i Rozproszone
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI I TECHNOLOGII INFORMACYJNYCH Przetwarzanie Równoległe i Rozproszone www.pk.edu.pl/~zk/prir_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl
Budowa i zasada działania komputera. dr Artur Bartoszewski
Budowa i zasada działania komputera 1 dr Artur Bartoszewski Jednostka arytmetyczno-logiczna 2 Pojęcie systemu mikroprocesorowego Układ cyfrowy: Układy cyfrowe służą do przetwarzania informacji. Do układu
Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC
Architektura Systemów Komputerowych Rozwój architektury komputerów klasy PC 1 1978: Intel 8086 29tys. tranzystorów, 16-bitowy, współpracował z koprocesorem 8087, posiadał 16-bitową szynę danych (lub ośmiobitową
Programowanie Rozproszone i Równoległe
Programowanie Rozproszone i Równoległe OpenMP (www.openmp.org) API do pisania wielowątkowych aplikacji Zestaw dyrektyw kompilatora oraz procedur bibliotecznych dla programistów Ułatwia pisanie programów
Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,
Przetwarzanie równoległe PROJEKT OMP i CUDA Temat projektu dotyczy analizy efektywności przetwarzania równoległego realizowanego przy użyciu komputera równoległego z procesorem wielordzeniowym z pamięcią
Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Skalowalność obliczeń równoległych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Skalowalność Przy rozważaniu wydajności przetwarzania (obliczeń, komunikacji itp.) często pojawia się pojęcie skalowalności
Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz
Programowanie równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 23 października 2009 Spis treści Przedmowa...................................................
Wydajność programów sekwencyjnych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Wydajność programów sekwencyjnych Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Wydajność obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci i przetwarzania
Nowinki technologiczne procesorów
Elbląg 22.04.2010 Nowinki technologiczne procesorów Przygotował: Radosław Kubryń VIII semestr PDBiOU 1 Spis treści 1. Wstęp 2. Intel Hyper-Threading 3. Enhanced Intel Speed Technology 4. Intel HD Graphics
RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,
RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC, zapoczątkowana przez i wstecznie zgodna z 16-bitowym procesorem
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ść obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci
Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski
Układ sterowania, magistrale i organizacja pamięci Dariusz Chaberski Jednostka centralna szyna sygnałow sterowania sygnały sterujące układ sterowania sygnały stanu wewnętrzna szyna danych układ wykonawczy
Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1 Metodologia programowania równoległego Przykłady podziałów zadania na podzadania: Podział ze względu na funkcje (functional
Analiza ilościowa w przetwarzaniu równoległym
Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1 Analiza ilościowa w przetwarzaniu równoległym 10. Analiza ilościowa w przetwarzaniu równoległym...2 10.1 Kryteria efektywności przetwarzania równoległego...2
Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015
Analiza efektywności przetwarzania współbieżnego Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015 Źródła kosztów przetwarzania współbieżnego interakcje między procesami
Równoległość i współbieżność
Równoległość i współbieżność Wykonanie sekwencyjne. Poszczególne akcje procesu są wykonywane jedna po drugiej. Dokładniej: kolejna akcja rozpoczyna się po całkowitym zakończeniu poprzedniej. Praca współbieżna
Równoległość i współbieżność
Równoległość i współbieżność Wykonanie sekwencyjne. Poszczególne akcje procesu są wykonywane jedna po drugiej. Dokładniej: kolejna akcja rozpoczyna się po całkowitym zakończeniu poprzedniej. Praca współbieżna
SYSTEMY OPERACYJNE WYKLAD 6 - wątki
Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - wątki Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 PLAN: 1. Wątki 2. Planowanie przydziału procesora (szeregowanie
Nowinki technologiczne procesorów
Elbląg 22.04.2010 Nowinki technologiczne procesorów Przygotował: Radosław Kubryń VIII semestr PDBiOU 1 Spis treści 1. Wstęp 2. Intel Hyper-Threading 3. Enhanced Intel Speed Technology 4. Intel HD Graphics
Analiza efektywności przetwarzania współbieżnego
Analiza efektywności przetwarzania współbieżnego Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak 1/4/2013 Analiza efektywności 1 Źródła kosztów przetwarzania współbieżnego interakcje
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.
P O L I T E C H N I K A S Z C Z E C I Ń S K A Wydział Informatyki PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP. Autor: Wojciech
Architektury komputerów Architektury i wydajność. Tomasz Dziubich
Architektury komputerów Architektury i wydajność Tomasz Dziubich Przetwarzanie potokowe Przetwarzanie sekwencyjne Przetwarzanie potokowe Architektura superpotokowa W przetwarzaniu potokowym podczas niektórych
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ść obliczeń Dla wielu programów wydajność obliczeń można traktować jako wydajność pobierania z pamięci
System obliczeniowy laboratorium oraz. mnożenia macierzy
System obliczeniowy laboratorium.7. oraz przykładowe wyniki efektywności mnożenia macierzy opracował: Rafał Walkowiak Materiały dla studentów informatyki studia niestacjonarne październik 1 SYSTEMY DLA
Procesy i wątki. Krzysztof Banaś Obliczenia równoległe 1
Procesy i wątki Krzysztof Banaś Obliczenia równoległe 1 Procesy i wątki Proces: ciąg rozkazów (wątek główny) i ewentualnie inne wątki stos (wątku głównego) przestrzeń adresowa dodatkowe elementy tworzące
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz
Obliczenia równoległe i rozproszone Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz 15 czerwca 2001 Spis treści Przedmowa............................................
Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego
Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII
Spis treści Od autora..................................................... Obliczenia inżynierskie i naukowe.................................. X XII Ostrzeżenia...................................................XVII
Nowoczesne technologie przetwarzania informacji
Projekt Nowe metody nauczania w matematyce Nr POKL.09.04.00-14-133/11 Nowoczesne technologie przetwarzania informacji Mgr Maciej Cytowski (ICM UW) Lekcja 2: Podstawowe mechanizmy programowania równoległego
Procesory. Schemat budowy procesora
Procesory Procesor jednostka centralna (CPU Central Processing Unit) to sekwencyjne urządzenie cyfrowe którego zadaniem jest wykonywanie rozkazów i sterowanie pracą wszystkich pozostałych bloków systemu
Programowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 GPGPU Historia: lata 80 te popularyzacja systemów i programów z graficznym interfejsem specjalistyczne układy do przetwarzania grafiki 2D lata 90 te standaryzacja
Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.
Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle Krzysztof Banaś, Obliczenia wysokiej wydajności. 1 Organizacja pamięci Organizacja pamięci współczesnych systemów komputerowych
Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1
Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1 Wprowadzenie Procesory graficzne GPU (Graphics Processing Units) stosowane są w kartach graficznych do przetwarzania grafiki komputerowej
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Budowa Mikrokomputera
Budowa Mikrokomputera Wykład z Podstaw Informatyki dla I roku BO Piotr Mika Podstawowe elementy komputera Procesor Pamięć Magistrala (2/16) Płyta główna (ang. mainboard, motherboard) płyta drukowana komputera,
Task Parallel Library
Task Parallel Library Daan Leijen, Wolfram Schulte, and Sebastian Burckhardt prezentacja Michał Albrycht Agenda O potrzebie zrównoleglania Przykłady użycia TPL Tasks and Replicable Tasks Rozdzielanie zadań
Metody uporządkowania
Metody uporządkowania W trakcie faktoryzacji macierzy rzadkiej ilość zapełnień istotnie zależy od sposobu numeracji równań. Powstaje problem odnalezienia takiej numeracji, przy której: o ilość zapełnień
Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.
Procesory wielordzeniowe (multiprocessor on a chip) 1 Procesory wielordzeniowe 2 Procesory wielordzeniowe 3 Intel Nehalem 4 5 NVIDIA Tesla 6 ATI FireStream 7 NVIDIA Fermi 8 Sprzętowa wielowątkowość 9 Architektury
Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1
Tworzenie programów równoległych Krzysztof Banaś Obliczenia równoległe 1 Tworzenie programów równoległych W procesie tworzenia programów równoległych istnieją dwa kroki o zasadniczym znaczeniu: wykrycie
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego
Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego Mariusz Uchroński 3 grudnia 2010 Plan prezentacji 1. Wprowadzenie 2.
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco
1. Liczby 3456.0012 i 0.000076235 w zapisie zmiennoprzecinkowym przedstawia się następująco a) 0.34560012 10 4 i 0.76235 10 4 b) 3.4560012 10 3 i 7.6235 10 5 c) 3.4560012 10 3 i 7.6235 10 5 d) po prostu
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Architektura komputerów
Architektura komputerów Wykład 12 Jan Kazimirski 1 Magistrale systemowe 2 Magistrale Magistrala medium łączące dwa lub więcej urządzeń Sygnał przesyłany magistralą może być odbierany przez wiele urządzeń
Optymalizacja kodu. Ze wszystkich metod optymalizacji kodu programowego zwrócimy uwagę na: Usunięcie (po możliwości) skoków danych.
Optymalizacja kodu Ze wszystkich metod optymalizacji kodu programowego zwrócimy uwagę na: Usunięcie (po możliwości) skoków danych Rozwijanie pętli Opcje kompilatora 1 Usunięcie skoków danych: for(i=1;
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE WINDOWS 1 SO i SK/WIN 007 Tryb rzeczywisty i chroniony procesora 2 SO i SK/WIN Wszystkie 32-bitowe procesory (386 i nowsze) mogą pracować w kilku trybach. Tryby pracy
Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).
Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,
Wykorzystanie architektury Intel MIC w obliczeniach typu stencil
Wykorzystanie architektury Intel MIC w obliczeniach typu stencil Kamil Halbiniak Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok IV Instytut Informatyki Teoretycznej i Stosowanej
Numeryczna algebra liniowa. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Numeryczna algebra liniowa Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Numeryczna algebra liniowa Numeryczna algebra liniowa obejmuje szereg algorytmów dotyczących wektorów i macierzy, takich jak
Projektowanie. Projektowanie mikroprocesorów
WYKŁAD Projektowanie mikroprocesorów Projektowanie układ adów w cyfrowych - podsumowanie Algebra Boole a Bramki logiczne i przerzutniki Automat skończony System binarny i reprezentacja danych Synteza logiczna
Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki
Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Konwersje liczba napis Ćwiczenia 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12,
Sposoby tworzenia uwarunkowania wstępnego dla metody gradientów sprzężonych
Sposoby tworzenia uwarunkowania wstępnego dla metody gradientów sprzężonych Ten fakt, że matematyka obliczeniowa nie daje żadnych przepisów dla tworzenia operatora uwarunkowania wstępnego B, doprowadzi
Organizacja typowego mikroprocesora
Organizacja typowego mikroprocesora 1 Architektura procesora 8086 2 Architektura współczesnego procesora 3 Schemat blokowy procesora AVR Mega o architekturze harwardzkiej Wszystkie mikroprocesory zawierają
Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.
Procesory wielordzeniowe (multiprocessor on a chip) 1 Procesory wielordzeniowe 2 Procesory wielordzeniowe 3 Konsekwencje prawa Moore'a 4 Procesory wielordzeniowe 5 Intel Nehalem 6 Architektura Intel Nehalem
Programowanie Niskopoziomowe
Programowanie Niskopoziomowe Wykład 3: Architektura procesorów x86 Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Pojęcia ogólne Budowa mikrokomputera Cykl
Przykładem jest komputer z procesorem 4 rdzeniowym dostępny w laboratorium W skład projektu wchodzi:
Przetwarzanie równoległe PROJEKT OMP Temat projektu dotyczy analizy efektywności przetwarzania równoległego realizowanego w komputerze równoległym z procesorem wielordzeniowym z pamięcią współdzieloną.
Podstawy programowania komputerów
Podstawy programowania komputerów Wykład 10: Sterowanie pamięcią w C Pamięć na stosie!każdy program napisany w języku C ma dostęp do dwóch obszarów pamięci - stosu i sterty, w których może być przechowywana
Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012
Projektowanie algorytmów równoległych Zbigniew Koza Wrocław 2012 Spis reści Zadniowo-kanałowy (task-channel) model algorytmów równoległych Projektowanie algorytmów równoległych metodą PACM Task-channel
Zegar - układ wysyłający regularne impulsy o stałej szerokości (J) i częstotliwości (f)
Zegar Zegar - układ wysyłający regularne impulsy o stałej szerokości (J) i częstotliwości (f) http://en.wikipedia.org/wiki/computer_clock umożliwia kontrolę relacji czasowych w CPU pobieranie, dekodowanie,
Architektura komputerów
Architektura komputerów Wykład 7 Jan Kazimirski 1 Pamięć podręczna 2 Pamięć komputera - charakterystyka Położenie Procesor rejestry, pamięć podręczna Pamięć wewnętrzna pamięć podręczna, główna Pamięć zewnętrzna
Wydajność obliczeń a architektura procesorów. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1
Wydajność obliczeń a architektura procesorów Krzysztof Banaś Obliczenia Wysokiej Wydajności 1 Wydajność komputerów Modele wydajności-> szacowanie czasu wykonania zadania Wydajność szybkość realizacji wyznaczonych
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu
CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu inż. Daniel Solarz Wydział Fizyki i Informatyki Stosowanej AGH 1. Cel projektu. Celem projektu było napisanie wtyczki
Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86
Księgarnia PWN: Włodzimierz Stanisławski, Damian Raczyński - Programowanie systemowe mikroprocesorów rodziny x86 Spis treści Wprowadzenie... 11 1. Architektura procesorów rodziny x86... 17 1.1. Model procesorów
Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych
Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych Ł. Kuczyński, M. Woźniak, R. Wyrzykowski Instytut Informatyki Teoretycznej i Stosowanej
ARCHITEKTURA PROCESORA,
ARCHITEKTURA PROCESORA, poza blokami funkcjonalnymi, to przede wszystkim: a. formaty rozkazów, b. lista rozkazów, c. rejestry dostępne programowo, d. sposoby adresowania pamięci, e. sposoby współpracy
Jądro systemu operacyjnego
Jądro systemu operacyjnego Jądro (ang. kernel) jest to podstawowa część systemu operacyjnego, która jest odpowiedzialna za wszystkie jego zadania. Zapewnia ono usługi systemowe takie jak: komunikacja między
4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Magistrala systemowa (System Bus)
Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki systemowa (System Bus) Pamięć operacyjna ROM, RAM Jednostka centralna Układy we/wy In/Out Wstęp do Informatyki
Przeciążenie operatorów
Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami
Organizacja pamięci współczesnych systemów komputerowych : pojedynczy procesor wielopoziomowa pamięć podręczna pamięć wirtualna
Pamięć Wydajność obliczeń Dla wielu programów wydajność obliczeń może być określana poprzez pobranie danych z pamięci oraz wykonanie operacji przez procesor Często istnieją algorytmy, których wydajność
Systemy operacyjne III
Systemy operacyjne III WYKŁAD Jan Kazimirski Pamięć wirtualna Stronicowanie Pamięć podzielona na niewielki bloki Bloki procesu to strony a bloki fizyczne to ramki System operacyjny przechowuje dla każdego
Zad. 3: Układ równań liniowych
1 Cel ćwiczenia Zad. 3: Układ równań liniowych Wykształcenie umiejętności modelowania kluczowych dla danego problemu pojęć. Definiowanie właściwego interfejsu klasy. Zwrócenie uwagi na dobór odpowiednich
Architektura komputerów
Architektura komputerów Tydzień 4 Tryby adresowania i formaty Tryby adresowania Natychmiastowy Bezpośredni Pośredni Rejestrowy Rejestrowy pośredni Z przesunięciem stosowy Argument natychmiastowy Op Rozkaz
Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek
Wstęp do informatyki Architektura komputera Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki System komputerowy systemowa (System Bus) Pamięć operacyjna ROM,
Operacje grupowego przesyłania komunikatów
Operacje grupowego przesyłania komunikatów 1 Operacje grupowego przesyłania komunikatów Operacje, w ramach których ten sam komunikat lub zbiór komunikatów przesyłany jest pomiędzy więcej niż dwoma procesami
Zaawansowane programowanie w C++ (PCP)
Wykład 10 - boost Thread. 8 czerwca 2007 Równoległość bardzo wolna reakcja człowieka wolne urządzenia wejścia - wyjścia (np. drukarki) bardzo szybkie procesory można przeprowadzać obliczenia podczas obsługi
System komputerowy. System komputerowy
System komputerowy System komputerowy System komputerowy układ współdziałających ze sobą (według pewnych zasad) dwóch składowych: sprzętu komputerowego (hardware) oraz oprogramowania (software) po to,
Podstawy informatyki. System operacyjny. dr inż. Adam Klimowicz
Podstawy informatyki System operacyjny dr inż. Adam Klimowicz System operacyjny OS (ang. Operating System) Program komputerowy bądź zbiór programów, który zarządza udostępnianiem zasobów komputera aplikacjom.
Energooszczędne programowanie
Projektowanie energooszczędnych systemów wbudowanych dr inż. Ireneusz Brzozowski C-3, p. 512 WIET KATEDRA ELEKTRONIKI Elektronika i Telekomunikacja, Systemy Wbudowane www.agh.edu.pl Projektowanie energooszczędnych
Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie
Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń
Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych
Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych B.1. Dostęp do urządzeń komunikacyjnych Sterowniki urządzeń zewnętrznych widziane są przez procesor jako zestawy rejestrów
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to