INSTRUKCJA PRZYGOTOWANIA REFERATU NA OWD`2005

Transkrypt

INSTRUKCJA PRZYGOTOWANIA REFERATU NA OWD`2005
XIV International PhD Workshop
OWD 2012, 20–23 October 2012
NOWOCZESNE TECHNIKI WYKONYWANIA
ZAAWANSOWANYCH OBLICZEŃ NUMERYCZNYCH
MODERN ADVANCED COMPUTATIONAL METHOD
Konrad Andrzej Markowski, Warsaw University of Technology
Abstract
In different areas of science appears more and
more numerical problems which cannot be solved
analytically by hand. In this paper a new
computational method for solving
numerical
problem using GPGPU will be presented. The
presented method is illustrated by numerical
examples.
Streszczenie
W wielu obszarach nauki pojawia się coraz więcej
złożonych problemów obliczeniowych, które
możemy rozwiązać tylko i wyłącznie za pomocą
odpowiednich metod numerycznych wykorzystując
komputer. Głównym celem artykułu jest
uporządkowanie wiedzy na temat nowoczesnych
technik wykonywania zaawansowanych obliczeń
numerycznych oraz pokazanie możliwości jakie one
za sobą niosą.
1. Wprowadzenie
W ostatnich dekadach rozwój technologiczny
oraz
informatyzacja
wielu
dziedzin
życia
doprowadziła do gromadzenia coraz większej liczby
informacji. Dodatkowo pojawia się coraz więcej
złożonych problemów, których nie sposób
rozwiązać bez pomocy komputera. Czynniki te
spowodowały dynamiczny rozwój różnorodnych
technik wykonywania obliczeń numerycznych.
Historycznie wszystko rozpoczęło się od
pojedynczych
komputerów
odpowiednio
oprogramowanych. Następnie komputery te
połączono w klastry obliczeniowe. Obecnie od kilku
lat najszybciej rozwijającymi się technikami
obliczeniowymi są metody oparte o obliczenia na
jednostkach graficznych GPU wyposażonych w
szybkie procesory strumieniowe. Coraz bardzie
popularne stają się rozwiązania dające możliwość
wykorzystania jednostek CPU i GPU w postaci
klastrów obliczeniowych.
2. Procesory CPU
Wszystkie współczesne procesory mają podobną
architekturę oparta na superskalarnym jądrze RISC.
RISC-owa konstrukcja umożliwia stosowanie
wysokich częstotliwości zegara. Ze względu na
stosunkowo małą liczbę równoległych rdzeni
pojedynczego procesora dedykowane algorytmy
CPU są sekwencyjne. Oznacza to wykonywanie
kolejnych instrukcji w porządku chronologicznym
zgodnie z zapisaną sekwencją. Algorytmy
pozwalające na równoległe obliczenia mogą być w
pełni wykorzystane dopiero przez procesory
wielordzeniowe lub systemy typu GRID.
Główną miarą wydajności, stosowaną obecnie dla
współczesnych systemów komputerowych, jest
liczba wykonywanych w ciągu sekundy operacji na
liczbach zmiennoprzecinkowych (FLOPS). Mierzy
się ją za pomocą odpowiednich testów wzorcowych.
Najpopularniejszym takim testem jest LINPACK,
mierzący szybkość rozwiązywania gęstych układów
równań liniowych za pomocą metody Gaussa.
Ponieważ
wiele
problemów
stawianych
superkomputerom daje się sprowadzić do
rozwiązywania takich równań, test ten jest wygodną
abstrakcją pomiaru efektywności w rozwiązywaniu
takich problemów. Inną miarą wydajności
superkomputerów
jest
miara
FLOPS/wat,
uwzględniająca oprócz szybkości wykonywania
obliczeń
również
zużycie
prądu
przez
superkomputery. Więcej informacji na temat
obliczeń za pomocą procesorów CPU można
znaleźć w pozycji: [4].
3. Procesory GPU
Najnowsze układy CPU i GPU są układami
wielordzeniowymi. Ideą przewodnią dla technologii
obliczeń na GPU jest współpraca procesora
centralnego (CPU) z układem GPU w ramach
środowiska obliczeniowego o heterogenicznym
modelu przetwarzania. Sekwencyjna część aplikacji
515
wykonywana jest przez układ CPU, zaś za złożone
obliczeniowo fragmenty odpowiada układ GPU. Z
punktu widzenia użytkownika aplikacja działa po
prostu szybciej, ponieważ dzięki wykorzystaniu
wysokowydajnego
układu
GPU
wydajność
przetwarzania wzrasta. Więcej informacji na temat
obliczeń za pomocą procesorów GPU można
znaleźć w pozycji [5].
3.1 Jednostki nVidia
Akceleratory z serii Tesla zostały wprowadzone
na rynek jesienią 2006 r. Opierały się na
zmodernizowanych
układach
graficznych
8800 GTX, a ich procesory GPGPU oznaczone były
symbolem Tesla T8P. Najnowsze akceleratory
obliczeniowe nVidii opierają się wyłącznie na
układach GF100 zgodnych z architekturą Fermi. W
sprzedaży dostępne są akceleratory obliczeniowe z
wyjściem graficznym DVI, które przeznaczone są do
budowy wysokowydajnych obliczeniowych stacji
roboczych – Tesla C2050 i Tesla C2070 (modele te
różnią się wielkością wbudowanej pamięci –
odpowiednio 3 i 6 GB). Dzięki nim standardowy
pecet dysponuje mocą obliczeniową zarezerwowaną
do niedawna dla superkomputerów i klastrów
obliczeniowych
Akceleratory Tesla zgodne z architekturą Fermi
cechują
się
wydajnością
obliczeń
zmiennoprzecinkowych o podwójnej precyzji na
poziomie 515 GFLOPS (FLOPS – FLoating point
Operations Per Second, operacji zmiennoprzecinkowych na sekundę) i ok. 1 TFLOPS w trybie
z pojedynczą precyzją. Dla porównania, moc
obliczeniowa czterordzeniowego procesora Intel
Core i7 965 XE to zaledwie 70 gigaflopów dla
obliczeń zmiennoprzecinkowych o podwójnej
precyzji i to mniej więcej przy porównywalnej
wielkości układu graficznego i tradycyjnego
czterordzeniowego procesora.
Procesory Tesla [8] są na tyle szybkie i na tyle
dobrze uzupełniają tradycyjne CPU, że coraz częściej
wykorzystuje się je do budowy najszybszych na
świecie superkomputerów. I tak, zajmujący obecnie
na liście TOP 500 drugie miejsce (do niedawna był
to najszybszy superkomputer na świecie), znajdujący
się od 2010 roku w National Supercomputing Center
in Tianjin w Chinach superkomputer Tianhe-1A
zbudowany został na podstawie 7168 procesorów
Nvidia Tesla M2050 oraz 14336 procesorów Intel
Xeon X5670 2,93 GHz. Jego łączna moc
obliczeniowa to 2,507 petaflopsa.
3.2 Jednostki AMD
Podobną, ale znacznie mniej popularną
konstrukcją jest przygotowana przez firmę AMD
seria pecetowych kart akceleratorów graficznoobliczeniowych AMD FireStream, oparta na
układach graficznych z serii Radeon HD. Pierwszym
akceleratorem, jeszcze pod nazwą ATI FireStrem,
czyli przed przejęciem firmy ATI prze AMD, był
FireStream 580 oparty na układzie RV580 (Radeon
X1900 XTX). Obecnie w sprzedaży dostępna jest już
czwarta generacja akceleratorów AMD FireStream.
Są to AMD FireStream 9350 i 9370, które opierają
się na układzie graficznym Cypress (RV870) – karty
graficzne Radeon HD 5850 i HD 5870. Składają się
one odpowiednio z 1440 i 1600 prostych procesorów
strumieniowych.
Ich
moc
obliczeniowa
to 2016 i 403,2 GFLOPS przy obliczeniach
zmiennoprzecinkowych pojedynczej i podwójnej
precyzji dla AMD FireStream 9350 oraz
odpowiednio 2640 i 528 GFLOPS dla modelu 9370.
4. Architektura CUDA i OpenCL
4.1 nVidia CUDA
CUDA [1,2] to opracowana przez firmę Nvidia
uniwersalna
architektura
procesorów
wielordzeniowych (głównie kart graficznych)
umożliwiająca wykorzystanie ich mocy obliczeniowej
do
rozwiązywania
ogólnych
problemów
numerycznych w sposób wydajniejszy niż w
tradycyjnych, sekwencyjnych procesorach ogólnego
zastosowania. Integralną częścią architektury CUDA
jest oparte na języku programowania C środowisko
programistyczne wysokiego poziomu, w którego
skład wchodzą m.in. specjalny kompilator, debugger,
profiler oraz interfejs programowania aplikacji.
Dostępne są również biblioteki, które można
wykorzystać w językach Python, Fortran, Java, C#
oraz Matlab. W przeciwieństwie do języka OpenCL,
CUDA jest dostępna tylko dla kart graficznych
produkowanych przez nVidia począwszy od serii
GeForce 8 w tym Quadro oraz Tesla.
4.2 OpenCL
OpenCL [3] to zbiór standardów pomagających
w programowaniu na heterogeniczne platformy
obliczeniowe.
Definiuje
on
standardowy,
abstrakcyjny model heterogenicznej platformy
obliczeniowej i zależne od niego modele dla kodu
źródłowego programu, wykonania i hierarchii
pamięci. Kod źródłowy składa się z programu hosta,
który używając API OpenCL, uruchamia na
urządzeniach obliczeniowych kernele obliczeniowe.
Takie podejście standaryzuje to, co producenci kart
graficznych udostępniali przez swoje specyficzne
narzędzia i języki programowania. Z jednej strony
dzięki standaryzacji, a z drugiej odpowiednim
sterownikom, program napisany w OpenCL
powinien być przenośny nie tylko między kartami
graficznymi różnych producentów, ale między
urządzeniami obliczeniowymi różnych typów W
standardzie tym specyficzne jest definiowanie jedno-,
dwu-, lub trójwymiarowej przestrzeni indeksów
pozwalających odróżniać poszczególne instancje
516
kernela. Jest to wielowymiarowy i konfigurowalny
system identyfikacji wątków. Wielowymiarowe
indeksy pozwalają numerować wątki w zależności od
dziedziny problemu.
Zatem w maksymalnej konfiguracji rozwiązanie ma
następująca moc obliczeniową: 84 rdzenie jakie dają
nam procesory CPU oraz 32 karty graficzne
wyposażone w 14 336 rdzeni CUDA.
5. Oprogramowanie inżynierskie
5.2 Mathematica
5.1 Matlab
Matlab [7] jest środowiskiem obliczeniowym
przeznaczonym dla inżynierów i naukowców,
umożliwiającym
przeprowadzanie
obliczeń
matematycznych, analizy numerycznej, wizualizacji
otrzymanych wyników w postaci dwu i
trójwymiarowych wykresów funkcji, wizualizację
wyników obliczeń w postaci rysunków statycznych i
animacji, jak również tworzenie algorytmów i
programów. Matlab wiąże analizę numeryczną,
obliczenia macierzowe, przetwarzanie sygnałów i
grafikę w sposób przyjazny dla użytkownika, gdzie
zarówno zadania jak i rozwiązania są zapisane
matematycznie bez uwzględnienia zasad tradycyjnego
programowania. Wykorzystując porty, możliwe jest
pobieranie danych pomiarowych z urządzenia
zewnętrznego w celu ich obróbki i analizy. Wszystko
to powoduje, że program ten znajduje bardzo
szerokie zastosowanie. Matlab zawiera wiele narzędzi
zgrupowanych
w
pakiety
(ang.
toolbox),
ukierunkowane na konkretne obszary zastosowań,
np. pakiet symulacji Simulink, biblioteki do
modelowania układów sterowania, narzędzia
projektowania systemów przetwarzania sygnałów i
obrazów.
Z punktu widzenia zaawansowanych obliczeń
numerycznych szczególna uwagę należy zwrócić na
następujące toolboxy: Parallel Computing Toolbox
oraz Matlab ® Distributed Computing Server.
Parallel Computing Toolbox [6] daje możliwość:
wykorzystywania do obliczeń maksymalnie do ośmiu
rdzeni procesora CPU oraz wykonywanie obliczeń
bezpośrednio na procesorach GPU.
Wykorzystując Matlab ® Distributed Computing
Server możemy zarządzać maksymalnie ośmioma
maszynami z zainstalowanym oprogramowaniem
Matlab ® Parallel Computing Toolbox, który jest w
stanie obsłużyć do ośmiu rdzeni CPU oraz cztery
karty graficzne typu nVidia [8]. Przykładowo
używając ośmiordzeniowego procesora CPU typu
AMD FX-8150 oraz czterech kart graficznych typu
Tesla C2075 dostajemy potężną moc obliczeniową.
Pakiet Mathematica [9] podobnie jak Matlab jest
unikalnym środowiskiem do realizacji obliczeń
matematycznych jak również publikowania wyników.
Program został stworzony do prowadzenia obliczeń
symbolicznych. Podstawowe cechy programu
Mathematica to: oszczędność czasu, różnorodność
procedur obliczeniowych, prezentacje graficzne,
symboliczne rozwiązywanie problemu, dokładność
obliczeń
numerycznych,
wszechstronność
środowiska, druk publikacji, elektroniczna wymiana
dokumentacji
W tym miejscu należy wspomnieć, iż zarówno
Matlab jak i Mathematica wspierają możliwość
wykonywania obliczeń na wielu rdzeniach w obrębie
jednego procesora jak również obliczeń na kartach
graficznych.
6. Przykład
Niech będzie dany układ m równań z n
niewiadomymi opisany w postaci macierzowej Ax=b.
Układ ten możemy tak przekształcić aby wyznaczyć
niewiadome x w następujący sposób x=A-1b.
Obliczenia przeprowadzono w środowisku
Matlab®. Macierze A i b generowane były w sposób
losowy. Do obliczeń wykorzystano trzy takie same
komputer o parametrach określonych w Tabeli 1
wyposażone w kartę graficzną GeForce nVidia
560Ti, GeForce nVidia 680 oraz PNY TeslaC2075 o
parametrach określonych w Tabeli 2.
Obliczenia były przeprowadzane dla danych o
pojedynczej precyzji. Badane były następujące
rozmiary układu: 1024, 2048, 3072, 4096, 5120,
6144, 7168, 8192, 9216, 10240, 11264, 12288, 13312,
14336, 15360, 16384, 17408, 18432, 19456, 20480,
21504 oraz 22528.
Celem badan było sprawdzenie wydajności
obliczeń oraz sprawdzenie szybkości obliczeń. Na
Rysunku 2 przedstawiono zestawienie uzyskanych
wyników natomiast Rysunek 1a oraz Rysunek 1b
prezentują odpowiednio wykresy badania wydajności
obliczeń oraz badanie szybkości obliczeń.
Tab.1.
Używane ko mput ery
Comput ers
Nazwa
Procesor
Zainstalowana pamięć RAM
Karta graficzna
Serwer 1
Serwer 2
Serwer 3
HexaCore AMD Phenom II X6 1075T, 3524 MHz (17.5 x 201)
Kingston 4x4GB DDR3-1333 DDR3 SDRAM
NVIDIA GeForce
NVIDIA GeForce
PNY Tesla C2075,
GTX 560 Ti
GTX 680
6GB GDDR5 ECC,
(1024 MB)
(2048 MB)
448 rdzeni,
517
Tab.2.
Kart y graficzne
Graphic cards
Nazwa
Parametr
CUDA Cores
Częstotliwość taktowania rdzenia graficznego (MHz)
Częstotliwość taktowania procesora (MHz)
Częstotliwość taktowania pamięci (MHz)
Standardowa konfiguracja pamięci
Pamięć
Szerokość interfejsu pamięci
Przepustowość pamięci (GB/sec)
Silnik
GPU
GTX 560
Ti
384
822MHZ
1648
4008
1024MB
256 bit
128,0
Tesla
C2075
1536
448
1006 MHz
1,15GHz
Brak danych Brak danych
Brak danych
1,5GHz
2048MB
6GB
256 bit
384 bit
192,2
144
GTX 680
(a)
(b)
Rys.1. (a) Szybkość obliczeń układu równań (b) Badanie wydajności obliczeń
518
(a)
(b)
Rys. 2. Zestawienie uzyskanych wyników
519
Z przeprowadzonych badań można wyciągnąć
następujące wnioski:
 Zakres
obliczeń
uzyskany
na
poszczególnych
kartach
graficznych
(GTX 560Ti – układ równań o rozmiarze
9216, GTX 680 – układ równań o rozmiarze
13312 oraz tesla C2075 – układ równań o
rozmiarze 22528) zależy od ilości pamięci w
jaką jest wyposażona karta graficzna.
 Karta Cuda C2075 mimo relatywnie małej
liczby CUDA Cores (448) bardzo dobrze
wypada w stosunku do karty GTX680
posiadającej aż 1536 CUDA Cores.
 Czasy obliczeń uzyskiwane na kartach
graficznych zależą od: szybkości przesyłania
danych na kartę graficzną oraz szybkości
obliczeń. Te dwa czasy składają się na
całkowity czas obliczeń wykonywanych za
pomocą karty graficznej
 Szybkość przesyłania danych na kartę
graficzną zależy od szybkości łącza
PCIe x16. W związku z tym należy pamiętać,
żeby kart graficznych umieszczać w
gniazdach PCI-Express x16 wyposażonych
w 16 linii transmisyjnych a nie w gniazda
PCI-Express x16 pracujących w trybie x4
lub x1.
 Obliczeni na kartach graficznych GPU w
stosunku do obliczeń na CPU dają bardzo
dobre progresy czasowe przykładowo dla
układu o rozmiarze 22528 na CPU
uzyskujemy czas obliczeń równy prawie 82
sekundy a na jednostce graficznej
uzyskujemy czas prawie 26 sekund co daje
nam lepszy czas o 315%.
6. Podsumowanie
Rozwój technologii kart graficznych doprowadził
do momentu, w którym zaczęły być one
wykorzystywane nie tylko do gier komputerowych
ale również do rozwiązywania złożonych problemów
numerycznych z różnych obszarów nauki.
W artykule pokazano jak wiele możemy zyskać w
obliczeniach stosując tego typu mechanizmy. Patrząc
na problemy, które obecnie należą do grupy trudno
rozwiązywanych analitycznie, można przypuszczać,
iż technologia ta mogłaby pomóc szczególnie w tych
obszarach. Z przeprowadzonych badań możemy
śmiało powiedzieć iż, obliczenia na kartach
graficznych warte są dokładniejszej uwadze (w
obecnym okresie kiedy stawiamy na przetwarzanie
coraz większej liczby danych i informacji) w aspekcie
rozwiązywania złożonych problemów numerycznych
oraz stanowią bardzo dużą konkurencję dla
istniejących metod obliczeniowych
Podziękowania
„Badanie zrealizowano dzięki stypendium
naukowemu w ramach projektu pn. „Technologie
informacyjne: badania i ich interdyscyplinarne
zastosowania” współfinansowanego ze środków Unii
Europejskiej w ramach Europejskiego Funduszu
Społecznego, Program Operacyjny Kapitał Ludzki
(Umowa nr UDA-POKL.04.01.01-00-051/10-00)”
Literatura
1. Farber R.: CUDA Application Design and
Development, Elsevier, 2011
2. Sanders J., Kandrot E.: CUDA by Example,
Addison-Wesley, 2011
3. Gaster B.: Heterogeneous Computing with OpenCL,
Elsevier, 2011
4. Herlihy M., Shavit N.: The Art of Multiprocessor
Programming, Elsevier, 2008
5. Sheppard A.: Programming GPUs, O'Reilly Media,
2012
6. Attaway S.: Matlab, Second Edition: A Practical
Introduction to Programming and Problem Solving,
Butterworth-Heinemann, 2011
7. http://www.mathworks.com – Dokumentacja
oprogramowania Matlab.
8. http://www.nvidia.com – Strona producenta kart
graficznych.
9. http://www.wolfram.com/ - Dokumentacja
oprogramowania Mathematica
Adres służbowy Autora:
dr inż. Konrad Andrzej MARKOWSKI
Politechnika Warszawska,
Wydział Elektryczny,
ISEP
ul. Koszykowa 75
00-662 Warszawa
tel. (022) 234 56 25
fax (022) 625 62 78
520
email: [email protected]