MPI ALELEON Supercomputer: Perbedaan antara revisi

Dari ALELEON by EFISON
(paraphrasing)
(Menghapus flag UCX MPI)
 
(11 revisi perantara oleh pengguna yang sama tidak ditampilkan)
Baris 1: Baris 1:
Halaman ini menjelaskan teknis menjalankan program MPI beserta optimasinya di ALELEON Supercomputer.
Halaman ini menjelaskan teknis menjalankan program MPI di ALELEON Supercomputer.


== '''Open MPI ALELEON Supercomputer''' ==
== '''Open MPI UCX ALELEON Supercomputer''' ==
ALELEON Supercompter menggunakan '''Open MPI yang telah dioptimasi secara khusus''' berdasarkan arsitektur AMD Zen2.  
ALELEON Supercompter menggunakan Open MPI yang telah dioptimasi untuk arsitektur AMD Zen2. Berikut adalah sintak standar menjalankan program MPI di ALELEON Supercomputer melalui SLURM: <syntaxhighlight lang="bash">
=='''Protokol UCX Open MPI di ALELEON Supercomputer'''==
mpirun -np $SLURM_NTASKS <program-MPI-user...>
Berikut adalah format perintah yang digunakan oleh berbagai template program MPI untuk berjalan di ALELEON Supercomputer:
</syntaxhighlight>'''''Keterangan:'''''
'''mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx''' ////
*Variabel <code>SLURM_NTASKS</code> menangkap jumlah ntasks (CPU) pada SLURM Submit Script sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.
Keterangan:
*Semua proses MPI akan dialokasikan ke core thread CPU sehingga '''jumlah proses MPI sama dengan jumlah ntasks pada SBATCH SLURM.''' Variabel '''$SLURM_NTASKS''' menangkap jumlah ntasks sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.
*Berlaku aturan kelipatan 4 untuk jumlah ntasks.
*Flag '''--mca pml ucx --mca osc ucx''' menjalankan OpenMPI pada jaringan RDMA melalui protokol UCX (Unified Communication-X) untuk menghasilkan performa MPI terbaik.
=='''Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread'''==
=='''Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread'''==
Proses MPI pada OpenMPI ALELEON Supercomputer yang dijalankan melalui SLURM telah dirancang untuk '''selalu mengisi penuh core thread per core fisik''', artinya:
SLURM ALELEON Supercomputer menjalankan proses Open MPI untuk '''selalu mengisi penuh core thread per core fisik''', contoh:
*Contoh menjalankan 32 proses MPI, akan dijalankan oleh 16 core fisik / 32 core thread CPU.
*32 proses MPI dijalankan oleh 16 core fisik / 32 core thread CPU.
*Contoh menjalankan 64 proses MPI, akan dijalankan oleh 32 core fisik / 64 core thread CPU.
*64 proses MPI dijalankan oleh 32 core fisik / 64 core thread CPU; dan seterusnya ...
*dst.
Pembagian ini didasarkan pada pengelompokan core CPU pada grup CCX dan CCD AMD Zen2 supaya memastikan penyebaran proses MPI selalu berdekatan antar grup CCX / CCD ''(tightly coupled)'' dan menghasilkan performa terbaik. Semua software komputasi ALELEON Supercomputer telah dioptimasi untuk berjalan dengan skema ini.
Pembagian ini didasarkan pada pengelompokan core pada CCX dan CCD di arsitektur AMD Zen2 supaya memastikan '''tidak ada penyebaran proses MPI yang berjalan antar grup CCX / CCD yang berjauhan''' di mana menyebabkan ''L3 cache miss'' dan menurunkan performa secara signifikan. Open MPI dan SLURM pada ALELEON Supercomputer memastikan penyebaran proses MPI selalu berdekatan antar grup CCX dan CCD '''(''tightly coupled'')''' untuk menghasilkan performa terbaik. Semua software komputasi ALELEON Supercomputer telah dioptimasi untuk berjalan dengan skema di atas.  
[[Berkas:Zen2-uarch-1536x1256.jpg|nir|jmpl|Skema grup CCX dan CCD pada CPU AMD yang digunakan oleh ALELEON Supercomputer]]


[[Berkas:Zen2-uarch-1536x1256.jpg|pra=https://wiki.efisonlt.com/wiki/Berkas:Zen2-uarch-1536x1256.jpg|al=|nirbing|600x600px]]
=== Kelipatan 2 atau 4 untuk Jumlah ntasks (Alokasi CPU) ===
Berdasarkan jumlah core dan grup pada gambar skema CPU diatas, kami menyarankan untuk '''memilih ntasks (alokasi CPU) dengan kelipatan 2 atau 4''' untuk memastikan proses MPI mengisi grup CCX dan CCD yang berdekatan.


== '''(Versi Mudah) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
Bagian ini menjelaskan bagaimana karakteristik ''default'' SLURM ALELEON Supercomputer menjalankan alokasi komputasi untuk job MPI dan panduan menulis '''[[Submit Script ALELEON Supercomputer|SLURM Submit Script]]'''.
=== Menjalankan job MPI satu node dan multi-node secara otomatis ===
SLURM ALELEON '''secara otomatis''' dapat menjalankan job MPI baik pada satu node atau multi-node berdasarkan jumlah ntasks sehingga user cukup mendefinisikan jumlah ntasks tanpa perlu mengatur jumlah nodes.<syntaxhighlight lang="bash" line="1">
#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)
# Alokasi jumlah core thread CPU dan jumlah proses MPI
#SBATCH --ntasks=////
# Alokasi jumlah memori RAM per node
#SBATCH --mem=////
# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////
# Alur jalannya program ...
mpirun -np $SLURM_NTASKS <program-MPI-user...>
</syntaxhighlight>'''Keterangan:'''
* Jumlah ntasks maksimal untuk Partisi epyc (Compute Node CPU) adalah '''384'''.
* Jumlah ntasks maksimal untuk Partisi ampere (Compute Node GPU) adalah '''32'''.
{| class="wikitable mw-collapsible mw-collapsed"
! colspan="3" |Jumlah node yang dipilih SLURM secara otomatis
|-
!Jumlah ntasks
!Partisi epyc (CPU)
<nowiki>*</nowiki>''jumlah node naik setiap kelipatan 128''
!Partisi ampere (GPU)
<nowiki>*</nowiki>''maks 32 core''
|-
|1 - 32
|1
|1
|-
|33 - 128
|1
|X
|-
|129 - 256
|2
|X
|-
|257 - 384
|3
|X
|}
---
---
=== SBATCH mem = alokasi RAM per node ===
Parameter SBATCH <code>mem</code> mengalokasikan jumlah RAM per node baik pada job MPI satu node dan multi-node. Ambil contoh alokasi SBATCH berikut: <syntaxhighlight lang="bash" line="1">
#!/bin/bash
#SBATCH --ntasks=192
#SBATCH --mem=64GB


=== Menjalankan MPI pada Core Fisik ===
# ntasks 192 menggunakan 2 node secara otomatis
Akan tetapi, apabila user tetap ingin menjalankan program MPI sepenuhnya pada core fisik (contoh ketika mengetahui bahwa file input nya berjalan optimal di core fisik) maka harus mengalokasikan '''jumlah SBATCH ntasks 2 kali lipat dari proses MPI yang mau dijalankan'''. Contoh:
# Dengan alokasi RAM 64GB per node sehingga total 128GB untuk 2 node
#SBATCH --ntasks=64
</syntaxhighlight>Job MPI mempunyai kapasitas mem maksimal:
mpirun -np '''32''' --mca pml ucx --mca osc ucx ////
 
* Compute Node CPU (epyc): '''240GB''' (per node).
'''#''' '''Peringatan: sistem akan tetap menghitung 64 core thread''' '''sebagai penghitungan CPU Core Hour!'''
* Compute Node GPU (ampere): '''120GB'''
=='''MPI Satu Node vs Multi Node'''==
Kemampuan utama program MPI adalah melakukan komputasi paralel atau dapat berjalan pada lebih dari 1 node (multi-node) atau lebih dari 128 core thread pada ALELEON Supercomputer. Terdapat beberapa hal yang harus diketahui oleh user:


---
---
===ntasks 1 - 64: Gunakan 1 node===
Untuk jumlah proses mpirun dibawah 65 (1 - 64) gunakan 1 node.
#SBATCH --nodes=1
---
===ntasks >64: Kapan Bisa Multi-node?===
Salah satu hal yang membuat unik (dan sulit) pemograman MPI adalah membutuhkan memori cache CPU sebagai ''buffer'' untuk menampung alur komunikasi paralel.


Apa artinya pada ALELEON Supercomputer untuk ntasks diatas 64?
=== Menjalankan Job Hybrid MPI / OpenMP (OMP) ===
*'''Skenario pertama:''' Menjalankan program MPI yang '''tidak efisien''' dalam mengatur alokasi cache CPU, user harus menambah 1 node setiap kelipatan 64 ntasks.
SLURM dapat menjalankan job hybrid MPI / OMP dengan SBATCH <code>cpus-per-task</code> dan variabel <code>SLURM_CPUS_PER_TASK</code> seperti contoh format berikut: <syntaxhighlight lang="bash" line="1">
*'''Skenario kedua:''' Menjalankan program MPI yang '''efisien''' dalam mengatur alokasi cache CPU, user dapat menambah 1 node setiap kelipatan 128 ntasks.
#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)
 
# Alokasi jumlah core thread CPU dan jumlah proses MPI
#SBATCH --ntasks=////
 
# cpus-per-task mewakili jumlah thread OMP per proses MPI
#SBATCH --cpus-per-task=////
 
# Alokasi jumlah memori RAM per node
# SBATCH --mem=////
 
# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////
 
# Alur jalannya program ...
 
# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
 
mpirun -np $SLURM_NTASKS <program-MPI-user...>
</syntaxhighlight>'''''Keterangan:'''''
 
* Total core CPU yang digunakan adalah '''ntasks * cpus-per-task.'''
* Variabel SLURM_NTASKS menangkap total penghitungan core CPU diatas.  
 
== '''(Versi ''Advanced'') Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI''' ==
Bagian ini menjelaskan bagaimana user secara manual dapat mengatur parameter SBATCH SLURM ALELEON Supercomputer untuk menjalankan job MPI.
 
=== Acuan Spesifikasi Compute Node dengan SBATCH SLURM ===
User dapat mengacu spesifikasi berikut untuk mengatur besar parameter SBATCH secara manual.
{| class="wikitable"
{| class="wikitable"
!Jumlah Node
|+Spesifikasi Compute Node berdasarkan SBATCH SLURM
!Skenario 1
! rowspan="2" |Parameter SBATCH
Jumlah ntasks:
! rowspan="2" |Hardware
!Skenario 2
! colspan="2" |Spesifikasi
Jumlah ntasks:
|-
!Partisi epyc (CPU)
!Partisi ampere (GPU)
|-
|-
|nodes
|Jumlah node
|3
|1
|1
|1-64
|1-128
|-
|-
|ntasks
|Total core CPU
|384
|32
|-
|ntasks-per-node
|Total core CPU per node
|128
|32
|-
|mem
|Memori RAM per node
|240GB
|120GB
|-
|gpus
|Jumlah GPU
|0
|2
|2
|65-128
|}
|129-256
|-
|3
|129-192
|257-384
|}'''Bagaimana User Memilih Jenis Skenario MPI Multi-Node?''' Terdapat beberapa rekomendasi dari admin EFISON:
*''Rule of thumb'': selalu memilih '''skenario 1'''. Apabila user '''membutuhkan jumlah ntasks lebih dari 192, gunakan skenario 2'''.
*User dan admin EFISON dapat melakukan kolaborasi untuk melakukan tes benchmark menentukan tipe skenario multi-node program MPI yang dijalankan.
---
---
===Bagaimana User Menjalankan MPI Multi-Node===
Ketika user mengalokasikan jumlah nodes lebih dari satu pada SBATCH maka SLURM secara otomatis akan menyebarkan proses MPI ke jumlah node yang didefinisikan. Contoh: user mengalokasikan 2 node untuk menjalankan 192 proses MPI:
#SBATCH --nodes=2
#SBATCH --ntasks=192
#SBATCH --mem=128GB


SLURM secara otomatis akan menyebar 192 proses MPI ke 2 node. SLURM sekaligus melakukan optimasi komputasi multi-node berdasarkan protokol network RDMA / UCX dan grouping CCX dan CCD terdekat antar CPU.
=== SBATCH nodes dan ntasks-per-node ===
User dapat mengatur jumlah nodes dan ntasks per node secara manual dengan parameter SBATCH <code>nodes</code> dan <code>ntasks-per-node</code>: <syntaxhighlight lang="bash" line="1">
#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)


# Jumlah node
#SBATCH --nodes=////
# Jumlah ntasks per node
#SBATCH --ntasks-per-node=////
# Alokasi jumlah memori RAM per node
#SBATCH --mem=////
# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////
# Alur jalannya program ...
mpirun -np $SLURM_NTASKS <program-MPI-user...>
</syntaxhighlight>'''''Keterangan:'''''
* Total core CPU yang dipesan adalah '''nodes * ntasks-per-node'''
* Variabel SLURM_NTASKS menangkap total CPU diatas.
---
---
===Mengalokasikan Memori RAM untuk MPI Multi-Node===
Bagaimana user mengalokasikan memori RAM (SBATCH mem) untuk komputasi MPI multi-node?
*SBATCH mem secara otomatis mengalokasikan memori RAM '''per node'''. Pada contoh diatas, user mengalokasikan RAM 128GB per node sehingga total menggunakan 256GB untuk 2 node.
*Jumlah basis RAM disarankan '''1GB per (ntasks / nodes).'''


*
=== SBATCH nodes dan ntasks-per-node untuk Hybrid MPI / OMP ===
 
Hal sebelumnya juga dapat dilakukan untuk hybrid MPI / OMP sebagai berikut: <syntaxhighlight lang="bash" line="1">
#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)
 
# Jumlah node
#SBATCH --nodes=////
 
# Jumlah ntasks per node
#SBATCH --ntasks-per-node=////
 
# Jumlah threading OMP per task MPI
#SBATCH --cpus-per-task=////
 
# Alokasi jumlah memori RAM per node
#SBATCH --mem=////
 
# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////
 
# Alur jalannya program ...
 
# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
 
mpirun -np $SLURM_NTASKS <program-MPI-user...>
</syntaxhighlight>'''''Keterangan:'''''
 
* Total core CPU yang dipesan adalah '''nodes * ntasks-per-node * cpus-per-task'''
* Variabel SLURM_NTASKS menangkap total CPU diatas.
 
---
---
===Alternatif MPI Multi-node: SBATCH ntasks-per-node===
 
SLURM menyediakan opsi alternatif untuk menjalankan MPI multi-node yaitu ntasks-per-node di mana menggantikan ntasks. Sesuai namanya, ntasks-per-node mendefinisikan '''jumlah ntasks per node'''.
=== Menjalankan MPI pada Core Fisik saja ===
'''#SBATCH --ntasks-per-node='''////
User dapat menjalankan program MPI sepenuhnya pada core fisik dengan mengalokasikan '''jumlah SBATCH ntasks 2 kali lipat dari proses MPI yang mau dijalankan'''. Contoh:<syntaxhighlight lang="bash" line="1">
Contoh user menjalankan program MPI pada 2 node dengan 48 core per node:
#!/bin/bash
'''#SBATCH --nodes=2'''
#SBATCH --ntasks=64
#SBATCH --ntasks-per-node=48
 
mpirun -np $SLURM_NTASKS --mca pml ucx --mca osc ucx ////
# Parameter SBATCH lainnya dan alur jalannya program ...
*Total jumlah MPI adalah '''nodes * ntasks-per-node''', pada contoh di atas adalah 2*48 = 96 proses MPI. Variabel $SLURM_NTASKS menangkap total proses MPI ini.
 
*SLURM akan menyebar rata 48 proses MPI ke semua node.
# Jumlah proses MPI setengah dari ntasks  
mpirun -np 32 <program-MPI-user...>
</syntaxhighlight>'''Keterangan:'''
 
* Sistem akan tetap menghitung besar CPU Core Hour berdasarkan jumlah '''ntasks'''.

Revisi terkini sejak 10 Januari 2024 04.39

Halaman ini menjelaskan teknis menjalankan program MPI di ALELEON Supercomputer.

Open MPI UCX ALELEON Supercomputer

ALELEON Supercompter menggunakan Open MPI yang telah dioptimasi untuk arsitektur AMD Zen2. Berikut adalah sintak standar menjalankan program MPI di ALELEON Supercomputer melalui SLURM:

mpirun -np $SLURM_NTASKS <program-MPI-user...>

Keterangan:

  • Variabel SLURM_NTASKS menangkap jumlah ntasks (CPU) pada SLURM Submit Script sehingga user tidak perlu memasukkan jumlah proses MPI secara manual.

Bagaimana SLURM ALELEON Membagi Core Fisik dan Thread

SLURM ALELEON Supercomputer menjalankan proses Open MPI untuk selalu mengisi penuh core thread per core fisik, contoh:

  • 32 proses MPI dijalankan oleh 16 core fisik / 32 core thread CPU.
  • 64 proses MPI dijalankan oleh 32 core fisik / 64 core thread CPU; dan seterusnya ...

Pembagian ini didasarkan pada pengelompokan core CPU pada grup CCX dan CCD AMD Zen2 supaya memastikan penyebaran proses MPI selalu berdekatan antar grup CCX / CCD (tightly coupled) dan menghasilkan performa terbaik. Semua software komputasi ALELEON Supercomputer telah dioptimasi untuk berjalan dengan skema ini.

Skema grup CCX dan CCD pada CPU AMD yang digunakan oleh ALELEON Supercomputer

Kelipatan 2 atau 4 untuk Jumlah ntasks (Alokasi CPU)

Berdasarkan jumlah core dan grup pada gambar skema CPU diatas, kami menyarankan untuk memilih ntasks (alokasi CPU) dengan kelipatan 2 atau 4 untuk memastikan proses MPI mengisi grup CCX dan CCD yang berdekatan.

(Versi Mudah) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI

Bagian ini menjelaskan bagaimana karakteristik default SLURM ALELEON Supercomputer menjalankan alokasi komputasi untuk job MPI dan panduan menulis SLURM Submit Script.

Menjalankan job MPI satu node dan multi-node secara otomatis

SLURM ALELEON secara otomatis dapat menjalankan job MPI baik pada satu node atau multi-node berdasarkan jumlah ntasks sehingga user cukup mendefinisikan jumlah ntasks tanpa perlu mengatur jumlah nodes.

#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)

# Alokasi jumlah core thread CPU dan jumlah proses MPI 
#SBATCH --ntasks=////

# Alokasi jumlah memori RAM per node
#SBATCH --mem=////

# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////

# Alur jalannya program ...

mpirun -np $SLURM_NTASKS <program-MPI-user...>

Keterangan:

  • Jumlah ntasks maksimal untuk Partisi epyc (Compute Node CPU) adalah 384.
  • Jumlah ntasks maksimal untuk Partisi ampere (Compute Node GPU) adalah 32.
Jumlah node yang dipilih SLURM secara otomatis
Jumlah ntasks Partisi epyc (CPU)

*jumlah node naik setiap kelipatan 128

Partisi ampere (GPU)

*maks 32 core

1 - 32 1 1
33 - 128 1 X
129 - 256 2 X
257 - 384 3 X

---

SBATCH mem = alokasi RAM per node

Parameter SBATCH mem mengalokasikan jumlah RAM per node baik pada job MPI satu node dan multi-node. Ambil contoh alokasi SBATCH berikut:

#!/bin/bash
#SBATCH --ntasks=192 
#SBATCH --mem=64GB 

# ntasks 192 menggunakan 2 node secara otomatis
# Dengan alokasi RAM 64GB per node sehingga total 128GB untuk 2 node

Job MPI mempunyai kapasitas mem maksimal:

  • Compute Node CPU (epyc): 240GB (per node).
  • Compute Node GPU (ampere): 120GB

---

Menjalankan Job Hybrid MPI / OpenMP (OMP)

SLURM dapat menjalankan job hybrid MPI / OMP dengan SBATCH cpus-per-task dan variabel SLURM_CPUS_PER_TASK seperti contoh format berikut:

#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)

# Alokasi jumlah core thread CPU dan jumlah proses MPI 
#SBATCH --ntasks=////

# cpus-per-task mewakili jumlah thread OMP per proses MPI 
#SBATCH --cpus-per-task=////

# Alokasi jumlah memori RAM per node
# SBATCH --mem=////

# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////

# Alur jalannya program ...

# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

mpirun -np $SLURM_NTASKS <program-MPI-user...>

Keterangan:

  • Total core CPU yang digunakan adalah ntasks * cpus-per-task.
  • Variabel SLURM_NTASKS menangkap total penghitungan core CPU diatas.

(Versi Advanced) Memilih Jumlah Alokasi Komputasi SLURM untuk Job MPI

Bagian ini menjelaskan bagaimana user secara manual dapat mengatur parameter SBATCH SLURM ALELEON Supercomputer untuk menjalankan job MPI.

Acuan Spesifikasi Compute Node dengan SBATCH SLURM

User dapat mengacu spesifikasi berikut untuk mengatur besar parameter SBATCH secara manual.

Spesifikasi Compute Node berdasarkan SBATCH SLURM
Parameter SBATCH Hardware Spesifikasi
Partisi epyc (CPU) Partisi ampere (GPU)
nodes Jumlah node 3 1
ntasks Total core CPU 384 32
ntasks-per-node Total core CPU per node 128 32
mem Memori RAM per node 240GB 120GB
gpus Jumlah GPU 0 2

---

SBATCH nodes dan ntasks-per-node

User dapat mengatur jumlah nodes dan ntasks per node secara manual dengan parameter SBATCH nodes dan ntasks-per-node:

#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)

# Jumlah node
#SBATCH --nodes=////

# Jumlah ntasks per node
#SBATCH --ntasks-per-node=////

# Alokasi jumlah memori RAM per node 
#SBATCH --mem=////

# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////

# Alur jalannya program ...

mpirun -np $SLURM_NTASKS <program-MPI-user...>

Keterangan:

  • Total core CPU yang dipesan adalah nodes * ntasks-per-node
  • Variabel SLURM_NTASKS menangkap total CPU diatas.

---

SBATCH nodes dan ntasks-per-node untuk Hybrid MPI / OMP

Hal sebelumnya juga dapat dilakukan untuk hybrid MPI / OMP sebagai berikut:

#!/bin/bash
# Isi bagian yang ditandai 4 garing (////)

# Jumlah node
#SBATCH --nodes=////

# Jumlah ntasks per node
#SBATCH --ntasks-per-node=////

# Jumlah threading OMP per task MPI
#SBATCH --cpus-per-task=////

# Alokasi jumlah memori RAM per node 
#SBATCH --mem=////

# Parameter SBATCH lainnya ...
#SBATCH --time=////
#SBATCH --output=////
#SBATCH --error=////

# Alur jalannya program ...

# Definisi threading OMP
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}

mpirun -np $SLURM_NTASKS <program-MPI-user...>

Keterangan:

  • Total core CPU yang dipesan adalah nodes * ntasks-per-node * cpus-per-task
  • Variabel SLURM_NTASKS menangkap total CPU diatas.

---

Menjalankan MPI pada Core Fisik saja

User dapat menjalankan program MPI sepenuhnya pada core fisik dengan mengalokasikan jumlah SBATCH ntasks 2 kali lipat dari proses MPI yang mau dijalankan. Contoh:

#!/bin/bash
#SBATCH --ntasks=64 

# Parameter SBATCH lainnya dan alur jalannya program ...

# Jumlah proses MPI setengah dari ntasks 
mpirun -np 32 <program-MPI-user...>

Keterangan:

  • Sistem akan tetap menghitung besar CPU Core Hour berdasarkan jumlah ntasks.