Kompilacja i uruchamianie zadań na klastrach Perszeron i Mustang.

Podobne dokumenty
Wykorzystanie klastra Wydziału Informatyki PB do prowadzenia własnych obliczeń. Wojciech Kwedlo Wydział Informatyki PB

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Architektura, oprogramowanie i uytkowanie klastra PCSS. Marek Zawadzki <mzawadzk@man.poznan.pl>

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Skrócony Poradnik Użytkownika

Podstawy systemu kolejkowego SLURM

Efektywne wykorzystanie klastra Zeus w obliczeniach naukowych

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Programowanie współbieżne... (10) Andrzej Baran 2010/11

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

Fragment wykładu z języka C ( )

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Wprowadzenie do biblioteki klas C++

Tworzenie oprogramowania

Wprowadzenie do obsługi systemów obliczeniowych PCSS

Obliczenia równoległe w zagadnieniach inżynierskich. Wykład 4

Nazwa wariantu modułu (opcjonalnie): Laboratorium programowania w języku C++

Opis efektów kształcenia dla modułu zajęć

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie w C. dr inż. Stanisław Wszelak

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Obliczenia rozproszone MPI

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Cechy systemu X Window: otwartość niezależność od producentów i od sprzętu, dostępny kod źródłowy; architektura klient-serwer;

Klaster obliczeniowy

Programowanie w języku C++ Grażyna Koba

Bartosz Bosak Piotr Kopta Tomasz Piontek

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

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Instalacja środowiska MPI w systemie operacyjnym Linux

Kompilacja i scalanie programów w linii poleceń gcc i make

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

MentorGraphics ModelSim

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

Podstawy programowania. Wprowadzenie

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Rozdział 1. Informacje ogólne

Algorytmy i Struktury Danych

Systemy operacyjne. Paweł Pełczyński

IBM SPSS Statistics - Essentials for R: Instrukcje instalacji dla Linux

Graficzny terminal sieciowy ABA-X3. część druga. Podstawowa konfiguracja terminala

IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa)

Przetwarzanie Równoległe i Rozproszone

Migracja obliczeń na system Hydra

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

Języki Programowania. Kompilatory Fortranu. Wojciech Sobieski

Instrukcja użytkownika Platforma transakcyjna mforex Trader dla systemu Linux

Wstęp do programowania

Wykład Ćwiczenia Laboratorium Projekt Seminarium

KARTA KURSU. Systemy operacyjne

Skanowanie podsieci oraz wykrywanie terminali ABA-X3

Pracownia Komputerowa wykład III

Programowanie procesorów graficznych GPGPU

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Obliczenia rozproszone MPI

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

Zamieszczanie ogłoszenia: obowiązkowe. Ogłoszenie dotyczy: zamówienia publicznego.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Zaawansowane programowanie w języku C++

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

61 Topologie wirtualne

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Nowinki technologiczne procesorów

SYLABUS DOTYCZY CYKLU KSZTAŁCENIA realizacja w roku akademickim 2016/2017

DLA SEKTORA INFORMATYCZNEGO W POLSCE

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

IBM SPSS Statistics dla systemu Windows Instrukcje instalacji (licencja sieciowa)

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Kopiowanie plików. 1. Z sieci wewnętrznej PK. System Windows

Delphi podstawy programowania. Środowisko Delphi

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Dokumentacja końcowa projektu z ZPR

Pracownia internetowa w szkole ZASTOSOWANIA

Poziomy wymagań Konieczny K Podstawowy- P Rozszerzający- R Dopełniający- D Uczeń: - zna rodzaje sieci - zna topologie sieciowe sieci

Java jako język programowania

Warsztaty szkoleniowe. Technologia SafetyLon w systemach związanych z bezpieczeństwem funkcjonalnym Narzędzia SafetyLon Moduł 4.5.

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

ZPKSoft WDoradca. 1. Wstęp 2. Architektura 3. Instalacja 4. Konfiguracja 5. Jak to działa 6. Licencja

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

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

IBM SPSS Statistics - Essentials for Python: Instrukcje instalacji dla Windows

Kryptografia na procesorach wielordzeniowych

Podstawy programowania

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

IBM SPSS Modeler Social Network Analysis 16 podręcznik instalowania i konfigurowania

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Instalacja i konfiguracja SAS PC Files Server

Postępowanie WCh AB Wrocław, 12 lutego 2014 r.

Standardy programowania protokołów komunikacyjnych Laboratorium nr 5 komunikacja multicastowa IPv6

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Sieciowa instalacja Sekafi 3 SQL

Transkrypt:

Kompilacja i uruchamianie zadań na klastrach Perszeron i Mustang. Klaster Perszeron pracuje pod kontrolą systemu SuSE Linux Enterprise Server 10 w wersji 64bitowej i wyposażony jest w zestaw standardowych narzędzi firmy Intel do kompilowania i uruchamiania zadań na klastrach (Intel Cluster Toolkit ICT). W skład zestawu wchodzą: kompilatory języków C/C++ i Fortran biblioteka matematyczna MKL (zawierająca m.in. procedury BLAS i LAPACK) implementacja standardu MPI 1 / 27

Klaster Mustang w konfiguracji standardowej pracuje pod kontrolą systemu Red Hat Enterprise Linux 5.0 w wersji 64bitowej. W konfiguracji tej dostępne są te same narzędzia kompilacji i uruchamiania ICT co w klastrze Perszeron. Dodatkowo na węzłach QS22 dostępny jest specjalny pakiet SDK dla procesorów PowerXCell. Węzły wyposażone w procesory AMD mogą z kolei pracować pod kontrolą systemów rodziny Microsoft Windows. Niniejszy dokument opisuje wyłącznie posługiwanie się narzędziami pakietu ICT. Każdy z klastrów posiada jeden wyróżniony węzeł dostępowy (head node) pr zeznaczony do edycji, kompilacji i uruchamiania zadań. Dla klastra Perszeron tym węzłem jest perszeron.uck.pk.edu.pl, dla klastra Mustang jest to mustang.uck.pk.edu.pl. Logowanie do każdego z tych węzłów opisuje osobny dokument [link]. Edycja kodu źródłowego Węzły dostępowe wyposażone są w standardowe edytory Uniksowe vi oraz emacs. Edytory te dostępne są w wersji terminalowej, edytor emacs także w wersji graficznej. Korzystanie z wersji graficznej możliwe jest po zalogowaniu za pomocą 2 / 27

ssh z opcją Y włączającą tunelowanie protokołu XWindows. Inne edytory opisywane będą w miarę instalowania w odrębnym dokumencie[link]. Kompilacja kodu Kompilacja programów narzędziami ICT wymaga ustawienia szeregu zmiennych środowiskowych, dzięki którym dostępne staną się katalogi zawierające pliki binarne kompilatorów i odpowiednie biblioteki. Istnieje kilka możliwości ustawienia zmiennych środowiskowych: wykorzystanie narzędzia modules ustawienie zmiennych środowiskowych odbywa się poprzez wydanie odpowiedniej komendy dla kompilatora C/C++ icc/icpc: 3 / 27

$ module load intel_icc dla kompilatora Fortranu ifort: $ module load intel_ifort wykorzystanie komendy source wykonującej skrypty inicjujące zmienne powłokowe 4 / 27

dla kompilatora C/C++ icc/icpc: dla powłoki bash: $ source /opt/intel/cc/11.0.074/bin/iccvars.sh intel64 dla powłoki tcsh: $ source /opt/intel/cc/11.0.074/bin/iccvars.csh intel64 5 / 27

dla kompilatora Fortranu ifort: dla powłoki bash: $ source /opt/intel/fc/11.0.074/bin/ifortvars.sh intel64 dla powłoki tcsh: $ source /opt/intel/fc/11.0.074/bin/ifortvars.csh intel64 6 / 27

umieszczenie powyższych komend w plikach inicjujących powłok, tak aby definicje były wczytywane każdorazowo przy logowaniu się do systemu, np.: w pliku.bash_profile dla powłoki bash, przykład kompilatora Fortranu: source /opt/intel/fc/11.0.074/bin/ifortvars.csh intel64 w pliku.cshrc dla powłoki tcsh, przykład kompilatora C/C++ : 7 / 27

source "/opt/intel/cc/11.0.074/bin/iccvars.csh" "intel64" Po ustawieniu zmiennych kompilatory uruchamiane są komendami: kompilator C/C++: icc dla plików źródłowych C i icpc dl a plików źródłowych C++ 8 / 27

kompilator Fortranu: ifort Na obu klastrach dostępne są także standardowe narzędzia configure, automake, make itp. Szczegółowy podręcznik kompilatora Intel C/C++ znajduje się tutaj [link], a kompilatora Intel Fortran tutaj [link]. Podręcznik kompilatora Fortranu zawiera także Podręcznik referencyjny języka Fortran 95 wraz z zaimplementowanymi w Intel Fortran elementami Fortranu 2003. Optymalizacja i zrównoleglenie kodu na pojedynczym serwerze z pamięcią wspólną Skompilowany kod uruchomiony na pojedynczym 9 / 27

węźle klastra może być wykonywany jako pojedynczy wątek lub jako proces wielowątkowy. Optymalizacja pojedynczego wątku (także dla procesów wielowątkowych) polega najczęściej na włączeniu jednego z poziomów automatycznej optymalizacji O0, O1, O2 (poziom domyślny), O3 lub f ast. Wyższe poziomy optymalizacji zawierają wektoryzację kodu, którą można uruchamiać także niezależnie za pomocą opcji vec. Aby uzyskać kod wielowątkowy, który po standardowym uruchomieniu zostanie wykonany na wielu rdzeniach węzła obliczeniowego, można użyć narzędzi systemowych, takich jak biblioteka Pthread s, można zastosować dyrektywy OpenMP, których uwzględnianie włącza opcja openmp kompilatora, można wreszcie wykorzystać opcję 10 / 27

kompilatora parallel, która dokonuje automatycznego zrównoleglenia. Odpowiednie rozdziały podręczników zawierają szczegółowe opisy wymienionych wyżej opcji, a także szeregu innych technik związanych z optymalizacją, w tym profilowania kodu, optymalizacji kodu w wielu plikach, włączania procedur asemblera (intrinsics), odpowiedniego użycia liczb zmiennoprzecinkowych, przydzielania określonych wątków określonym rdzeniom maszyny, itp. Opis modelu programowania z pamięcią wspólną i specyfikacji OpenMP można znaleźć na jednej ze stron WWW wymienionych w zakładce Tutoriale [link] Włączanie różnych poziomów optymalizacji i stosowanie dyrektyw OpenMP lub automatycznego zrównoleglenia w modelu pamięci wspólnej nie wymaga dołączania żadnych dodatkowych bibliotek 11 / 27

w fazie linkowania. Uruchamianie kodu odbywa się także w sposób standardowy. Ten link [link] prowadzi do prostego przykładu kodu, który można kompilować z rozmaitymi opcjami optymalizacji i zrównoleglenia, a następnie testować uruchamiając w systemie PBS/Torque. Kompilacja z dołączeniem bibliotek Intel MKL (Math Kernel Library) Biblioteka Intel MKL zawiera implementacje szeregu pakietów wykorzystywanych w obliczeniach naukowotechnicznych, takich jak BLAS, LAPACK, Sparse BLAS, FFT i inne. Poniżej omówione jest standardowe użycie najbardziej popularnych bibliotek BLAS i LAPACK. Więcej szczegółów można znaleźć w podręcznikach biblioteki Intel MKL dostępnych tutaj [link]. 12 / 27

Podobnie jak kompilatory Intela, biblioteka MKL wykorzystuje szereg zmiennych środowiskowych do sterowania linkowaniem i wykonaniem programów. Chcąc korzystać z biblioteki najlepiej jest użyć skryptów ustalających wartości wszystkich potrzebnych zmiennych. Skrypty te znajdują się w katalogu / opt/intel/mkl/10.1.0.015/tools/environment/, a korzystanie z nich jest identyczne jak w przypadku skryptów ustalających wartości zmiennych środowiskowych dla kompilatora. Tak więc dla powłoki bash można użyć komendy: $ source /opt/intel/mkl/10.1.0.015/tools/environment/ mklvarsem64t.sh 13 / 27

lub włączyć odpowiednią linię do pliku.bash_pr ofile. Podobnie dla powłoki tcsh można wykorzystać komendę source lub wstawić linijkę: source "/opt/intel/mkl/10.1.0.015/tools/environment/ mklvarsem64t.csh" do pliku.cshrc w katalogu domowym użytkownika. Linkowanie najdogodniej jest przeprowadzać 14 / 27

przez podanie opcji L z nazwą katalogu zawierającego pliki biblioteki dla architektury Intel64, a następnie podanie zestawu żądanych bibliotek. W przypadku dynamicznej konsolidacji programu skompilowanego z opcją openmp z biblioteką BLAS i rdzeniem biblioteki MKL, zawierającym m.in. biblioteki przetwarzania wielowątkowego, fragment komendy linkowania wygląda bardzo prosto: L/opt/intel/mkl/10.1.0.015/lib/em64t/ lmkl W rzeczywistości architektura biblioteki MKL jest złożona i wielowarstwowa. Komenda lmkl dołącza szereg bibliotek realizujących algorytmy numeryczne. W przypadku bardziej skomplikowanych programów konieczne jest 15 / 27

także dołączenie bibliotek zarządzających wykonaniem wielowątkowym ( liomp5 lub lguide ) ( w przypadku kompilacji z opcją openmp biblioteki dołączane są automatycznie). Kolejna biblioteka lpthread stanowi interfejs z wątkami systemowymi. Ostatecznie, np. w przypadku linkowania z biblioteką LAPACK, standardowe wywołanie linkera powinno zawierać: L/opt/intel/mkl/10.1.0.015/lib/em64t/ lmkl_lapack lmkl liomp5 lpthread 16 / 27

Większość złożonych procedur MKL wykorzystuje wielowątkowość do podniesienia wydajności obliczeń na procesorach wielordzeniowych i maszynach wieloprocesorowych. W przypadku stosowania wielowątkowości także poza procedurami MKL, biblioteka często potrafi dostosować odpowiednio liczbę wątków, np. w przypadku jeśli zrównoleglenie zostało dokonane przez kompilator Intela (za pomocą dyrektyw OpenMP lub opcji zrównoleglenia automatycznego). Czasami jednak konieczne jest jawne sterowanie liczbą wątków stosowaną przez procedury MKL (np. w przypadku uruchomienia wielu procesów MPI na różnych rdzeniach procesora wielordzeniowego, z których każdy wykonuje procedury MKL). Można tego dokonać ustawiając odpowiednią wartość zmiennej środowiskowej MKL_NUM_T HREADS. 17 / 27

Przykład prostego kodu wykorzystującego bibliotekę MKL, wraz z wariantami kompilacji i uruchomienia znajduje się tutaj [link]. Kompilacja kodu równoległego z przesyłaniem komunikatów Programy, które chcą wykorzystać zasoby więcej niż jednego węzła obliczeniowego, muszą stosować model równoległości z pamięcią rozproszoną i przesyłaniem komunikatów. Standardowym narzędziem do implementacji takich programów jest biblioteka impi Intel MPI. Programy w modelu przesyłania komunikatów zawierają jawne wywołania procedur realizujących komunikacje między 18 / 27

procesami. Opis modelu przesyłania komunikatów i specyfikacji MPI można znaleźć na jednej ze stron WWW wymienionych w zakładce Tutoriale [link]. Kompilacja kodu zawierającego wywołania procedur MPI musi uwzględniać położenie plików nagłówkowych procedur MPI i implementacji bibliotek. W analogiczny sposób jak dla kompilatorów i biblioteki MKL należy nadać wartości odpowiednim zmiennym środowiskowym. Właściwe skrypty znajdują się w katalogu /opt/intel/im pi/3.2/bin64/. Przykładowo dla powłoki bash można użyć komendy: 19 / 27

$ source /opt/intel/impi/3.2/bin64/mpivars.sh lub włączyć odpowiednią linię do pliku.bash _profile. Podobnie dla powłoki tcsh można wykorzystać komendę source lub wstawić linijkę: source "/opt/intel/impi/3.2/bin64/mpivars.csh" do pliku.cshrc w katalogu domowym 20 / 27

użytkownika. Kompilacji najdogodniej dokonuje się korzystając z gotowych skryptów automatycznie dołączających odpowiednie pliki nagłówkowe i biblioteki. Po nadaniu odpowiednich wartości zmiennym środowiskowym skrypty wywołuje się poleceniami: w przypadku prostej kompilacji programu w Fortranie 21 / 27

$ mpiifort o nazwa.bin nazwa.f w przypadku kompilacji programu w C++ z wykorzystaniem dyrektyw OpenMP $ mpiicpc O3 openmp o nazwa.bin nazwa.cpp w przypadku kodu w C z wykorzystaniem dyrektyw OpenMP i biblioteki MKL 22 / 27

$ mpiicc O3 openmp L/opt/intel/mkl/10.1.0.015/lib/em64t/ lmkl_em64t o nazwa.bin nazwa.c Powyższe komendy dokonują kompilacji i linkowania kodu. W przypadku złożonych programów o wielu plikach źródłowych w odpowiednich plikach Makefile można rozbić kompilację i linkowanie, stosując odpowiednie opcje do jednego i drugiego procesu. W obu przypadkach, i jako kompilator, i jako linker, można użyć opisanych wyżej skryptów. Uruchomienie programu równoległego z przesyłaniem komunikatów odbywa się poprzez jednoczesne uruchomienie wielu 23 / 27

kopii pliku binarnego na różnych węzłach klastra. Realizuje to kolejny skrypt o nazwie mpirun (specjalnie przeznaczony do współpracy ze środowiskiem PBS/Torque. Plik wsadowy, o przykładowej nazwie runme.torque, systemu kolejkowego PBS/Torque zawierający polecenie uruchomienia 32 kopii (opcja n ) pliku nazwa.bin z zaznaczeniem, że na jednym węźle klastra mają zostać uruchomione 2 procesy (opcja perhost ) oraz że jako polecenia połączenia między węzłami należy użyć ssh (opcja 24 / 27

r ) wygląda następująco: #!/bin/sh #PBS l nodes=16:ppn=2 cd {katalog_z_przykladami} mpirun r ssh perhost 2 n 32 nazwa.bin 25 / 27

Przesłanie powyższego zadania do systemu kolejkowego i ewentualne sprawdzanie aktualnego stanu zadania odbędzie się za pomocą standardowych poleceń PBS/Torque: $ qsub runmetorque $ qstat Wyniki zapisane zostaną do pliku runme.tor que.o[numer_zadania], a ewentualne błędy do pliku runme.torque.e[numer_zadania]. 26 / 27

Przykład prostego kodu z przesyłaniem komunikatów MPI znajduje się tutaj [link]. Bardziej złożony przykład z przesyłaniem komunikatów MPI, zrównolegleniem OpenMP i wykorzystaniem biblioteki MKL znajduje się tutaj [link]. 27 / 27