Kompilácia softvéru na clustri¶
Na clustri Perun existujú tri hlavné spôsoby kompilácie softvéru. Je potrebné zohľadniť, že cluster používa dve architektúry. Prihlasovacie uzly a CPU uzly používajú architektúru x86, zatiaľ čo GPU uzly používajú architektúru AArch64. Ak sa nepoužíva cross-kompilácia, softvér je preto potrebné zostavovať na strojoch s cieľovou architektúrou.
Na výpočtových uzloch však chýbajú vývojové hlavičkové súbory, takže kompilácia priamo na týchto uzloch môže byť problematická.
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. Na vytvorenie spustiteľných súborov určených pre GPU partition je však potrebné použiť cross-kompiláciu.
Obmedzenia zdrojov
Prihlasovacie uzly sú zdieľané viacerými používateľmi a podliehajú obmedzeniam zdrojov.
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.
Táto možnosť je vhodná pre kompilácie, ktoré vyžadujú viac zdrojov, než je vhodné používať priamo na prihlasovacom uzle.
Nevýhodou je, že v tejto partition je k dispozícii iba obmedzený počet uzlov. Ak ich už používajú iní používatelia, na spustenie úlohy môže byť potrebné čakať.
Aj v tomto prípade platí, že bez použitia cross-kompilácie nie je možné vytvárať zostavenia určené pre GPU partition.
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é kompilátory, hlavičkové súbory a vývojové knižnice. Je možné ho použiť na CPU výpočtových uzloch aj na GPU výpočtových uzloch.
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 320 # alebo 288 na GPU uzloch
Aktuálny adresár, ako aj adresáre /project a /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
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 72 # na jednej GPU karte
cp -rf /work/$SLURM_JOB_ID/build/* /project/your-project/
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 320
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.