Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego



Podobne dokumenty
Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

i3: internet - infrastruktury - innowacje

Programowanie procesorów graficznych GPGPU

JCuda Czy Java i CUDA mogą się polubić? Konrad Szałkowski

Programowanie Współbieżne

Programowanie kart graficznych

Programowanie aplikacji równoległych i rozproszonych

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

CUDA. cudniejsze przyk ady

Przetwarzanie Równoległe i Rozproszone

Moc płynąca z kart graficznych

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Tesla. Architektura Fermi

CUDA część 1. platforma GPGPU w obliczeniach naukowych. Maciej Matyka

CUDA Median Filter filtr medianowy wykorzystujący bibliotekę CUDA sprawozdanie z projektu

Programowanie kart graficznych

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

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

System wspomagania harmonogramowania przedsięwzięć budowlanych

Programowanie Równoległe wykład 12. OpenGL + algorytm n ciał. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie w modelu równoległości danych oraz dzielonej globalnej pamięci wspólnej. Krzysztof Banaś Obliczenia równoległe 1

Libra.cs.put.poznan.pl/mailman/listinfo/skisrkolo.

Zastosowanie technologii nvidia CUDA do zrównoleglenia algorytmu genetycznego dla problemu komiwojażera

Zadania badawcze prowadzone przez Zakład Technik Programowania:

4 NVIDIA CUDA jako znakomita platforma do zrównoleglenia obliczeń

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Programowanie Równoległe Wykład, CUDA praktycznie 1. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie CUDA informacje praktycznie i. Wersja

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Praca dyplomowa magisterska

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Planowanie przedsięwzięć

Programowanie procesorów graficznych GPGPU

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Inżynieria oprogramowania. Część 8: Metoda szacowania ryzyka - PERT

Architektura von Neumanna

Harmonogramowanie przedsięwzięć

Raport Hurtownie Danych

Strategia "dziel i zwyciężaj"

CUDA ćwiczenia praktyczne

MESco. Testy skalowalności obliczeń mechanicznych w oparciu o licencje HPC oraz kartę GPU nvidia Tesla c2075. Stanisław Wowra

Obliczenia na GPU w technologii CUDA

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

Nowoczesne technologie przetwarzania informacji

XIII International PhD Workshop OWD 2011, October 2011 REALIZACJA OBLICZEŃ W ARCHITEKTURZE MASOWO RÓWNOLEGŁEJ W HETEROGENICZNYCH SYSTEMACH

Przykładowe sprawozdanie. Jan Pustelnik

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

Implementacja sieci neuronowych na karcie graficznej. Waldemar Pawlaszek

Programowanie CUDA informacje praktycznie i przykłady. Wersja

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

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Wstęp do obliczeń równoległych na GPU

Podstawy OpenCL część 2

Programowanie Równoległe wykład, CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

CUDA obliczenia ogólnego przeznaczenia na mocno zrównoleglonym sprzęcie. W prezentacji wykorzystano materiały firmy NVIDIA (

Programowanie współbieżne Wprowadzenie do programowania GPU. Rafał Skinderowicz

Matematyczne Podstawy Informatyki

WIDMOWA I FALKOWA ANALIZA PRĄDU SILNIKA LSPMSM Z WYKORZYSTANIEM OPENCL

Algorytmy dla maszyny PRAM

Programowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak

Algorytmy i Struktury Danych.

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

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

Wysokowydajna implementacja kodów nadmiarowych typu "erasure codes" z wykorzystaniem architektur wielordzeniowych

CUDA jako platforma GPGPU w obliczeniach naukowych

Podsystem graficzny. W skład podsystemu graficznego wchodzą: karta graficzna monitor

Systemy wbudowane. Uproszczone metody kosyntezy. Wykład 11: Metody kosyntezy systemów wbudowanych

Programowanie procesorów graficznych w CUDA.

Metody optymalizacji soft-procesorów NIOS

Podręcznik użytkownika PCI-x Karta przechwytująca 4xHDMI

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

PROBLEMATYKA OBLICZEŃ MASOWYCH W NAUKACH O ZIEMI. Satelitarny monitoring środowiska

Karta przedmiotu. Podstawy programowania procesorów graficznych. realizowanego w ramach projektu PO WER

Test dysku Intel SSD DC S GB. Wpisany przez Mateusz Ponikowski Wtorek, 22 Październik :22

Budowa komputera Komputer computer computare

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

CUDA PROGRAMOWANIE PIERWSZE PROSTE PRZYKŁADY RÓWNOLEGŁE. Michał Bieńkowski Katarzyna Lewenda

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

Sortowanie przez scalanie

Redukcja czasu wykonania algorytmu Cannego dzięki zastosowaniu połączenia OpenMP z technologią NVIDIA CUDA

TEORIA GRAFÓW I SIECI

Algorytmy i Struktury Danych

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie. dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Podstawy Informatyki Systemy sterowane przepływem argumentów

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

ZASTOSOWANIE SZTUCZNYCH SIECI NEURONOWYCH ORAZ ARCHITEKTURY OPENCL W SPEKTRALNEJ I FALKOWEJ ANALIZIE PRĄDU SILNIKA LSPMSM

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

Instrukcja. Laboratorium Metod i Systemów Sterowania Produkcją.

Obliczenia Wysokiej Wydajności

Jacek Naruniec. lato 2014, Politechnika Warszawska, Wydział Elektroniki i Technik Informacyjnych

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Wprowadzenie do OpenMP

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

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Transkrypt:

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. Problem gniazdowy 3. Metoda zrównoleglenia obliczeń 4. Eksperymenty obliczeniowe 5. Podsumowanie

Wprowadzenie CUDA (ang. Compute Unified Device Architecture) i OpenCL (ang. Open Computing Language) pozwalają na wykorzystanie GPU (ang. Graphics Processing Unit) do obliczeń. Wydajność CUDA i OpenCL została przeanalizowana na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego.

Problem gniazdowy Problem gniazdowy można zdefiniować w następujący sposób: w systemie produkcyjnym znajduje się określona liczna maszyn, na których należy wykonać określona liczbę zadań produkcyjnych, zadanie produkcyjne składa się z pewnej liczby operacji, które należy zrealizować w zadanej kolejności, dla każdej operacji określona jest dokładnie jedna maszyna, która może ja wykonać w zadanym czasie.

Problem gniazdowy Rysunek: Wykres Gantta.

Problem gniazdowy Rysunek: Graf reprezentujący rozwiązanie.

Metoda zrównoleglenia obliczeń Tradycyjna metoda wyznaczania wartości funkcji celu dla problemu gniazdowego jest trudna do zrównoleglenia ze względu na jej silnie sekwencyjny charakter. Modyfikacja metody wyznaczania wartości funkcji celu dla problemu gniazdowego do postaci, która pozwala na masowe zrównoleglenie obliczeń polega na wykorzystaniu algorytmu wyznaczania najdłuższej ścieżki w grafie w sensie liczby wierzchołków.

Algorytm sekwencyjny void FindPathsOnCPU(int o, int *graph, int size) { int tmp,max; for (int iter=1; iter <= size+1; iter++) for (int u = 0; u <= o; u++){ for (int v = 0; v <= o; v++){ tmp = 0; max = 0; for (int k = 0; k <= o; k++){ if (graph[u*(o+1)+k]!= 0 and graph[k*(o+1)+v]!= 0) { tmp = graph[u*(o+1)+k]+graph[k*(o+1)+v]; if (max < tmp) max = tmp; if (graph[u*(o+1)+v] < max) graph[u*(o+1)+v] = max;

Algorytm równoległy Główne elementy prostej w zrównolegleniu metody wyznaczania wartości funkcji celu dla problemu gniazdowego to: 1. Wyznaczenie najdłuższej ścieżki (w sensie liczby wierzchołków) w grafie reprezentującym rozwiązanie. 2. Posortowanie odległości od wierzchołka początkowego do pozostałych wierzchołków w kolejności rosnącej. Indeksy wierzchołków po posortowaniu powinny być w kolejności topologicznej.

Eksperymenty obliczeniowe Eksperymenty obliczeniowe zostały przeprowadzone na kartach graficznych: ATI Radeon HD 5970 2GB DDR5, Nvidia GeForce GTX 480 1536MB. Zaimplementowana została wersja algorytmu wykorzystująca pamięć globalną oraz pamięć współdzieloną. Zmierzone czasy uwzględniają czas kopiowania danych między GPU, a hostem.

Eksperymenty obliczeniowe Pamięć globalna kernel void JobShopKernel(int o, global int *graph, int size) { int idx = (int)get_global_id(0); for (int iter=1; iter <= size+1; iter++) for(int u=0;u<=o;u++) for(int v=0;v<=o;v++){ int max = 0, tmp =0; if(graph[u*(o+1)+idx]!=0 && graph[idx*(o+1)+v]!=0){ tmp=graph[u*(o+1)+idx]+graph[idx*(o+1)+v]; if(max < tmp) max = tmp; if (graph[u*(o+1)+v] < max) graph[u*(o+1)+v] = max; barrier(clk_global_mem_fence);

Eksperymenty obliczeniowe Pamięć globalna problem o OpenCL ATI OpenCL NV CUDA CPU la01-05 50 0.0425 0.0110 0.0110 0.0042 la06-10 75 0.0993 0.0294 0.0303 0.0191 la11-15 100 0.1766 0.0600 0.0624 0.0401 la16-20 100 0.1758 0.0591 0.0615 0.0359 la21-25 150 0.4525 0.1546 0.1629 0.1384 la26-30 200 0.8128 0.3139 0.3309 0.3312 la31-35 300 1.8591 0.9968 1.0479 1.2886 la36-40 225 1.0404 0.4063 0.4281 0.4375 Tabela: Porównanie czasów trwania obliczeń dla pamięci globalnej

Eksperymenty obliczeniowe Pamięć współdzielona global void JobShopKernelShared(int o, int *graph, int size) { int idx = threadidx.x ; extern shared int cache[]; for(int i=0;i<=o;i++) cache[i*(o+1)+idx]=graph[i*(o+1)+idx]; syncthreads(); for (int iter=1; iter <= size+1; iter++) for(int u=0;u<=o;u++) for(int v=0;v<=o;v++){ int max = 0, tmp =0; if(cache[u*(o+1)+idx]!=0 and cache[idx*(o+1)+v]!=0){ tmp = cache[u*(o+1)+idx] + cache[idx*(o+1)+v]; if(max < tmp) max = tmp; if (cache[u*(o+1)+v] < max) cache[u*(o+1)+v] = max; syncthreads(); for(int i=0;i<=o;i++) graph[i*(o+1)+idx]=cache[i*(o+1)+idx];

Eksperymenty obliczeniowe Pamięć współdzielona kernel void JobShopKernelLocal(int o, global int *graph, int size, local *cache) { int idx = (int)get_local_id(0); for(int i=0;i<=o;i++) cache[i*(o+1)+idx]=graph[i*(o+1)+idx]; barrier(clk_local_mem_fence); for (int iter=1; iter <= size+1; iter++) for(int u=0;u<=o;u++) for(int v=0;v<=o;v++){ int max = 0, tmp =0; if(cache[u*(o+1)+idx]!=0 && cache[idx*(o+1)+v]!=0){ tmp=cache[u*(o+1)+idx]+cache[idx*(o+1)+v]; if(max < tmp) max = tmp; if (cache[u*(o+1)+v] < max) cache[u*(o+1)+v] = max; barrier(clk_local_mem_fence); for(int i=0;i<=o;i++) graph[i*(o+1)+idx]=cache[i*(o+1)+idx];

Eksperymenty obliczeniowe Pamięć współdzielona problem o OpenCL ATI OpenCL NV CUDA CPU la01-05 50 0.0208 0.0056 0.0057 0.0042 la06-10 75 0.0436 0.0152 0.0165 0.0191 la11-15 100 N/A 0.0243 0.0263 0.0401 la16-20 100 N/A 0.0242 0.0261 0.0359 Tabela: Porównanie czasów trwania obliczeń dla pamięci współdzielonej

Podsumowanie Ten sam kod OpenCL wykonuje się dłużej na karcie ATI niż na karcie NVIDIA. Różnica czasu wykonania kodu OpenCL i CUDA na karcie NVIDIA jest niewielka. Użycie pamięci współdzielonej pozwala na przyspieszenie obliczeń o ok. 2x. Dla dużych rozmiarów danych czas obliczeń na GPU jest krótszy niż na CPU.

Koniec Dziękuję za uwagę!