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.