Biuletyn nr 9

Biuletyn KDM
1 | 2 | 3 | 4 | 5
6 | 7 | 8 | 9 | 10
11 | 12 | 13 | 14
15 | 16 | 17 | 18
19 | 20 | 21 | 22
23 | 24 | 25 | 26
27 | 28 | 29 | 30
31 | 32
Lista biuletynów

Biuletyn nr 9 (15 lutego 2006)

Spis treści

ICM: Oferta szkoleń na semestr letni 2006

Autor: Piotr Kmieć

W lutym wznawiamy przeprowadzanie szkoleń w ICM. Część szkoleń będzie odbywała się cyklicznie. Szczególnie gorąco zachęcamy do uczestniczenia w zajęciach początkujacych użytkowników. Szczegółowe programy i bieżące informacje można znaleźć na stronie Szkolenia. Większość szkoleń będzie odbywała się w piątki. Najczęściej szkolenie będzie składało się z dwóch części: pierwszej wykładowej i drugiej polegającej na praktycznych ćwiczeniach w laboratorium komputerowym.

W najbliższym czasie planowane są następujące szkolenia:

  • 24.02.2006 "Debugowanie programów na komputerach KDM".
  • 1-3.03.2006 "ANSYS i ANSYS CFX dla uczestników Licencji Krajowej 2006".
  • 10.03.2006 "Wprowadzenie do obliczeń w programie MATLAB".
  • 23.03.2006 Accelrys - "Introduction to Discovery Studio 1.5".
  • 24.03.2005 Accelrys - "Structure Based Drug Design with DS 1.5".
  • 30.03.2006 "Podstawy środowiska i narzędzi UNIX".
  • 31.03.2006 "Skryptologia i systemy kolejkowe".
  • 7.04.2006 "Podstawy pracy na komputerach ICM".

Jesteśmy otwarci na Państwa komentarze i uwagi jak rownież propozycje dotyczące nowych tematów szkoleń.

Szczegółowych informacji na temat szkoleń udziela Piotr Kmieć.

Uruchomiony został również alias pocztowy szkolenia@icm.edu.pl.

Narzędzia: Callgrind

Autor: Łukasz Ligowski

Wstęp

Podstawowe programy do profilingu (gprof i gcov) dostępne w systemach unixowych mogą wydawać się skomplikowane i niewygodne w użyciu. Istnieją jednak narzędzia które są przyjazne dla większej grupy użytkowników i są o wiele bardziej wygodne w użyciu. Callgrind wraz z graficzną nakładką KCachegrind jest dobrym przykładem takich narzędzi.

Przykład użycia

Pokażemy przykład zastosowania Callgrinda na nieco zmodyfikowanej implementacji algorytmu obliczającego liczbę Pi, który występował już w poprzednich odcinkach biuletynu.

//Przyklad szeregowy - calkowanie numeryczne
//Obliczanie liczby Pi
#include<math.h>
#define N 1000000
float pi = 0.0;

float f(float x){

        return 1.0/(1.0+x*x);

};

float compute_pi(int iterations){

        int i;

        for(i=0; i < iterations; i++)
                pi += f( (0.5+i)/iterations );

        pi*=(float)(4.0/iterations);

        return pi;
};

int main(void){

        printf("PI=%f\n", compute_pi(N));

}

Do podstawowego działania Callgrinda wystarczy zwykły plik binarny i rekompilacja nie jest wymagana. Jak później zobazymy dodanie flag debugowania i ponowna rekompilacja jest przydatna ale nie niezbędna. Badany program wywołujemy następująco:

 callgrind ./a.out

Poprawne wykonanie powinno wypisać na ekran podobne komunikaty

==27416== Callgrind-0.10.1, a call-graph generating cache profiler.
==27416== Copyright (C) 2002-2005, and GNU GPL'd, by J.Weidendorfer et al.
==27416== Using LibVEX rev 1471, a library for dynamic binary translation.
==27416== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==27416== Using valgrind-3.1.0, a dynamic binary instrumentation framework.
==27416== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==27416== For more details, rerun with: -v
==27416==
==27416==
==27416== For interactive control, run 'callgrind_control -h'.
PI=3.141349
==27416==
==27416== Events    : Ir
==27416== Collected : 39118759
==27416==
==27416== I   refs:      39,118,759

oraz w katalogu którym uruchamialiśmy Callgrinda powinien powstać plik o podobnej nazwie gdzie numer na końcu równy jest temu który widoczny był na początku linii na ekranie (jest to numer procesu).

callgrind.out.27416

Można oglądać go w trybie tekstowym ale nie jest to wygodna metoda. O wiele czytelniej dane prezentują się w KCachegrindzie.

Przykładowe okno KCachegrinda

Callgrind

Callgrind należy do pakietu narzędzi optymalizacyjnych Valgrind. Opis całego pakietu zasługuje na odrębny artykuł i skupimy się tylko na Callgrindzie.

Callgrind emuluje procesor w trakcie wykonywania testowanego programu. Z jednej strony pozwala to na:

  • brak konieczności rekompilacji
  • profiling programów dynamicznie linkowanych wraz z bibliotekami
  • symulację cache'u procesora
  • tryb interactive

a z drugiej powoduje:

  • narzut na ilość wymaganej pamięci
  • istotny narzut na czas wykonywania kodu
  • niewielkie niedokładności w pomiarach w porównaniu z prawdziwym wykonaniem

Większość wad i zalet Callgrinda wynika z tego, że wykorzystuje on emulację procesora. Umożliwia to symulację tak zwanych hardware performance counters znanych z "dużych" maszyn takich jak Cray, na procesorach które nie takowych nie posiadają. Dzięki temu można zbierać dokładne informacje o programie bez rekompilacji. Cena jaką za to się płaci to drastycznie zmniejszona szybkość wykonania programu (do 50 razy).

Tryb interactive pozwala na oglądanie częściowych wyników w zapisywanych przez Callgrind w miarę pracy programu.

Oprócz tego Callgrind może wykorzystywać informacje do debugowania dołączane przez odpowiedni parametr -g podczas kompilacji.

KCachegrind

Format plików wynikowych generowanych przez Callgrind nie jest zbyt przyjazny dla użytkownika. KCachegrind radzi sobie z przyjaznością o wiele lepiej ale i tak jest wart kilku słów opisu.

Będziemy kontynuować profililing programu liczącego Pi.

Przykładowe okno KCachegrinda

Domyślnie po lewej stronie okna znajdują sie dwa panele a po prawej znajduje się główna część robocza. Opiszę pokrótce przeznaczenie każdego z nich:

  1. Panel z graficzną wizualizacją ilości czasu spędzonego w każdej funkcji. Na obrazku w panelu poniżej zaznaczona jest funkcja main, w która wywołuje jedynie funkcję compute_pi i spędza w niej 99,69% czasu.
  2. W tych zakładkach można obejrzeć źródła programu (jeśli program został skompilowany z informacjami dla debuggera) wraz z informacją o liczbie wykonań każdej linii. Listę wszystkich wołających inne funkcje oraz wizualizację ich wizualizację w zakładce Callee Map (która posiada duże możliwości konfiguracji).
  3. Tutaj znajdują się informacje podobne jak wyżej ale dotyczące funkcji wywoływanych. Jedną z bardziej interesujących zakładek jest Call Graph, która pokazuje drzewo wywołań dla programu.
  4. W tym panelu znajduje się lista wszystkich wywoływanych przez program funkcji. W kolumnach licząc od lewej znajdują sie informacje o:
    • łącznym czasie spędzonym w danej funkcji
    • czasie spędzonym tylko w danej funkcji (dla funkcji która nie wywołuje innych funkcji jest wartości w pierwszej kolumnie)
    • liczbie wywołań
    • nazwie funkcji

Dostępność w ICM

Callgrind dostępny jest na klastrze halo a KCachegrind na rekinie.

Zobacz też

Strony domowe:

Podobne programy:

Maszyny: Cray X1e (tornado)

Autor: Łukasz Bolikowski

Przedstawię krótko architekturę tornado, jednej z dwóch najważniejszych maszyn obliczeniowych w ICM.

Jest to egzemplarz serii Cray X1e. Najważniejsze parametry:

  • 8 węzłów (ang. node)
    • 4 procesory MSP (czyli 16 procesorów SSP) w każdym węźle
    • 16 GB pamięci RAM w każdym węźle
  • 1.3 TB pamięci dyskowej

Procesor

W komputerach Cray X1e "procesor" ma dwojakie znaczenie.

O ile nie jest powiedziane inaczej, przez "procesor" należy rozumieć MSP (ang. Multi Streaming Processor). MSP składa się z czterech procesorów SSP (ang. Single-Streaming Processor).

Jest to dla nas o tyle ważne, że na etapie kompilacji programu wybieramy, czy chcemy go uruchamiać na "procesorze" SSP, czy na "procesorze" MSP zbudowanym z czwórki procesorów SSP.

Domyślnie kompilator skompiluje kod na MSP. Chcąc wskazać, że interesuje nas SSP, należy dodać opcję:

  • ftn -Ossp ...
  • cc -hssp ...

Jeśli fazy kompilacji i linkowania wykonywane się osobno (ftn -c prog.c ; ftn prog.o -o prog.x), należy dodać opcję -Ossp/-hssp do obu faz.

Pamięć

Jak zostało napisane powyżej, każdy z 8 węzłów tornado zawiera 16 GB pamięci RAM.

Procesory znajdujące się na tej samej płycie mogą korzystać z tej pamięci jak z pamięci współdzielonej (ang. shared memory), a więc używać do komunikacji biblioteki OpenMP. Ogranicza to więc stosowalność OpenMP do 16 SSP.

Chcąc używać więcej niż 16 SSP, należy korzystać z mechanizmów komunikacji właściwych dla pamięci rozproszonej (ang. distributed memory).

Szerzej o specyfice pamięci współdzielonej i rozproszonej pisaliśmy w Biuletynie nr 3.


Kompilacja i CPES

W skrócie: kompilację należy wykonywać wyłącznie w katalogu /cpes lub w jego podkatalogach. Utarł się zwyczaj, że użytkownicy zakładają sobie w /cpes podkatalog o nazwie takiej, jak swój login (np. /cpes/bolo) i tylko tam umieszczają swoje pliki i wykonują kompilację.

Skąd bierze się to ograniczenie, jak przebiega kompilacja i jak można ją znacząco przyspieszyć - pisaliśmy o tym w Biuletynie nr 5.

Kolejki

Na tornado zainstalowany jest system kolejkowy PBS. Uruchamiając zadania obliczeniowe należy bezwzględnie używać systemu kolejkowego. Należy wyspecyfikować co najmniej:

  • czas działania programu (wall time): #PBS -l cput=HH:MM:SS
  • typ i liczbę procesorów:
    • dla SSP: #PBS -l mppssp=X
    • dla MSP: #PBS -l mppe=X

System kolejkowy PBS został opisany w Biuletynie nr 4.

Można też skorzystać z pomocy generatora skryptów PBS.

Scheduler

Niezależnie od systemu kolejkowego, Cray X1e ma swój wewnętrzny system przydzielający zadaniom zasoby (m.in. procesory). Aby obejrzeć listę aktualnie uruchomionych zadań, należy wydać polecenie: psview -l. Aby zobaczyć szczegółowo które zadania zajmują które procesory, należy wykonać: psview -m.

Kompilatory, debuggery

Podstawowe środowisko programistyczne zawiera kompilator Fortranu (ftn) oraz C/C++ (cc/CC).

Dostępne są także dwa debuggery: TotalView, oraz gdb. TotalView pozwala debugować także kody równoległe.

Pracując z kompilatorami należy pamiętać, że:

  • na etapie kompilacji wybieramy: MSP czy SSP
  • kompilację należy przeprowadzać w katalogu /cpes lub jego podkatalogach

Kompilatory Cray potrafią przeprowadzać wiele różnego rodzaju automatycznych optymalizacji kodu. Zachowanie to można kontrolować przez całą gamę opcji kompilacji, w przypadku Fortranu opcje te mają zazwyczaj prefiks -O, w przypadku C/C++ -h.

Miłą dla programisty cechą kompilatorów Cray X1e jest możliwość generowania listingów pokazujących kod "ozdobiony" informacjami o przeprowadzonych optymalizacjach. W kompilatorze Fortranu służy do tego opcja -ra, w kompilatorze C/C++ -h list=a. Poniższy przykład pokazuje fragment listingu z zaznaczeniem wektoryzacji (V), multistreamingu (M) i zrównoleglenia (P) poszczególnych pętli:

   7.          !$omp parallel do default(none) &
   8.          !$omp   private(i, j, work) shared(a, b, c, m, n)
   9.  P-----<   do i = 1, m
  10.  P MV--<     do j = 1, n
  11.  P MV          work(j) = sin(b(j)) * c(i, j)
  12.  P MV-->     end do
  13.  P           a(i) = 0
  14.  P MV--<     do j = 1, n
  15.  P MV          a(i) = a(i) + work(j) * c(i, j)
  16.  P MV-->     end do
  17.  P----->   end do

Szczegółowych informacji o znaczeniu poszczególnych opcji kompilacji należy szukać na stronie manuala (man ftn, man cc), a także w podręcznikach:

  • S-2179-55 Cray C and C++ Reference Manual
  • S-3901-55 Cray Fortran Compiler Commands and Directives Reference Manual

Biblioteki

  • LibSci - bogata biblioteka do obliczeń naukowych, dostarczana z Cray X1e. Zawiera m.in. procedury BLAS, LAPACK, FFT, BLACS, ScaLAPACK. Więcej informacji: man intro_libsci oraz dokumentacja CrayDoc: S-2386-52 (PDF).
  • BioLib - biblioteka służąca do obliczeń bioinformatycznych, przede wszystkim do uliniawiania sekwencji. Korzysta z szybkiego układu BMM (Bit Matrix Multiply) będącego częścią Cray X1e. Istnieje też wersja open source, działająca na dowolnej architekturze. Więcej informacji: man intro_biolib.
  • PETSc - biblioteka numeryczna. Więcej informacji: tutaj.

Oprogramowanie

  • Charmm (obl. biomolekularne)
  • CPMD (chemia kwantowa, obl. biolomekularne, obl. materiałowe)
  • Gamess (chemia kwantowa)
  • Gaussian (chemia kwantowa)
  • Gromos (obl. biomolekularne)
  • VASP (obl. materiałowe)

Dokumentacja

Komplet podręczników do programowania i administracji maszynami Cray znajduje się pod adresem: http://docs.cray.com/ . Zazwyczaj dostępna jest zarówno wersja HTML, jak i PDF. W szczególności warto zapoznać się z:

  • S-2346-25 Cray X1 Series System Overview
  • S-2179-55 Cray C and C++ Reference Manual
  • S-3901-55 Cray Fortran Compiler Commands and Directives Reference Manual
  • S-3692-55 Fortran Language Reference Manual, Volume 1
  • S-3693-55 Fortran Language Reference Manual, Volume 2
  • S-3694-55 Fortran Language Reference Manual, Volume 3
  • S-2315-55 Optimizing Applications on Cray X1 Series Systems
  • S-2378-54 Migrating Applications to the Cray X1 Series Systems
  • S-2386-52 (tylko PDF) Man Page Collection: Scientific Library Routines
  • S-6504-65 (tylko PDF) Etnus TotalView Users Guide
  • S-6505-65 (tylko PDF) Etnus TotalView Reference Guide