= bubbalog =Дневникът на моето стадо

Тест с HPL на клъстър с OpenMPI на FreeBSD 8.0

Tuesday 02.03.2010 01:18 EEST · Публикувано от в = Cluster =, = FreeBSD =, = Parallel =

Пътеводител – http://wiki.bsdforen.de/howto/mpi

Ето и най-накрая нещото, което всеки иска да види като реален резулат – колко мощ се таи в неговия клъстър? Единицата за измерване на произвоителноста се измерва във FLOPS (акроним на FLoating point Operations Per Second), като се използват основно приозводните нему – MFLOPS, GFLOPS и т.н.

Производителноста на суперкомпютрите през годините
Бариера Година на преминаване Стойност
FLOPS 1941 100
KFLOPS 1946 103
MFLOPS 1964 106
GFLOPS 1987 109
TFLOPS 1997 1012
PFLOPS 2008 1015
EFLOPS 1018
ZFLOPS 1021
YFLOPS 1024

Въпреки наличието на много програмки които намерих в процеса на четене, като най-реален тест се наложи HPL (High Performance Linpack) benchmark-а. И тука започна ходенето по мъките. Както вече споменах не един път, още в началото на работата отбелязах една голяма греда тъй като се оказа, че MPICH2 има някакви ядове със старата техника която няма поддръжка на SSE инструкции на процесора. Това разбира се се оказа причина нито една паралелна програма да не тръгне, а какво остава и за тест. Последва смяна на MPICH2  с LAM/MPI, но там компилирането на HPL от портовете се оказа кауза пердута – просто зацикли на едно място (вече не помня с каква грешка) и до там. Въпреки, че всички други програмки вървяха, това ме накара да разгледам и третия масов вариант – OpenMPI. Тука мисията се оказа още по преебана, защото след много четене най-накрая излезе, че трябва нещата да се нагодят на ръка, а не от пакетите или портовете – нещо което ми казаха да не правя още в самото начало когато започнах да се заниавам с FreeBSD 4.0 преди доста години. Тъй като обаче засега няма опция за обновя ударно компопарка за да работя спокойно с MPICH2, а решение да подкарам HPL на LAM/MPI – реших все пак за се преборя с тази задача на OpenMPI. А за да е още по-отвратително и гадно, трябваше да се водя от немско упътване което като мине през транслацията на Гугле се смила и разместват думи (поне логиката се запазва на 90%), а и самото упътване въпреки, че явно е писано за FreeBSD се оказа доста невярно и ми довкара около ден и полловина проби и четене на съвсем отвеяни и далеч от темата неща. Поне обаче понаучих нещо полезно странично. Както се подразбира, това са първите ми стъпки в материята и може да има някакви неточности, за което моля да бъда ивинен.

И така – да започнем. Предполага се, че щом някой е стигнал до тук има работещ клъстер с OpenMPI и няма проблем с кмпилиране и подкарване на паралелни приложения. Основната работа ще е в хоум директорията на работния потребител, за което може да се пренесем (ако не сме) направо там

% cd /usr/home/user

Първото което трябва да направим е да свалим няколко файла[1] и да инсталираме още няколко неща набързо. Нещата които се инсалират с pkg_add като готви пакети разбира се са налични и като портове, но не ми се чакаше и затова пак избрах този мързелив начин, но който иска може да си ги инсталира и от портовете. Съшо така е редно да се спомене, че при инсталиране на някои неща се иска root права. Това кое какво иска коше да познаете по промпта – % означава, че командата е изпълнявана ато user, а # значи че се изпълнява като root. Ако някъде даде засечка, просто сменете потребителя, но за предпочитане е да се работи като user колкото може повече – това ще гарантира, че няма в последствие д иате проблеми с правата.

% fetch -v http://www.netlib.org/benchmark/hpl/hpl-2.0.tar.gz
% fetch -v http://mirror.iat.sfu.ca/gentoo/gentoo-distfiles/GotoBLAS-1.22.tar.gz
# pkg_add -rv g95
# pkg_add -rv gmake
# pkg_add -rv gcc42

От тук натам започва и малко по-пипкавата работа. Поетапно трябва да се донастроят и компилират компоннтите, които няма как да се сложат автоматично.Първата задача е да се компилира GotoBLAS (Goto’s Basic Linear Algebra Subprograms)

% tar -zxvf GotoBLAS-1.22.tar.gz
% cd /usr/home/sole/GotoBLAS

Именно тук се натъкнах на пътвия недъг на немците. Оказа се, че на едно място при компилацията се използва по подразбиране g77 компилатор за фортран, който както се разбира го няма ни като порт, ни като пакет и инсталацията зацикляше. Признавам, тука действах напосоки (работата стана обаче) и като разгледах файла Makefile.rule намерих от кои редове се извикват тези компилатори на фортран. Просто проверих и единствения който се оказа наличен беше g95 (затова и по-рано го инсталирахме и него), декоментирах реда за да се извиква той и всичко заспа.

% ee Makefile.rule
[…]
F_COMPILER = G95
[…]
% gmake

Следващата спирка е подготовката за компилирането на самия HPL.

% tar -zxvf hpl-2.0.tar.gz
% cd hpl-2.0
% cp setup/Make.FreeBSD_PIV_CBLAS Make.i386
% ee Make.i386

Ето това е момента, в който наистина си скъсах нервите и загубих доста часове в четене и безполезни опити. За да се компилира всичко се редактират следните редове по показания начин. Целта е да се смени предназначениети на цялата пущина да не ска да работи с MPICH2 (явно за него е писана), а с OpenMPI

ARCH         = i386
[…]
TOPdir       = $(HOME)/hpl-2.0
[…]
MPdir        = /usr/local/mpi/openmpi
MPinc        = -I$(MPdir)/include
MPlib        = $(MPdir)/lib/libmpi.so
[…]
LAdir        = /usr/local/lib/
LAinc        =
LAlib        = $(LAdir)/libgoto.a
[…]
CC           = $(MPdir)/bin/mpicc
[…]
LINKER       = $(MPdir)/bin/mpif77
[…]
HPL_OPTS     = -DASYOUGO -DFASTSWAP
[…]

Първото което беше не наред е, че е посочен несъществуващ файл. GotoBLAS като краен вариант генерира libgoto.a, а не libgoto.so както е описал немеца, а това го разбрах след малко четене предварително (започвам да надобрявам), тъй като се усъмних, защото в оригиналния файл библиотеките завършваха на .а. Второто което ме изнервира максимално е проблема с реда HPL_OPTS заради показанията по подразбиране при компилиране се опитва да ползва cBLAS и дава грешка[2] та зацикля всичко на финала баш. Решението намерих замо на едно място – едно русначе го е имало същото и след това се е оправил, а защо е направено така – не е написал, тука не съм достатъчно добър, имам предположние, ма да не пиша глупости. И третото е – да се копира оная сбъркана библиотека където и е мястото, че и тя ми бръкна в здравето…

% cp /usr/home/sole/GotoBLAS/libgoto.a /usr/local/lib/

И дойде време да компилираме и това

# gmake arch=i386

Според брата немец, ако се появи проблем по време на компилация може да се използва следната команда за да се изчисти всичко кеширано до момента

# gmake arch=i386 clean

Практиката ми доказа обаче, че това не  най-удачния вариант. За целта просто си копирайте Make.i386 някъде настрани, изтрийте hpl-2.0, разархивирайте и започнете спокойно наново. Това можеби беше последното нещо (мяй трябваше да се спомене по-рано), което бая ме забави. Проблема е там, че пуснете ли веднъж gmake, всичко се кешира и даже и да редактирате Make.i386 правилно – файда няма… смятай каква гъзоврътканица си причиних докато го разбера… Но ако всичко мине като хората накрая в ~/hpl-2.0/bin/i386 трябва да се появят 2 файла – xhpl и HPL.dat, съответно – стартиращия и файла с настройки.

От тук натам започва малко по-приятната работа, въпреки, че първия път преди около 15 дена и това бая ядове ми вкара. Следващата задача е да се настрои самия тест за работа. Като начало би било идейно да си направите едно линкче към гореописаната директория съдържаща стартирашия файл и настройките.

% ln -sf ~/hpl-2.0/bin/i386/ ~/hpl
% cd ~/hpl
% ee HPL.dat

По самия файл и коя настройка за какво е лично аз имам някои неясноти. Информацията не  много, но терминологията ми е малко мътна още. Единствено знам засега (натам ще изчстя тоози проблем), че редовете които трябва да се редактират са

[…]
1            # of problems sizes (N)
5000         Ns
1            # of NBs
200          NBs
[…]
3            # of process grids (P x Q)
2 1 2        Ps
1 2 1        Qs
[…]

От редактирането на първите 4 реда зависи коко сложен и продължителен ще е теста, оказва се големината на матрицата която се смята…  Вторите 3 реда показват броя на мнималните процес които трябва а се подарат за теста. На пътвия ред тройката показва броя на колонките на следващите 2 реда… Материята ми е малко мътна и като терминология, н засега ще спра, за да на напиша някоя глупост. С течение на времето с ученето мисля да елиминирам този си проблм :)

В крайна сметка – ето го файла както трябеа да изглежда, поне при мен с това върви. Трябва да се има предвид, че бъзикайки се с горепосочение данни по редовете даваше различни показания, като при мен с този файл даде най-високи резултати

HPLinpack benchmark input file
Innovative Computing Laboratory, University of Tennessee
HPL.out      output file name (if any)
6            device out (6=stdout,7=stderr,file)
3            # of problems sizes (N)
500 750 1000 Ns
3            # of NBs
50 100 150   NBs
0            PMAP process mapping (0=Row-,1=Column-major)
3            # of process grids (P x Q)
2 1 2        Ps
1 2 1        Qs
16.0         threshold
3            # of panel fact
0 1 2        PFACTs (0=left, 1=Crout, 2=Right)
2            # of recursive stopping criterium
2 4          NBMINs (>= 1)
1            # of panels in recursion
2            NDIVs
3            # of recursive panel fact.
0 1 2        RFACTs (0=left, 1=Crout, 2=Right)
1            # of broadcast
0            BCASTs (0=1rg,1=1rM,2=2rg,3=2rM,4=Lng,5=LnM)
1            # of lookahead depth
0            DEPTHs (>=0)
2            SWAP (0=bin-exch,1=long,2=mix)
64           swapping threshold
0            L1 in (0=transposed,1=no-transposed) form
0            U  in (0=transposed,1=no-transposed) form
1            Equilibration (0=no,1=yes)
8            memory alignment in double (> 0)

Добре. Но за какво беше цялото това занятие до тук? Ето, дойде врее да запуснем най-накрая и самия тест. За да тръгне трябва да се намираме в диреторията с изпълнимия и фала за настройка и да изпълним следния ред а да подараме теста локално на една машина.

% mpirun -H <hostname> -np 2 xhpl

Ако искаме д видим колко е цялата мощ на клъстъра, което е и по-интересното – просто използвайте хостфайла на OpenMPI

% mpirun -hostfile ~/mpi.hosts -np 2 xhpl

Ами това е. От тук натам е вече кефа, че мога да се замервам що-годе относително точно и… растящия глад за мегафлопи ;)

* * * * *

[1] Тъй като отделих мнооого време да намеря особено втория (GotoBLAS-1.22.tar.gz) файл, въпреки, че съм пуснал линкче къде се намират в мрежата ги поставям и тук:
hpl-2.0.tar.gz
GotoBLAS-1.22.tar.gz

[2] ето линка от руския фрум, а по-долу е написана и самата грешка която изплюваше накрая.

http://forum.parallel.ru/viewtopic.php?p=5191&sid=9f4c999749f42248e040350a2858cba5#p5191

: undefined reference to `cblas_dtrsv’
/home/sole/hpl/lib/i386/libhpl.a(HPL_pdtrsv.o)(.text+0x14e2): In function `HPL_pdtrsv’:
: undefined reference to `cblas_dcopy’
collect2: ld returned 1 exit status
gmake[2]: *** [dexe.grd] Error 1
gmake[2]: Leaving directory `/usr/home/sole/hpl/testing/ptest/i386′
gmake[1]: *** [build_tst] Error 2
gmake[1]: Leaving directory `/usr/home/sole/hpl’
gmake: *** [build] Error 2

Има един коментар за “Тест с HPL на клъстър с OpenMPI на FreeBSD 8.0”

  1. Здравейте и от мен. Поздрави за хубавата статия- отдавна не бях чел нещо хубаво по темата. Продължавайте в същия дух :))

    ***
    Адреса на сайта е премахнат. Моля не използвайте системата за реклама!
    = bubachko =

Остави коментар

Писането на кирилица е задължително!
Коментари, които не са на кирилица ще бъдат изтрити без предупреждение.
Всеки коментари съдържащи 1 или повече линка, ще бъдат публикувани след одобрение.