Preskočiť na obsah

Kompilácia softvéru na clustri

Na clustri Devana existujú tri hlavné spôsoby kompilácie softvéru.

1. Kompilácia na prihlasovacom uzle

Pre väčšinu používateľov ide o najjednoduchšiu možnosť.

Prihlasovacie uzly už poskytujú kompilátory, vývojové knižnice a systémové hlavičkové súbory potrebné na zostavenie softvéru.

cmake -S . -B build
cmake --build build -j 4

Túto možnosť je vhodné zvoliť, ak kompilujete softvér iba príležitostne. Vo väčšine prípadov nie je potrebné robiť nič viac.

Obmedzenia zdrojov

Prihlasovacie uzly sú zdieľané viacerými používateľmi a podliehajú obmedzeniam zdrojov. Kompilácia je v súčasnosti obmedzená na 4 CPU jadrá.


2. Použitie testovacej partition

Ďalšou možnosťou je vyžiadať si zdroje z partition testing.

Kompilácia tak môže prebiehať prostredníctvom plánovača úloh a zároveň využívať uzly, ktoré poskytujú štandardné vývojové prostredie a systémové hlavičkové súbory, podobne ako prihlasovacie uzly. V prípade testovacej partition na Devane je k dispozícii 16 CPU jadier.

Nevýhodou je, že v tejto partition je k dispozícii iba obmedzený počet uzlov (iba 2). Ak ich už používajú iní používatelia, na spustenie úlohy môže byť potrebné čakať.

Ďalším problémom môže byť kompilácia na paralelných súborových systémoch, ktorá môže byť pomalá a môže spôsobovať problémy niektorým zostavovacím systémom, najmä pri použití veľkého počtu paralelných úloh a veľkého množstva malých objektových súborov.

Prihlasovacie uzly nemajú lokálny priestor typu scratch, preto môže byť kompilácia veľkých projektov na prihlasovacích uzloch pomalá.


3. Kompilácia na výpočtovom uzle

Pri rozsiahlejších zostaveniach alebo pri kompiláciách za behu (JIT) je možné vyžiadať si štandardný výpočtový uzol.

Táto možnosť poskytuje výrazne viac CPU a pamäťových zdrojov a zároveň zabraňuje zaťažovaniu prihlasovacích uzlov kompiláciou.

Štandardné výpočtové uzly však obsahujú iba runtime prostredie. Vývojové balíky a systémové hlavičkové súbory na nich zámerne nie sú nainštalované.

Na kompiláciu softvéru na výpočtovom uzle je potrebné načítať modul build-tools:

module load build-tools

Modul poskytuje vývojové prostredie založené na Singularity, ktoré obsahuje požadované systémové hlavičkové súbory.

Interaktívne prostredie na zostavenie

Interaktívne vývojové prostredie je možné spustiť pomocou:

build-shell

Napríklad:

module load build-tools
build-shell

module load GCC/15.2.0

cmake -S . -B build
cmake --build build -j 64

Aktuálny adresár, ako aj adresáre /project a /storage-apps, sú dostupné vo vnútri kontajnera. Súbory vytvorené počas zostavenia sa preto zapisujú priamo do štandardného súborového systému clustra.

Vývojové prostredie je možné opustiť pomocou:

exit

Spustenie jedného príkazu

Namiesto spustenia interaktívneho prostredia je možné jednotlivé príkazy vykonať priamo vo vývojovom prostredí pomocou build-env:

build-env cmake -S . -B build
build-env cmake --build build -j 16

Načítanie toolchainu

Obraz kontajnera neobsahuje kompletný toolchain. Požadovaný toolchain je preto stále potrebné načítať z prostredia Environment Modules, napríklad pomocou module load ....

Kompilácia na paralelných súborových systémoch

Kompilácia na paralelných súborových systémoch môže byť pomalá a môže spôsobovať problémy niektorým zostavovacím systémom, najmä pri použití veľkého počtu paralelných úloh a veľkého množstva malých objektových súborov.

Na výpočtových uzloch je možné na dočasné súbory vytvorené počas kompilácie použiť lokálne úložisko /work. Treba však pamätať na to, že po dokončení úlohy je potrebné skompilované súbory skopírovať na trvalé úložisko, pretože obsah adresára /work sa po skončení úlohy odstráni.

mkdir /work/$SLURM_JOB_ID/build
cmake -S . -B /work/$SLURM_JOB_ID/build
cmake --build /work/$SLURM_JOB_ID/build -j 64
cp -rf /work/$SLURM_JOB_ID/build/* /project/your-project/

Ktorú možnosť použiť?

Možnosť Vhodné pre Vývojové hlavičkové súbory Zdroje
Prihlasovací uzol Malé a príležitostné zostavenia Áno Obmedzené na 4 CPU jadrá
Testovacia partition Väčšie zostavenia so štandardným prostredím Áno Obmedzená dostupnosť
Výpočtový uzol + build-tools Veľké alebo paralelné zostavenia Štandardne nie, poskytuje ich však build-tools Zdroje pridelené plánovačom úloh

Pri príležitostnej kompilácii je zvyčajne najjednoduchšie použiť prihlasovací uzol.

Pri veľmi rozsiahlych zostaveniach, ktoré trvajú niekoľko hodín, alebo pri JIT kompilácii použite výpočtový uzol spolu s modulom build-tools.

Created by: Marek Štekláč