Programowanie równoległe Wprowadzenie do programowania GPU. Rafał Skinderowicz
|
|
- Leszek Klimek
- 7 lat temu
- Przeglądów:
Transkrypt
1 Programowanie równoległe Wprowadzenie do programowania GPU Rafał Skinderowicz
2 CPU Fetch/ Decode ALU (Execute) Data cache (a big one) Execution Context Out-of-order control logic Fancy branch predictor Memory pre-fetcher Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD Rozbudowane układy dekodowania i predykcji instrukcji Duża pamięć cache
3 CPU Celem CPU jest jak najszybsze wykonanie danego strumienia instrukcji Pamięć cache oraz układy predykcji rozgałęzień mają na celu redukcję czasu oczekiwania na dane potrzebne do obliczeń Rozbudowana potokowość (ang. pipelining) wykonywania instrukcji Zmiana kolejności wykonania rozkazów (ang. out-of-order execution)
4 Potokowość Instr. No Clock Cycle Pipeline Stage IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM IF ID EX Uproszczony schemat potokowego wykonania instrukcji. Pobranie instrukcji z pamięci ang. instruction fetch (IF); Zdekodowanie instrukcji ang. instruction decode (ID); Wykonanie instrukcji ang. execute (EX); Dostęp do pamięci ang. memory access (MEM); Zapisanie wyników działania instrukcji ang. store; write back (WB)
5 W kierunku GPU Fetch/ Decode ALU (Execute) Execution Context Usuwamy układy odpowiedzialne za szybkie wykonanie potoku instrukcji redukując istotnie rozmiar rdzenia. Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD
6 W kierunku GPU Fetch/ Decode ALU (Execute) Execution Context Usuwamy układy odpowiedzialne za szybkie wykonanie potoku instrukcji redukując istotnie rozmiar rdzenia. Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD Większość tranzystorów we współczesnych CPU to pamięć cache
7 W kierunku GPU Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD Uproszczona budowa obniża koszty pozwalając na użycie większej ich liczby 16 rdzeni to 16 jednoczesnych strumieni instrukcji
8 W kierunku GPU Fetch/ Decode ALU 1 ALU 2 ALU 3 ALU 4 ALU 5 ALU 6 ALU 7 ALU 8 Ctx Ctx Ctx Ctx Ctx Ctx Ctx Ctx Shared Ctx Data Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD Jeżeli rdzenie będą wykonywać te same instrukcje, ale na różnych danych to mogą dzielić układy pobierania i dekodowania rozkazów Przetwarzanie typu SIMD single instruction, multiple data Problem: oczekiwanie na dane wstrzymuje wszystkie ALU duże opóźnienie wykonania instrukcji
9 Ukrywanie opóźnień Fetch/ Decode ALU 1 ALU 2 ALU 3 ALU 4 ALU 5 ALU 6 ALU 7 ALU 8 Fetch/ Decode ALU 1 ALU 2 ALU 3 ALU 4 ALU 5 ALU 6 ALU 7 ALU 8 Wspólna pamięć 128 KB Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD W pamięci można przechowywać kontekst obliczeniowy dla wielu niezależnych strumieni instrukcji i przełączać się między nimi w miarę potrzeby zwiększając przepustowość
10 Przykład 16 rdzeni 8 mul-add ALU na rdzeń (128 łącznie) 16 niezależnych strumieni instrukcji 64 współbieżne strumienie instrukcji (metoda przeplotu) 512 współbieżnych kontekstów Moc 256 GFLOPs (przy 1GHz) Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD
11 Podsumowanie Główne idee architektury GPU to: Wiele prostych rdzeni obliczeniowych umożliwiających równoległe obliczenia Rdzenie z wieloma ALU umożliwiającymi obliczenia typu SIMD Przeplatane wykonanie wielu grup instrukcji na jednym rdzeniu, żeby ukryć opóźnienia
12 Podsumowanie CPU Thread 1 Thread 2 Thread 3 Thread 4 Lower Latencies GPU Thread 1 Thread 2 Thread 3 Thread 4 Higher Throughput Time Time
13 NVidia Fermi SM NVIDIA GeForce GTX 580 (architektura Fermi) Fetch/ Decode Fetch/ Decode Execution contexts (128 KB) ALU - 16 na procesor strumieniowy (1 instr. MUL-ADD na cykl) * Rdzeń zawiera 32 jednostki ALU * Dwa strumienie instrukcji są wykonywane na cykl * Maksymalnie 48 współbieżnych strumieni (osnów) * Maksymalnie 1536 indywidualnych kontekstów obliczeniowych = 1536 wątków CUDA Shared memory (16+48 KB) Source: Fermi Compute Architecture Whitepaper CUDA Programming Guide 3.1, Appendix G
14 NVidia Fermi GTX rdzeni SM pozwala na współbieżne wykonanie wątków CUDA Rysunek : Źródło: Introduction to GPU Architecture Ofer Rosenberg, AMD
15 Model obliczeń CUDA Program na hoście zleca wykonanie obliczeń na GPU w postaci kerneli Kod kernela wykonywany jest przez wątki tworzące kratę (ang. grid) Wątki kraty wykonywane są w blokach każdy blok na jednym multiprocesorze (SM) Wątki bloku wykonywane są w grupach, tzw. osnowach (ang. warp) po 32 Host Kernel 1 Kernel 2 Device Grid 2 Block (1, 1) Thread (0,0,0) Thread (0,1,0) Grid 1 Block (0, 0) Block (0, 1) (0,0,1) (1,0,1) (2,0,1) (3,0,1) Thread (1,0,0) Thread (1,1,0) Block (1, 0) Block (1, 1) Thread Thread (2,0,0) (3,0,0) Thread Thread (2,1,0) (3,1,0) Block (2, 0) Block (2, 1)
16 Przykład dodawanie wektorów 1 // Kernel odpowiedzialny za obliczenia 2 void vecadd(float *A, float *B, float *C, int N) { 3 for(int i = 0; i < N; i++) 4 C[i] = A[i] + B[i]; 5 } 6 int main() { 7 int N = 4096; 8 // Alokacja pamięci 9 float *A = (float *)malloc(sizeof(float)*n); 10 float *B = (float *)malloc(sizeof(float)*n); 11 float *C = (float *)malloc(sizeof(float)*n); 12 // Wprowadzenie danych wej. 13 init(a); init(b); 14 // Wywołanie kernela 15 vecadd(a, B, C, N); 16 // Zwolnienie pamięci 17 free(a); free(b); free(c); 18 }
17 Przykład dodawanie wektorów na GPU 1 // Kernel CUDA obliczający sumę wektorów 2 global 3 void gpuvecadd(float *A, float *B, float *C) { 4 int tid = blockidx.x * blockdim.x + threadidx.x; 5 C[tid] = A[tid] + B[tid]; 6 } blockidx.x threadidx.x GRID BLOCK (0,0) (0,0) (1,0) (2,0)... (31,0) blockdim.x = 32 BLOCK (1,0) (0,0) (1,0) (2,0)... (31,0)... tid = blockidx.x * blockdim.x + threadidx.x Rysunek : Obliczanie globalnego identyfikatora wątku w kernelu CUDA
18 Przykład dodawanie wektorów na GPU 1 int main() { 2 int N = 4096; 3 float *A = (float *)malloc(sizeof(float)*n); 4 float *B = (float *)malloc(sizeof(float)*n); 5 float *C = (float *)malloc(sizeof(float)*n); 6 init(a); // Inicjuj dane wejściowe 7 init(b);
19 Przykład dodawanie wektorów na GPU 1 // c.d. 2 // Alokacja buforów w pamięci GPU 3 float *d_a, *d_b, *d_c; 4 cudamalloc(&d_a, sizeof(float)*n); 5 cudamalloc(&d_b, sizeof(float)*n); 6 cudamalloc(&d_c, sizeof(float)*n); 7 8 // Kopiowanie danych do pamięci GPU 9 cudamemcpy(d_a, A, sizeof(float)*n, 10 cudamemcpyhosttodevice); 11 cudamemcpy(d_b, B, sizeof(float)*n, 12 cudamemcpyhosttodevice); Kierunek kopiowania: cudamemcpyhosttodevice z pam. hosta (RAM) do pam. GPU cudamemcpydevicetohost z pam. urządzenia do głównej
20 Przykład dodawanie wektorów na GPU 1 // c.d. 2 // Ustalenie podziału obliczeń na wątki 3 dim3 dimblock(32,1); // Rozmiar bloku 4 dim3 dimgrid(n/32,1); // Rozmiar kraty 5 // Uruchomienie kernela 6 gpuvecadd <<< dimblock,dimgrid >>> (d_a, d_b, d_c); 7 // Kopiowanie wyników do pamięci głównej 8 cudamemcpy(c, d_c, sizeof(float)*n, cudamemcpydevicetohost); 9 // Zwolnienie zasobów 10 cudafree(d_a); 11 cudafree(d_b); cudafree(d_c); 12 free(a); free(b); free(c); 13 }
21 Dodawanie wektorów porównanie kerneli 1 // Kernel CPU 2 void vecadd(float *A, float *B, float *C, int N) { 3 for(int i = 0; i < N; i++) 4 C[i] = A[i] + B[i]; 5 } 6 7 // Kernel CUDA 8 global 9 void gpuvecadd(float *A, float *B, float *C) { 10 int i = blockidx.x * blockdim.x + threadidx.x; 11 C[i] = A[i] + B[i]; 12 } // Kernel OpenCL 15 kernel 16 void gpuvecadd( global float *A, global float *B, global float *C) 17 { 18 int i = get_global_id(0); 19 C[i] = A[i] + B[i]; 20 }
22 Dodawanie wektorów porównanie kerneli Uwaga: w przypadku gdy rozmiar wektora jest mniejszy niż liczba wątków konieczne jest sprawdzanie zakresu 1 // Kernel OpenCL 2 kernel 3 void gpuvecadd( global float *A, global float *B, global float *C, 4 int N) 5 { 6 int i = get_global_id(0); 7 if (i < N) { 8 C[i] = A[i] + B[i]; 9 } 10 }
23 Przykład dodawanie macierzy Dodawanie macierzy A oraz B o wymiarach N M a 11 a a 1m a 21 a a 2m A = a 31 a a 3m a n1 a n2... a nm b 11 b b 1m b 21 b b 2m B = b 31 b b 3m b n1 b n2... b nm C = A + B = [a ij + b ij ] dla wszystkich i, j.
24 Dodawanie macierzy porównanie kerneli 1 // Kernel CPU, N - liczba wierszy, M - liczba kolumn 2 void vecadd(float *A, float *B, float *C, int N, int M) { 3 for(int i = 0; i < N; i++) 4 for(int j = 0; j < M; j++) 5 C[i * M + j] = A[i * M + j] + B[i * M + j]; 6 } 7 // Kernel CUDA 8 global 9 void gpuvecadd(float *A, float *B, float *C) { 10 int i = blockidx.y * blockdim.y + threadidx.y; 11 int j = blockidx.x * blockdim.x + threadidx.x; 12 C[i * M + j] = A[i * M + j] + B[i * M + j]; 13 } 14 // Kernel OpenCL 15 kernel 16 void gpuvecadd( global float *A, global float *B, global float *C, 17 int M, int N) 18 { 19 int j = get_global_id(0); 20 int i = get_global_id(1); 21 C[i * M + j] = A[i * M + j] + B[i * M + j]; 22 }
25 Organizacja obliczeń Wybór liczby wymiarów przestrzeni indeksowania (1D, 2D lub 3D) zależy zazwyczaj od natury danych i wybranego algorytmu W przypadku przetwarzania danych 2D naturalne jest umieszczenie indeksów wątków w przestrzeni 2D
26 Organizacja obliczeń blocks Rysunek : Przykład pokrycia tablicy 76x62 grupami po 16x16 wątków (Źródło: David B. Kirk and Wen-mei W. Hwu, Programming Massively Parallel Processors A Hands-on Approach) wątki będą przetwarzać tablicę o wymiarach Konieczne jest sprawdzanie, czy wątek odwołuje się do elementu w dozwolonym zakresie, np. if (get_global_id(0)< 62) W 408 ( 8%) przypadkach wątki nie wykonają użytecznej pracy
27 Organizacja obliczeń Ponieważ do kernela można przekazywać dane w postaci tablic jednowymiarowych, to dane wielowymiarowe muszą być serializowane Tablicę dwuwymiarową można zapisać w tablicy jednowymiarowej wiersz po wierszu (row-major) lub kolumna za kolumną (column-major) M 0,0 M 0,1 M 0,2 M 0,3 M 1,0 M 1,1 M 1,2 M 1,3 M 2,0 M 2,1 M 2,2 M 2,3 M M 3,0 M 3,1 M 3,2 M 3,3 M 0,0 M 0,1 M 0,2 M 0,3 M 1,0 M 1,1 M 1,2 M 1,3 M 2,0 M 2,1 M 2,2 M 2,3 M 3,0 M 3,1 M 3,2 M 3,3 M M 0 M 1 M 2 M 3 M 4 M 5 M 6 M 7 M 8 M 9 M 10 M 11 M 12 M 13 M 14 M 15 Rysunek : Serializacja macierzy wiersz po wierszu M[row][column] M[row * width + column]
28 Organizacja obliczeń M 0,0 M 0,1 M 0,2 M 0,3 M 1,0 M 1,1 M 1,2 M 1,3 M 2,0 M 2,1 M 2,2 M 2,3 M M 3,0 M 3,1 M 3,2 M 3,3 M 0,0 M 1,0 M 2,0 M 3,0 M 0,1 M 1,1 M 2,1 M 3,1 M 0,2 M 1,2 M 2,2 M 3,2 M 0,3 M 1,3 M 2,3 M 3,3 M M 0 M 1 M 2 M 3 M 4 M 5 M 6 M 7 M 8 M 9 M 10 M 11 M 12 M 13 M 14 M 15 Rysunek : Serializacja macierzy kolumna po kolumnie M[row][column] M[column * width + row]
29 Organizacja obliczeń Wątki dzielone są na bloki (grupy), z których każdy wykonuje się na pojedynczym multiprocesorze (PE) Maksymalny rozmiar bloku jest określony w wersji standardu CUDA / OpenCL wspieranej przez urządzenie np. 512/1024 (Compute Capability 1.x / 2.x-3.x) Maksymalny rozmiar bloku w każdym wymiarze (x, y i z) jest również ograniczony, przy czym x y z nie może przekroczyć rozmiaru bloku Wątki w bloku nie mogą używać więcej niż 8k/16k/32k rejestrów (Compute 1.0,1.1/1.2,1.3/2.x) Blok nie może użyć więcej niż 16kb/48kb współdzielonej pamięci (Compute 1.x/2.x)
30 Organizacja obliczeń Uwzględniając ograniczenia duży rozmiar bloku może ograniczyć wydajność, np. ze względu na zapotrzebowanie na pamięć Zbyt mały rozmiar bloku również jest niekorzystny niewystarczające wykorzystanie mocy obliczeniowej ze względu na to, że PE pracują w modelu SIMD/SIMT
31 Organizacja obliczeń wewnątrz bloku W kartach Nvidia 32 wątki bloku tworzą tzw. osnowę (ang. warp) wykonywane są w modelu SIMD/SIMT (ang. single instruction multiple threads) W kartach AMD odpowiednikiem osnowy jest tzw. wavefront złożony zazwyczaj z 64 wątków (w starszych modelach 16 lub 32) W procesorach ogólnego przeznaczenia rozmiar osnowy może zależeć od instrukcji kernela
32 Organizacja obliczeń wewnątrz bloku Rozmiar bloku powinien być wielokrotnością rozmiaru osnowy Jeżeli rozmiar osnowy wynosi 32, a bloku 16 to tracimy 50% mocy obliczeniowej Rozmiar osnowy nie jest ustandaryzowany, jednak udostępniany przez środowisko uruchomieniowe: CUDA CL_DEVICE_WARP_SIZE_NV OpenCL CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE
33 Organizacja obliczeń wewnątrz bloku 1 size_t preferredsizemultiple; 2 clgetkernelworkgroupinfo(kernel, device, 3 CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, 4 sizeof(preferredsizemultiple), 5 &preferredsizemultiple, 6 NULL); 1 const size_t N =...; // Rozmiar danych do przetworzenia 2 size_t local_work_size[] = { preferredsizemultiple }; 3 // global_work_size[0] musi być wielokrotnością local_work_size[0] 4 size_t global_work_size[] = { 5 (size_t)ceil(n / (float)local_work_size[0]) * local_work_size[0] 6 }; Uwaga! Liczba wątków może być większa niż rozmiar danych
34 Organizacja obliczeń wewnątrz bloku 1 const size_t N =...; // Rozmiar danych do przetworzenia 2 size_t local_work_size[] = { preferredsizemultiple }; 3 // global_work_size[0] musi być wielokrotnością local_work_size[0] 4 size_t global_work_size[] = { 5 (size_t)ceil(n / (float)local_work_size[0]) * local_work_size[0] 6 }; Jeżeli N = 1234, preferredsizemultiple = 32 to global_work_size[0] = 39 * 32 = 1248 Wymaga to uwzględnienia w kodzie kernela, np. instrukcja if do sprawdzenia, czy nie odwołujemy się do elementów poza dopuszczalnym zakresem
35 Synchronizacja wątków Wątki wewnątrz grupy / bloku mogą być synchronizowane Wątki należące do różnych grup nie mogą być synchronizowane Jeżeli bariera synchronizacyjna umieszczona jest w bloku instrukcji warunkowej, to albo dla wszystkich wątków warunek jest spełniony, albo dla żadnego nie jest W przeciwnym razie program zakleszczy się Wątek 0 Wątek 1 Wątek 3 Wątek 4 Wątek 5 Wątek n-3 Wątek n-2 Wątek n-1 Czas
36 Synchronizacja wątków Synchronizacja wątków w OpenCL realizowana jest za pomocą funkcji void barrier (cl_mem_fence_flags flags), gdzie flags może przyjmować wartości: CLK_LOCAL_MEM_FENCE zapewnia, że zmiany w pamięci lokalnej dokonane przez wątki zostaną uszeregowane i wątki zobaczą spójny stan pamięci lokalnej CLK_GLOBAL_MEM_FENCE zapewnia, że wszystkie zapisy do pamięci głównej (obiektów pamięci, obrazów) zostaną wykonane i wątki zobaczą jej spójny stan Wywołanie funkcji barrier w różnych miejscach kernela oznacza odrębne bariery synchronizacyjne
37 Ukrywanie opóźnień Wiele uwagi zarówno w architekturze GPU, jak i środowisku programistycznym i wykonawczym poświęcono problemowi ukrywania opóźnień wynikających z powolnych operacji, takich jak odczyt i zapis do pamięci, barier synchronizacyjnych Jednym ze sposobów jest wykonywanie metodą przeplotu większej liczby wątków niż wynika to z liczby jednostek przetwarzających
38 Ukrywanie opóźnień Pojedynczy SM w architekturze Nvidia Fermi może wykonywać współbieżnie: do 48 osnów (warps) 32 wątki = 1536 wątków do 8 bloków jednocześnie SM wyposażony jest w 2 planistów (ang. warp scheduler) SM może jednocześnie wykonywać 2 grupy (osnowy, ang. warp) po 32 wątków Jak widać liczba wątków znacząco przekracza liczbę rdzeni CUDA (jednostek ALU/FP) Rysunek : Schemat SM w architekturze Nvidia Fermi
39 Ukrywanie opóźnień Duża liczba wątków konieczna jest aby ukryć opóźnienia Jeżeli wątki w osnowie muszą czekać na zakończenie wykonywania wolnej instrukcji, to w tym czasie wybierana jest inna osnowa, która gotowa jest do wykonania Jeżeli gotowych jest więcej, to wybór dokonywany jest na podstawie priorytetów Przełączanie pomiędzy osnowami nie powoduje opóźnień, jest to tzw. zero-overhead thread scheduling
40 Ukrywanie opóźnień przykład Pożądane jest by liczba bloków i wątków była blisko granic sprzętowych W przypadku architektury Nvidia Fermi mamy maks. 8 bloków (po maks wątki), ale nie więcej niż 1536 wątków na SM Rozmiar bloku Wątki na blok Liczba bloków Wątki razem 8x x x
41 Ukrywanie opóźnień pamięć Nawet duża liczba bloków i wątków nie zawsze jest w stanie ukryć wszystkich opóźnień, szczególnie wynikających z operacji na pamięci globalnej Opóźnienie w dostępie do pamięci globalnej może sięgać setek cykli, stąd należy redukować liczbę operacji na pamięci, np. przez cacheowanie danych zapewnić ich uporządkowanie łączone odczyty danych z pamięci głównej
42 Hierarchia pamięci GPU Hierarchia pamięci na przykładzie Nvidia Fermi Fermi Memory Hierarchy Review SM-0 SM-1 SM-N Fermi Chip Registers L1 SMEM Registers L1 SMEM Registers L1 SMEM L2 Global Memory NVIDIA Corporation 2011
43 Pamięć GPU opóźnienia W architekturze Nvidia Fermi: rejestry mają łączną przepustowość ok. 8TB/sek. (maks. 63 rejestry 32 bitowe na kernel) pamięć współdzielona / L1 (64KB) ma przepustowość łączną ok 1.6TB/sek. i bardzo niskie opóźnienie (10-20 cykli) pamięć globalna ma przepustowość do 177GB/sek. i opóźnienie rzędu cykli Jak widać, im mniej operacji na pamięci globalnej, tym lepiej
44 Optymalizacja dostępu do pamięci na przykładzie Przyjrzymy się wzorcom dostępu do pamięci w programie mnożącym macierze Złożoność standardowego algorytmu mnożenia to O(n 3 ), dla porównania: Algorytm Strassena ma złożoność O(n ) Najlepszy znany algorytm (2014) autorstwa François Le Gall ma złożoność O(n )
45 Mnożenie macierzy wersja CPU A B Rysunek : Matrix multiplication diagram, autor Bilou 1 /* 2 A, B, C - tablice 2D o rozmiarze size x size 3 */ 4 for (int i = 0; i < size; ++i) { 5 for (int j = 0; j < size; ++j) { 6 sum = 0; 7 for (int k = 0; k < size; ++k) { 8 sum += A[i][k] * B[k][j]; 9 } 10 C[i][j] = sum; 11 } 12 }
46 Mnożenie macierzy wersja CPU A B Rysunek : Matrix multiplication diagram, autor Bilou 1 /* 2 Wersja dla macierzy zapisanych w tablicach 1D 3 A, B, C - tablice 1D o długości size x size 4 */ 5 for (size_t i = 0; i < size; ++i) { 6 for (size_t j = 0; j < size; ++j) { 7 int sum = 0; 8 for (size_t k = 0; k < size; ++k) { 9 sum += A[i*size + k] * B[k*size + j]; 10 } 11 C[i*size + j] = sum; 12 } 13 }
47 Optymalizacja dostępu do pamięci Kernel OpenCL obliczający iloczyn macierzy 1 kernel void matrix_multiply(int size, 2 global float *A, 3 global float *B, 4 global float *C) { 5 const int col = get_global_id(0); 6 const int row = get_global_id(1); 7 if (row < size && col < size) { 8 float sum = 0; 9 for (int i = 0; i < size; ++i) { 10 sum += A[row * size + i] * B[i * size + col]; 11 } 12 C[row * size + col] = sum; 13 } 14 }
48 Analiza dostępu do pamięci Za większość operacji na pamięci głównej odpowiedzialny jest fragment: 1 for (int i = 0; i < size; ++i) { 2 sum += A[row * size + i] * B[i * size + col]; 3 } W każdej iteracji pętli wykonywane jest 1 mnożenie, 1 dodawanie i 2 odczyty z tablic, odpowiednio, A oraz B Stosunek liczby instrukcji obliczeń do liczby instrukcji dostępu do pamięci wynosi 1:1 Nazywany również compute to global memory access (CGMA) ratio
49 Analiza dostępu do pamięci CGMA ma kluczowy wpływ na wydajność obliczeń GPU Zakładając przepustowość pamięci na poziomie 200GB/sek. pozwala to załadować 200GB/4B = 50Giga liczb typu float Przy CGMA = 1.0 kernel może wykonać co najwyżej 50 GFLOPS operacji na sekundę znacznie mniej, niż szczytowa moc obliczeniowa (np GFLOPS) W celu poprawy wydajności należy zwiększyć wartość CGMA, tj. więcej obliczeń na daną liczbę odczytów/zapisów pamięci głównej
50 Optymalizacja dostępu do pamięci Zauważmy, że wątki odwołują się w części do tych samych danych B 0,0 B 0,1 B 1,0 B 1,1 B 2,0 B 2,1 B 3,0 B 3,1 A 0,0 A 0,1 A 0,2 A 0,3 C 0,0 C 0,1 C 0,2 C 0,3 A 1,0 A 1,1 A 1,2 A 1,3 C 1,0 C 1,1 C 1,2 C 1,3 C 2,0 C 2,1 C 2,2 C 2,3 C 3,0 C 3,1 C 3,2 C 3,3 4 wątki wykonują 4 (4 + 4) = 32 odczyty pamięci, przy czym różnych jest jedynie 16
51 Optymalizacja dostępu do pamięci Jeżeli udałoby się zmusić wątki do współpracy i wykorzystania raz załadowanych danych to transfer danych zmniejszyłby się o połowę Rozwiązaniem jest podzielenie obliczeń na małe porcje 2 2 Każdy wątek ładuje element do pomocniczych tablic N oraz M umieszczonych w pamięci lokalnej B 0,0 B 0,1 B 1,0 B 1,1 B 2,0 B 2,1 B 3,0 B 3,1 A 0,0 A 0,1 A 0,2 A 0,3 C 0,0 C 0,1 C 0,2 C 0,3 A 1,0 A 1,1 A 1,2 A 1,3 C 1,0 C 1,1 C 1,2 C 1,3 C 2,0 C 2,1 C 2,2 C 2,3 C 3,0 C 3,1 C 3,2 C 3,3
52 Optymalizacja dostępu do pamięci Faza I: wątek (0,0) wykonuje N 0,0 = A 0,0 M 0,0 = B 0,0 wątek (1,0) wykonuje N 1,0 = A 1,0 M 1,0 = B 1,0... Faza II: wątek (0,0) wykonuje N 0,0 = A 0,0+2 M 0,0 = B 0+2,0 wątek (1,0) wykonuje N 1,0 = A 1,0+2 M 1,0 = B 1+2,0... A 0,0 A 0,1 A 0,2 A 0,3 B 0,0 B 0,1 B 1,0 B 1,1 B 2,0 B 2,1 B 3,0 B 3,1 C 0,0 C 0,1 C 0,2 C 0,3 A 1,0 A 1,1 A 1,2 A 1,3 C 1,0 C 1,1 C 1,2 C 1,3 C 2,0 C 2,1 C 2,2 C 2,3 C 3,0 C 3,1 C 3,2 C 3,3
53 Optymalizacja dostępu do pamięci Wartość elementu C 0,0 jest sumą (N 0,0 M 0,0 + N 0,1 M 1,0 ) I faza + (N 0,0 M 0,0 + N 0,1 M 1,0 ) II faza Analogicznie dla pozostałych elementów Dzięki podzieleniu obliczeń na kafelki (bloki) poprawiamy lokalność odwołań Oczywiście, można stosować kafelki o rozmiarze większym od 2 2, np
54 Optymalizacja dostępu do pamięci 1 #define TILE_WIDTH 16 2 int col = get_global_id(0); 3 int row = get_global_id(1); 4 local float M[TILE_WIDTH][TILE_WIDTH]; 5 local float N[TILE_WIDTH][TILE_WIDTH]; 6 // Współrzędne wątku wew. kafelka / bloku 7 int tx = get_local_id(0); 8 int ty = get_local_id(1); 9 float sum = 0; 10 for (int m = 0; m < ceil(size / (float)tile_width); ++m) { 11 // Wspólne ładowanie macierzy do tablic pomocniczych 12 M[ty][tx] = A[row * size + m * TILE_WIDTH + tx]; 13 N[ty][tx] = = B[(m * TILE_WIDTH + ty) * size + col]; 14 barrier(clk_local_mem_fence); 15 for (int k = 0; k < TILE_WIDTH; ++k) { 16 sum += M[ty][k] * N[k][tx]; 17 } 18 barrier(clk_local_mem_fence); 19 } 20 C[row * size + col] = sum;
55 Optymalizacja dostępu do pamięci Kafelki o rozmiarach pozwalają zmniejszyć ilość odczytywanych danych 16 razy Liczba obliczeń pozostaje taka sama, czyli CGMA rośnie z 1 do 16 Przy 200GB/sek pozwala to wykonać 200GB/4B = 50Giga x 16 = 800GFLOPS
56 Optymalizacja wzorców dostępu do pamięci Wątki wewnątrz warpów wykonują jednocześnie odczyt / zapis do pamięci (SIMD) 32 wątki 32 adresy Jeżeli jeden czeka, to wszystkie czekają W zależności od adresów odczyt może być wykonany w jednej transakcji na pamięci albo wielu
57 Wzorce dostępu do pamięci globalnej Pamięć globalna wątki Łączony (ang. coalesced) dostęp do pamięci Dane odczytywane są segmentami (ang. chunk) nawet jeżeli ptrzebujemy tylko jeden element (słowo)
58 Wzorce dostępu do pamięci globalnej Pamięć globalna wątki Łączony (ang. coalesced) dostęp do pamięci Rozłączny dostęp do pamięci
59 Łączony dostęp do pamięci 1 // Przykład łączonego dostępu do pamięci 2 sum += data[ get_global_id(0) ]; 1 // Przykład niełączonego dostępu 2 sum += data[ get_global_id(0) * 4 ];
60 Wzorce dostępu do pamięci globalnej W architekturze Nvidia Fermi dostępne są dwa rodzaje odczytów: Buforowany (ang. cached) tryb domyślny: próba odczytu z L1, następnie L2, następnie pam. globalnej dane odczytywane są w 128 bajtowych porcjach (32 x 4B) wiersz pam. podręcznej Nie buforowane: próba odczytu z L2, następnie z pam. globalnej dane odczytywane są w porcjach po 32 bajty Jeden rodzaj zapisu do pam. globalnej unieważnienie L1 zapis do L2
61 Przykładowe wzorce odczytu 32 wątki odczytują kolejno 4-bajtowe słowa Adresy mieszczą się w 1 wierszu pam. podręcznej 128 bajtów przesyłanych magistralą Addresses from a warp Memory addresses
62 Przykładowe wzorce odczytu 32 wątki odczytują 4-bajtowe słowa, adresy wymieszane Adresy mieszczą się w 1 wierszu pam. podręcznej 128 bajtów przesyłanych magistralą addresses from a warp Memory addresses
63 Przykładowe wzorce odczytu 32 wątki odczytują 4-bajtowe słowa, kolejne adresy Adresy mieszczą się w 2 wierszach pam. podręcznej 256 bajtów przesyłanych magistralą (50% transferu użyteczne) addresses from a warp Memory addresses
64 Przykładowe wzorce odczytu 32 wątki odczytują to samo 4-bajtowe słowo Adres mieści się w 1 wierszu pam. podręcznej 128 bajtów przesyłanych magistralą (4/128 = 3.125% transferu użyteczne) addresses from a warp Memory addresses
65 Przykładowe wzorce odczytu 32 wątki odczytują 4 bajtowe słowa pod różnymi, rozproszonymi adresami Adresy mieszczą się w N wierszach pam. podręcznej N 128 bajtów przesyłanych magistralą z czego 128/(N 128) użyteczne addresses from a warp Memory addresses
66 Pamięć współdzielona konflikty Pamięć współdzielona podzielona jest na banki W pojedynczym cyklu można odczytać słowo z każdego banku W przypadku gdy kilka wątków próbuje odczytać dane z tego samego banku następuje konflikt żądania odczytu są szeregowane Bank 0 Bank 1 Bank 2 Bank 3 Bank 4 Bank 5 Bank 6 Bank 7 Bank 15
67 Pamięć współdzielona konflikty Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Bank 0 Bank 1 Bank 2 Bank 3 Bank 4 Bank 5 Bank 6 Bank 7 Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Bank 0 Bank 1 Bank 2 Bank 3 Bank 4 Bank 5 Bank 6 Bank 7 Thread 15 Bank 15 Thread 15 Bank 15 Jeżeli każdy wątek próbuje odczytać dane z innego banku nie ma konfliktu
68 Pamięć współdzielona konflikty Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 8 Thread 9 Thread 10 Thread 11 Bank 0 Bank 1 Bank 2 Bank 3 Bank 4 Bank 5 Bank 6 Bank 7 Bank 15 Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Thread 15 x8 x8 Bank 0 Bank 1 Bank 2 Bank 7 Bank 8 Bank 9 Bank 15 Przykłady konfliktów 2-drożnego oraz 8-drożnego
69 Pamięć współdzielona konflikty W celu wykrycia konfliktów można skorzystać z profilera Nvidia Visual Profiler AMD CodeXL Usunięcie konfliktów wymaga zmiany kolejności operacji na pamięci współdzielonej lub umieszczenia danych w pamięci w taki sposób, by nie zachodził konflikt
Mnożenie macierzy. Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność
Mnożenie macierzy Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność Literatura: Introduction to Parallel Computing; Grama, Gupta, Karypis, Kumar; 1 Mnożenie macierzy dostęp do
Bardziej szczegółowoBazy danych. Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15
Bazy danych Andrzej Łachwa, UJ, 2013 andrzej.lachwa@uj.edu.pl www.uj.edu.pl/web/zpgk/materialy 9/15 Przechowywanie danych Wykorzystanie systemu plików, dostępu do plików za pośrednictwem systemu operacyjnego
Bardziej szczegółowoProgramowanie 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ń
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 GPGPU Modele programowania GPGPU CUDA pierwszy naprawdę popularny model programowania GPGPU OpenCL wzorowany na CUDA,
Bardziej szczegółowoWprowadzenie do programowania w środowisku CUDA. Środowisko CUDA
Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Tydzień 6 RSC i CSC Znaczenie terminów CSC Complete nstruction Set Computer komputer o pełnej liście rozkazów. RSC Reduced nstruction Set Computer komputer o zredukowanej liście
Bardziej szczegółowoarchitektura komputerów w. 6 Pamięć I
architektura komputerów w. 6 Pamięć I Pamięć -własności Pojemność rozmiar słowa liczba słów jednostka adresowalna jednostka transferu typ dostępu skojarzeniowy swobodny bezpośredni sekwencyjny wydajność
Bardziej szczegółowoAccelerated Graphics Port AGP Advanced Graphics Port AGP jest magistralą równoległą.
AGP i PCI Express Port AGP Accelerated Graphics Port (AGP, czasem nazywany Advanced Graphics Port) zmodyfikowana magistrala PCI, zaprojektowana do obsługi kart graficznych. Jest to 32-bitowa magistrala
Bardziej szczegółowoCUDA. cudniejsze przyk ady
CUDA cudniejsze przyk ady Agenda: CPU vs. GPU Mnożenie macierzy CPU Mnożenie macierzy - GPU Sploty Macierze CPU vs. GPU CPU: GPU: Mnożenie wykonywane w kolejnych iteracjach pętli. Przechodzimy przez pierwszy
Bardziej szczegółowoSieć komputerowa grupa komputerów lub innych urządzeo połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów, na przykład:
Sieci komputerowe Sieć komputerowa grupa komputerów lub innych urządzeo połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów, na przykład: korzystania ze wspólnych urządzeo, np.
Bardziej szczegółowoProgramowanie kart graficznych
CUDA Compute Unified Device Architecture Programowanie kart graficznych mgr inż. Kamil Szostek AGH, WGGIOŚ, KGIS Wykorzystano materiały z kursu Programowanie kart graficznych prostsze niż myślisz M. Makowski
Bardziej szczegółowoPodstawowe działania w rachunku macierzowym
Podstawowe działania w rachunku macierzowym Marcin Detka Katedra Informatyki Stosowanej Kielce, Wrzesień 2004 1 MACIERZE 1 1 Macierze Macierz prostokątną A o wymiarach m n (m wierszy w n kolumnach) definiujemy:
Bardziej szczegółowoArchitektura Systemów Komputerowych. Sterowanie programem skoki Przerwania
Architektura Systemów Komputerowych Sterowanie programem skoki Przerwania 1 Sterowanie programem - skoki Kolejność wykonywania instrukcji programu jest zazwyczaj zgodna z kolejnością ich umiejscowienia
Bardziej szczegółowoDEMERO Automation Systems
Programowanie wektorowych przetwornic częstotliwości serii POSIDRIVE FDS5000 / MDS5000 i serwonapędów POSIDRIVE MDS5000 / POSIDYN SDS5000 firmy Stober Antriebstechnik Konfiguracja parametrów w programie
Bardziej szczegółowoProgramowanie Współbieżne
Programowanie Współbieżne Agnieszka Łupińska 5 października 2016 Hello World! helloworld.cu: #include global void helloworld(){ int thid = (blockidx.x * blockdim.x) + threadidx.x; printf("hello
Bardziej szczegółowoZagadnienia transportowe
Mieczysław Połoński Zakład Technologii i Organizacji Robót Inżynieryjnych Wydział Inżynierii i Kształtowania Środowiska SGGW Zagadnienia transportowe Z m punktów odprawy ma być wysłany jednorodny produkt
Bardziej szczegółowoBudowa systemów komputerowych
Budowa systemów komputerowych dr hab. inż. Krzysztof Patan, prof. PWSZ Instytut Politechniczny Państwowa Wyższa Szkoła Zawodowa w Głogowie k.patan@issi.uz.zgora.pl Współczesny system komputerowy System
Bardziej szczegółowoOpis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej
Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej 3.1 Informacje ogólne Program WAAK 1.0 służy do wizualizacji algorytmów arytmetyki komputerowej. Oczywiście istnieje wiele narzędzi
Bardziej szczegółowoHybrydowy system obliczeniowy z akceleratorami GPU
Przemysław Stpiczyński Hybrydowy system obliczeniowy z akceleratorami GPU [A hybrid computing system with GPU accelerators] Wstęp Konstrukcja komputerów oraz klastrów komputerowych o dużej mocy obliczeniowej
Bardziej szczegółowoG PROGRAMMING. Part #4
G PROGRAMMING Part #4 Tablice, wykresy, klastry Tablice Zbiór elementów danych tego samego typu Zastosowanie gromadzenie danych z powtarzalnych operacji odczytu, obliczeń (magazynowanie danych przebiegów
Bardziej szczegółowoPRZETWORNIK NAPIĘCIE - CZĘSTOTLIWOŚĆ W UKŁADZIE ILORAZOWYM
PRZETWORNIK NAPIĘCIE - CZĘSTOTLIWOŚĆ W UKŁADZIE ILORAZOWYM dr inż. Eligiusz Pawłowski Politechnika Lubelska, Wydział Elektryczny, ul. Nadbystrzycka 38 A, 20-618 LUBLIN E-mail: elekp@elektron.pol.lublin.pl
Bardziej szczegółowoKONKURSY MATEMATYCZNE. Treść zadań
KONKURSY MATEMATYCZNE Treść zadań Wskazówka: w każdym zadaniu należy wskazać JEDNĄ dobrą odpowiedź. Zadanie 1 Wlewamy 1000 litrów wody do rurki w najwyższym punkcie systemu rurek jak na rysunku. Zakładamy,
Bardziej szczegółowoINSTRUKCJA OBSŁUGI URZĄDZENIA: 0101872HC8201
INSTRUKCJA OBSŁUGI URZĄDZENIA: PZ-41SLB-E PL 0101872HC8201 2 Dziękujemy za zakup urządzeń Lossnay. Aby uŝytkowanie systemu Lossnay było prawidłowe i bezpieczne, przed pierwszym uŝyciem przeczytaj niniejszą
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU
Programowanie procesorów graficznych GPGPU 1 OpenCL projektowanie kerneli Przypomnienie: kernel program realizowany przez urządzenie OpenCL wątek (work item) rdzeń (processing element): jeden wątek wykonywany
Bardziej szczegółowoOprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD
Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD 1. Wprowadzenie DuŜa grupa sterowników mikroprocesorowych wymaga obsługi przycisków, które umoŝliwiają uŝytkownikowi uruchamianie
Bardziej szczegółowoProgramowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1
Programowanie procesorów graficznych GPGPU Krzysztof Banaś Obliczenia równoległe 1 Projektowanie kerneli Zasady optymalizacji: należy maksymalizować liczbę wątków (w rozsądnych granicach, granice zależą
Bardziej szczegółowo2.Prawo zachowania masy
2.Prawo zachowania masy Zdefiniujmy najpierw pewne podstawowe pojęcia: Układ - obszar przestrzeni o określonych granicach Ośrodek ciągły - obszar przestrzeni którego rozmiary charakterystyczne są wystarczająco
Bardziej szczegółowoKomunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET
PoniŜszy dokument zawiera opis konfiguracji programu STEP7 dla sterowników SIMATIC S7 300/S7 400, w celu stworzenia komunikacji między dwoma stacjami S7 300 za pomocą sieci Industrial Ethernet, protokołu
Bardziej szczegółowoRozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu
Rozdział 6 Pakowanie plecaka 6.1 Postawienie problemu Jak zauważyliśmy, szyfry oparte na rachunku macierzowym nie są przerażająco trudne do złamania. Zdecydowanie trudniejszy jest kryptosystem oparty na
Bardziej szczegółowoProcesory kart graficznych i CUDA wer 1.2 6.05.2015
wer 1.2 6.05.2015 Litreratura: CUDA textbook by David Kirk from NVIDIA and Prof. Wen-mei Hwu from UIUC. CUDA w przykładach. Wprowadzenie do ogólnego programowania procesorów GP, J.Sanders, E.Kandrot, Helion
Bardziej szczegółowoSieci komputerowe cel
Sieci komputerowe cel współuŝytkowanie programów i plików; współuŝytkowanie innych zasobów: drukarek, ploterów, pamięci masowych, itd. współuŝytkowanie baz danych; ograniczenie wydatków na zakup stacji
Bardziej szczegółowoBioinformatyka Laboratorium, 30h. Michał Bereta mbereta@pk.edu.pl www.michalbereta.pl
Bioinformatyka Laboratorium, 30h Michał Bereta mbereta@pk.edu.pl www.michalbereta.pl 1 Filogenetyka molekularna wykorzystuje informację zawartą w sekwencjach aminokwasów lub nukleotydów do kontrukcji drzew
Bardziej szczegółowoSystemy wbudowane Mikrokontrolery
Systemy wbudowane Mikrokontrolery Budowa i cechy mikrokontrolerów Architektura mikrokontrolerów rodziny AVR 1 Czym jest mikrokontroler? Mikrokontroler jest systemem komputerowym implementowanym w pojedynczym
Bardziej szczegółowoElementy cyfrowe i układy logiczne
Elementy cyfrowe i układy logiczne Wykład Legenda Zezwolenie Dekoder, koder Demultiplekser, multiplekser 2 Operacja zezwolenia Przykład: zamodelować podsystem elektroniczny samochodu do sterowania urządzeniami:
Bardziej szczegółowoDE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15
DE-WZP.261.11.2015.JJ.3 Warszawa, 2015-06-15 Wykonawcy ubiegający się o udzielenie zamówienia Dotyczy: postępowania prowadzonego w trybie przetargu nieograniczonego na Usługę druku książek, nr postępowania
Bardziej szczegółowoSTEROWNIK BIOLOGICZNYCH OCZYSZCZALNI ŚCIEKÓW
STEROWNIK BIOLOGICZNYCH OCZYSZCZALNI ŚCIEKÓW TYPU MINI ZIELONA GÓRA OPIS: Sterownik ST-04 przeznaczony jest do sterowania małych biologicznych oczyszczalni ścieków. Sterownik posiada 6 wejść cyfrowych,
Bardziej szczegółowoTransformator Elektroniczny do LED 0W-40W Współpracuje z inteligentnymi ściemniaczami oświetlenia. Instrukcja. Model: TE40W-DIMM-LED-IP64
Elektroniczny do LED 0W-40W Współpracuje z inteligentnymi ściemniaczami oświetlenia Instrukcja Model: TE40W-DIMM-LED-IP64 Zastosowanie: elektroniczny do LED został zaprojektowany do zasilania źródeł światła
Bardziej szczegółowoHarmonogramowanie projektów Zarządzanie czasem
Harmonogramowanie projektów Zarządzanie czasem Zarządzanie czasem TOMASZ ŁUKASZEWSKI INSTYTUT INFORMATYKI W ZARZĄDZANIU Zarządzanie czasem w projekcie /49 Czas w zarządzaniu projektami 1. Pojęcie zarządzania
Bardziej szczegółowoAPI transakcyjne BitMarket.pl
API transakcyjne BitMarket.pl Wersja 20140314 1. Sposób łączenia się z API... 2 1.1. Klucze API... 2 1.2. Podpisywanie wiadomości... 2 1.3. Parametr tonce... 2 1.4. Odpowiedzi serwera... 3 1.5. Przykładowy
Bardziej szczegółowoHiTiN Sp. z o. o. Przekaźnik kontroli temperatury RTT 4/2 DTR. 40 432 Katowice, ul. Szopienicka 62 C tel/fax.: + 48 (32) 353 41 31. www.hitin.
HiTiN Sp. z o. o. 40 432 Katowice, ul. Szopienicka 62 C tel/fax.: + 48 (32) 353 41 31 www.hitin.pl Przekaźnik kontroli temperatury RTT 4/2 DTR Katowice, 1999 r. 1 1. Wstęp. Przekaźnik elektroniczny RTT-4/2
Bardziej szczegółowoOSTRZEŻENIA DANE TECHNICZNE. Wbudowana bateria słoneczna oraz alkaliczna bateria manganowa (1,5 V LR44)
KALKULATOR ELEKTRONICZNY EL-M711E INSTRUKCJA OBSŁUGI OSTRZEŻENIA Nie wolno wywierać nadmiernego nacisku na wyświetlacz ciekłokrystaliczny, ponieważ jest on wykonany ze szkła. W żadnym wypadku nie wolno
Bardziej szczegółowoGrupa bezpieczeństwa kotła KSG / KSG mini
Grupa bezpieczeństwa kotła KSG / KSG mini Instrukcja obsługi i montażu 77 938: Grupa bezpieczeństwa kotła KSG 77 623: Grupa bezpieczeństwa kotła KSG mini AFRISO sp. z o.o. Szałsza, ul. Kościelna 7, 42-677
Bardziej szczegółowoJak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.
Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach. 1 PROJEKTY KOSZTOWE 2 PROJEKTY PRZYCHODOWE 3 PODZIAŁ PROJEKTÓW ZE WZGLĘDU
Bardziej szczegółowoTematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami.
Tematyka i rozwiązania metodyczne kolejnych zajęć lekcyjnych wraz z ćwiczeniami. Zagadnienie tematyczne (blok tematyczny): Bazy danych (Podr.cz. II, str.109-138) Podstawa programowa: Rozwiązywanie problemów
Bardziej szczegółowomgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 6, strona 1. Format JPEG
mgr inż. Grzegorz Kraszewski SYSTEMY MULTIMEDIALNE wykład 6, strona 1. Format JPEG Cechy formatu JPEG Schemat blokowy kompresora Transformacja koloru Obniżenie rozdzielczości chrominancji Podział na bloki
Bardziej szczegółowoMacierze dyskowe RAID
Wrocław, 22 maja 2007 Agenda 1 Wstęp 2 Nowa koncepcja SMDA 3 Metody realizacji macierzy dyskowych 4 Podsumowanie Przyczyny powstania RAID Redundant Array of Independent Disks Przyczyny powstania: Zwiększenie
Bardziej szczegółowotel/fax 018 443 82 13 lub 018 443 74 19 NIP 7343246017 Regon 120493751
Zespół Placówek Kształcenia Zawodowego 33-300 Nowy Sącz ul. Zamenhoffa 1 tel/fax 018 443 82 13 lub 018 443 74 19 http://zpkz.nowysacz.pl e-mail biuro@ckp-ns.edu.pl NIP 7343246017 Regon 120493751 Wskazówki
Bardziej szczegółowoInstrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)
Instrukcja obsługi zamka bibi-z50 (zamek autonomiczny z czytnikiem identyfikatora Mifare) bibi-z50 Copyright 2014 by MicroMade All rights reserved Wszelkie prawa zastrzeżone MicroMade Gałka i Drożdż sp.
Bardziej szczegółowoNUMER IDENTYFIKATORA:
Społeczne Liceum Ogólnokształcące z Maturą Międzynarodową im. Ingmara Bergmana IB WORLD SCHOOL 53 ul. Raszyńska, 0-06 Warszawa, tel./fax 668 54 5 www.ib.bednarska.edu.pl / e-mail: liceum.ib@rasz.edu.pl
Bardziej szczegółowoSystem Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy
Instrukcja obsługi programu 2.11. Przygotowanie programu do pracy - ECP Architektura inter/intranetowa System Informatyczny CELAB Przygotowanie programu do pracy - Ewidencja Czasu Pracy Spis treści 1.
Bardziej szczegółowo2. Charakterystyka obliczeń współbieżnych i rozproszonych.
Od autora(ooo to o mnie mowa :)): Starałem się wygrzebać w necie trochę więcej niż u Gronka na samych slajdach, dlatego odpowiedzi na niektóre pytania są długie (w sensie dłuższe niż normalnie :)), wydaje
Bardziej szczegółowo14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.
Matematyka 4/ 4.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe. I. Przypomnij sobie:. Wiadomości z poprzedniej lekcji... Że przy rozwiązywaniu zadań tekstowych wykorzystujących
Bardziej szczegółowoNACZYNIE WZBIORCZE INSTRUKCJA OBSŁUGI INSTRUKCJA INSTALOWANIA
NACZYNIE WZBIORCZE INSTRUKCJA OBSŁUGI INSTRUKCJA INSTALOWANIA Kraków 31.01.2014 Dział Techniczny: ul. Pasternik 76, 31-354 Kraków tel. +48 12 379 37 90~91 fax +48 12 378 94 78 tel. kom. +48 665 001 613
Bardziej szczegółowoStrategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania).
Strategia rozwoju kariery zawodowej - Twój scenariusz (program nagrania). W momencie gdy jesteś studentem lub świeżym absolwentem to znajdujesz się w dobrym momencie, aby rozpocząć planowanie swojej ścieżki
Bardziej szczegółowoCUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.
CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie W prezentacji wykorzystano materiały firmy NVIDIA (http://www.nvidia.com) 1 Architektura karty graficznej W porównaniu z tradycyjnym
Bardziej szczegółowoDr inż. Andrzej Tatarek. Siłownie cieplne
Dr inż. Andrzej Tatarek Siłownie cieplne 1 Wykład 3 Sposoby podwyższania sprawności elektrowni 2 Zwiększenie sprawności Metody zwiększenia sprawności elektrowni: 1. podnoszenie temperatury i ciśnienia
Bardziej szczegółowo1 Granice funkcji. Definicja 1 (Granica w sensie Cauchy ego). Mówimy, że liczba g jest granicą funkcji f(x) w punkcie x = a, co zapisujemy.
Granice funkcji Definicja (Granica w sensie Cauchy ego). Mówimy, że liczba g jest granicą funkcji f() w punkcie = a, co zapisujemy f() = g (.) a jeżeli dla każdego ε > 0 można wskazać taką liczbę (istnieje
Bardziej szczegółowoSERI A 93 S E RI A 93 O FLUSH GRID WITHOUT EDGE TAB
SERIA E93 CONIC FRINCTION CONIC 2 SERIA 93 SERIA 93 O FLUSH GRID WITHOUT EDGE TAB Podziałka Powierzchnia 30 mm Flush Grid Prześwit 47% Grubość Minimalny promień skrętu taśmy Układ napędowy Szerokość taśmy
Bardziej szczegółowoProgramowanie 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
Bardziej szczegółowoWarunki Oferty PrOmOcyjnej usługi z ulgą
Warunki Oferty PrOmOcyjnej usługi z ulgą 1. 1. Opis Oferty 1.1. Oferta Usługi z ulgą (dalej Oferta ), dostępna będzie w okresie od 16.12.2015 r. do odwołania, jednak nie dłużej niż do dnia 31.03.2016 r.
Bardziej szczegółowoOŚWIETLENIE PRZESZKLONEJ KLATKI SCHODOWEJ
OŚWIETLENIE PRZESZKLONEJ KLATKI SCHODOWEJ Przykład aplikacji: rys. 1 rys. 2 rys. 3 rys. 4 W tym przypadku do sterowania oświetleniem wykorzystano przekaźniki fi rmy Finder: wyłącznik zmierzchowy 11.01.8.230.0000
Bardziej szczegółowoPodejmowanie decyzji. Piotr Wachowiak
Podejmowanie decyzji Co to jest sytuacja decyzyjna? Jest to sytuacja, kiedy następuje odchylenie stanu istniejącego od stanu pożądanego. Rozwiązanie problemu decyzyjnego polega na odpowiedzeniu na pytanie:
Bardziej szczegółowoType ETO2 Controller for ice and snow melting
Type ETO2 Controller for ice and snow melting 57652 06/08 (BJ) English page 2 Deutsch page 14 page 26 Russian page 38 SPIS TREŚCI Wyjaśnienie pojęć.................... Strona 26 Wprowadzenie.....................
Bardziej szczegółowoZarządzanie projektami. wykład 1 dr inż. Agata Klaus-Rosińska
Zarządzanie projektami wykład 1 dr inż. Agata Klaus-Rosińska 1 DEFINICJA PROJEKTU Zbiór działań podejmowanych dla zrealizowania określonego celu i uzyskania konkretnego, wymiernego rezultatu produkt projektu
Bardziej szczegółowoUchwała nr 1 Nadzwyczajnego Walnego Zgromadzenia J.W. Construction Holding S.A. z siedzibą w Ząbkach z dnia 1 kwietnia 2008 roku
Uchwała nr 1 w sprawie wyboru Przewodniczącego Działając na podstawie art. 409 1 kodeksu spółek handlowych oraz 3 ust. 2 lit. c Regulaminu Walnego Zgromadzenia oraz dokonywania wyboru członków Rady Nadzorczej,
Bardziej szczegółowoWstęp do programowania
Wieczorowe Studia Licencjackie Wrocław, 4..2006 Wstęp do programowania Wykład nr 7 (w oparciu o notatki K. Lorysia, z modyfikacjami) Obliczanie współczynnika dwumianowego Newtona. Definicja. n = m n! m!(
Bardziej szczegółowoRegulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska
Załącznik nr 1 do Lokalnej Strategii Rozwoju na lata 2008-2015 Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska Przepisy ogólne 1 1. Walne Zebranie Członków
Bardziej szczegółowoRZECZPOSPOLITA POLSKA. Prezydent Miasta na Prawach Powiatu Zarząd Powiatu. wszystkie
RZECZPOSPOLITA POLSKA Warszawa, dnia 11 lutego 2011 r. MINISTER FINANSÓW ST4-4820/109/2011 Prezydent Miasta na Prawach Powiatu Zarząd Powiatu wszystkie Zgodnie z art. 33 ust. 1 pkt 2 ustawy z dnia 13 listopada
Bardziej szczegółowoFUNKCJE STEROWNIKA PK-35 PID
Sterownik PK-35 PID Uwaga!!! Montażu dokonuje osoba posiadająca odpowiednie uprawnienia elektryczne. UWAGA!!! FUNKCJĘ PID WYBIERAMY PO UPRZEDNIM ODPOWIEDNIM DOBRANIU WSZYSKICH PARAMETRÓW PODAJNIKA W ZALEŻNOŚCI
Bardziej szczegółowoXIII KONKURS MATEMATYCZNY
XIII KONKURS MTMTYZNY L UZNIÓW SZKÓŁ POSTWOWYH organizowany przez XIII Liceum Ogólnokształcace w Szczecinie FINŁ - 19 lutego 2013 Test poniższy zawiera 25 zadań. Za poprawne rozwiązanie każdego zadania
Bardziej szczegółowoPRZEPISY KLASYFIKACJI I BUDOWY STATKÓW MORSKICH
PRZEPISY KLASYFIKACJI I BUDOWY STATKÓW MORSKICH ZMIANY NR 2/2010 do CZĘŚCI VIII INSTALACJE ELEKTRYCZNE I SYSTEMY STEROWANIA 2007 GDAŃSK Zmiany Nr 2/2010 do Części VIII Instalacje elektryczne i systemy
Bardziej szczegółowoWprowadzenie do programowania w środowisku CUDA. Środowisko CUDA
Wprowadzenie do programowania w środowisku CUDA Środowisko CUDA 1 Budowa procesora CPU i GPU Architektura GPU wymaga większej ilości tranzystorów na przetwarzanie danych Control ALU ALU ALU ALU Cache DRAM
Bardziej szczegółowoOpracowała: Karolina Król-Komarnicka, kierownik działu kadr i płac w państwowej instytucji
OPUBLIKOWANO: 1 SIERPNIA 2013 ZAKTUALIZOWANO: 12 KWIETNIA 2016 Urlop rodzicielski aktualizacja Opracowała: Karolina Król-Komarnicka, kierownik działu kadr i płac w państwowej instytucji Ustawa z dnia 26
Bardziej szczegółowoSystemy wbudowane. Paweł Pełczyński ppelczynski@swspiz.pl
Systemy wbudowane Paweł Pełczyński ppelczynski@swspiz.pl 1 Program przedmiotu Wprowadzenie definicja, zastosowania, projektowanie systemów wbudowanych Mikrokontrolery AVR Programowanie mikrokontrolerów
Bardziej szczegółowoŠkodaOctavia Combi 4 4 & Superb 4 4
MIĘDZYOSIOWE SPRZĘGŁO HALDEX CZWARTEJ GENERACJI Międzyosiowe sprzęgło Haldex czwartej generacji zapewnia napęd na cztery koła w nowym Superbie 4 4 oraz Octavii Combi 4 4, zastępując sprzęgło drugiej generacji.
Bardziej szczegółowoINSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56
INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56 Program Liczarka 2000 służy do archiwizowania i drukowania rozliczeń z przeprowadzonych transakcji pieniężnych. INSTALACJA PROGRAMU Program instalujemy na komputerze
Bardziej szczegółowoSzczegółowe zasady obliczania wysokości. i pobierania opłat giełdowych. (tekst jednolity)
Załącznik do Uchwały Nr 1226/2015 Zarządu Giełdy Papierów Wartościowych w Warszawie S.A. z dnia 3 grudnia 2015 r. Szczegółowe zasady obliczania wysokości i pobierania opłat giełdowych (tekst jednolity)
Bardziej szczegółowoWykład 4 Wybrane zagadnienia programowania w C++
Wykład 4 Wybrane zagadnienia programowania w C++ Przykład programu obiektowego Dziedziczenie polimorfizm i metody wirtualne Wzorce (szablony) funkcji Wzorce klas 2016-01-03 Bazy danych-1 W4 1 Dziedziczenie
Bardziej szczegółowoUniwersytet Warszawski Teoria gier dr Olga Kiuila LEKCJA 5
Ad przykład: Stonoga LEKCJA 5 SPNE: każdy gracz zaakceptuje propozycje przyjęcia dowolnej sumy w każdym okresie (czyli każdy gracz wierze, że rywal skończy grę w następnym kroku) Interpretacja gry Stonoga:
Bardziej szczegółowoenova Workflow Obieg faktury kosztowej
enova Workflow Obieg faktury kosztowej Spis treści 1. Wykorzystanie procesu... 3 1.1 Wprowadzenie dokumentu... 3 1.2 Weryfikacja merytoryczna dokumentu... 5 1.3 Przydzielenie zadań wybranym operatorom...
Bardziej szczegółowoC5 - D4EB0FP0 - Informacje ogólne : Poduszki powietrzne INFORMACJE OGÓLNE : PODUSZKI POWIETRZNE
Strona 1 z 7 INFORMACJE OGÓLNE : PODUSZKI POWIETRZNE 1. Przedmowa Poduszka powietrzna niezależnie, czy czołowa, czy boczna, jest elementem wyposażenia, który uzupełnia ochronę jaką zapewnia pas bezpieczeństwa.
Bardziej szczegółowoI. LOGICZNE STRUKTURY DRZEWIASTE
I LOGICZNE STRUKTURY DRZEWIASTE Analizując dany problem uzyskuje się zadanie projektowe w postaci pewnego zbioru danych Metoda morfologiczna, która została opracowana w latach 1938-1948 przez amerykańskiego
Bardziej szczegółowoMatematyka:Matematyka I - ćwiczenia/granice funkcji
Matematyka:Matematyka I - ćwiczenia/granice funkcji 1 Matematyka:Matematyka I - ćwiczenia/granice funkcji Granice funkcji Zadanie 1 Wykorzystując definicję Heinego granicy funkcji, znaleźć (1) Zadanie
Bardziej szczegółowoSCHEMAT ZBIORNIKA HYDROFOROWEGO ZE STALI NIERDZEWNEJ
Stosowanie pomp i hydroforów do czystej wody oraz pomp do wody brudnej może być niezastąpionym rozwiązaniem w przypadku braku instalacji wodociągowej i kanalizacyjnej. Do domków letniskowych lub szklarni
Bardziej szczegółowoGEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007
GEO-SYSTEM Sp. z o.o. 02-732 Warszawa, ul. Podbipięty 34 m. 7, tel./fax 847-35-80, 853-31-15 http:\\www.geo-system.com.pl e-mail:geo-system@geo-system.com.pl GEO-RCiWN Rejestr Cen i Wartości Nieruchomości
Bardziej szczegółowoMikrokontrolery AVR. Konfigurowanie mikrokontrolera ATMEGA16
Mikrokontrolery AVR Konfigurowanie mikrokontrolera ATMEGA16 Białystok, 2004 W mikrokontrolerach AVR obok bitów zabezpieczających istnieją bity konfiguracyjne (ang. Fuse). Bite te konfigurują wybrane zespoły
Bardziej szczegółowoChmura obliczeniowa. do przechowywania plików online. Anna Walkowiak CEN Koszalin 2015-10-16
Chmura obliczeniowa do przechowywania plików online Anna Walkowiak CEN Koszalin 2015-10-16 1 Chmura, czyli co? Chmura obliczeniowa (cloud computing) to usługa przechowywania i wykorzystywania danych, do
Bardziej szczegółowoProgramowanie CUDA informacje praktycznie i. Wersja
Programowanie CUDA informacje praktycznie i przykłady Wersja 16.12.2013 Podstawowe operacje na GPU cudasetdevice() Określenie GPU i ustanowienie kontekstu (analog w GPU tego czym jest proces dla CPU) dla
Bardziej szczegółowoTEST WIADOMOŚCI: Równania i układy równań
Poziom nauczania: Gimnazjum, klasa II Przedmiot: Matematyka Dział: Równania i układy równań Czas trwania: 45 minut Wykonała: Joanna Klimeczko TEST WIADOMOŚCI: Równania i układy równań Liczba punktów za
Bardziej szczegółowoInstrukcja. sporządzania rocznych sprawozdań Rb-WSa i Rb-WSb o wydatkach strukturalnych
Załącznik nr 40 Instrukcja sporządzania rocznych sprawozdań Rb-WSa i Rb-WSb o wydatkach strukturalnych 1. 1. Jednostka sporządza sprawozdanie z wydatków strukturalnych poniesionych z krajowych środków
Bardziej szczegółowo1. Od kiedy i gdzie należy złożyć wniosek?
1. Od kiedy i gdzie należy złożyć wniosek? Wniosek o ustalenie prawa do świadczenia wychowawczego będzie można składać w Miejskim Ośrodku Pomocy Społecznej w Puławach. Wnioski będą przyjmowane od dnia
Bardziej szczegółowoDobór nastaw PID regulatorów LB-760A i LB-762
1 z 5 Dobór nastaw PID regulatorów LB-760A i LB-762 Strojenie regulatorów LB-760A i LB-762 Nastawy regulatora PID Regulatory PID (rolnicze np.: LB-760A - poczynając od wersji 7.1 programu ładowalnego,
Bardziej szczegółowoWYROK W IMIENIU RZECZYPOSPOLITEJ POLSKIEJ. SSN Bogusław Cudowski (przewodniczący) SSN Jolanta Frańczak (sprawozdawca) SSN Krzysztof Staryk
Sygn. akt II UK 27/15 WYROK W IMIENIU RZECZYPOSPOLITEJ POLSKIEJ Sąd Najwyższy w składzie: Dnia 3 lutego 2016 r. SSN Bogusław Cudowski (przewodniczący) SSN Jolanta Frańczak (sprawozdawca) SSN Krzysztof
Bardziej szczegółowoProgramator pamięci EEPROM
Programator pamięci EEPROM Model M- do Dydaktycznego Systemu Mikroprocesorowego DSM-5 Instrukcja uŝytkowania Copyright 007 by MicroMade All rights reserved Wszelkie prawa zastrzeŝone MicroMade Gałka i
Bardziej szczegółowoAkademickie Centrum Informatyki PS. Wydział Informatyki PS
Akademickie Centrum Informatyki PS Wydział Informatyki PS Wydział Informatyki Sieci komputerowe i Telekomunikacyjne ROUTING Krzysztof Bogusławski tel. 4 333 950 kbogu@man.szczecin.pl 1. Wstęp 2. Tablica
Bardziej szczegółowoPROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec
PROE wykład 7 kontenery tablicowe, listy dr inż. Jacek Naruniec Prosty kontener oparty na tablicach Funkcja dodawanie pojedynczego słonia do kontenera: 1 2 3 4 5 6 7 11 12 13 14 15 16 17 21 22 23 24 25
Bardziej szczegółowoROZWIĄZANIA ZADAŃ Zestaw P3 Odpowiedzi do zadań zamkniętych
PRZYKŁADOWY ARKUSZ EGZAMINACYJNY POZIOM PODSTAWOWY ROZWIĄZANIA ZADAŃ Zestaw P3 Odpowiedzi do zadań zamkniętych Numer zadania 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 Odpowiedź A B B C C D C B B C
Bardziej szczegółowoNiezależnie od rodzaju materiału dźwiękowego ocenie podlegały następujące elementy pracy egzaminacyjnej:
W czasie przeprowadzonego w czerwcu 2012 roku etapu praktycznego egzaminu potwierdzającego kwalifikacje zawodowe w zawodzie asystent operatora dźwięku zastosowano sześć zadań. Rozwiązanie każdego z zadań
Bardziej szczegółowo