Mpirun arguments: Difference between revisions
Created page with "Target ini menjalankan program <code>matmul</code> di beberapa laptop (x86 only) lewat jaringan lokal, menggunakan Open MPI dengan hostfile. == Perintah yang dijalankan == <pre> mpirun --prefix /home/haidhi/ompi4 \ --mca btl_tcp_if_include 192.168.100.0/24 \ --mca oob_tcp_if_include 192.168.100.0/24 \ --hostfile hostfile \ -np 2 \ build/matmul 2048 2048 2048 </pre> (Nilai default. Bisa di-override: <code>make run-host NP=4 M=1024 K=1..." |
No edit summary |
||
| Line 1: | Line 1: | ||
<pre> | <pre> | ||
mpirun | mpirun \ | ||
--mca btl_tcp_if_include 192.168.100.0/24 \ | |||
--mca oob_tcp_if_include 192.168.100.0/24 \ | |||
--mca hwloc_base_binding_policy none \ | |||
--prefix /data/data/com.termux/files/usr \ | |||
--host 192.168.100.1,192.168.100.2 -np 2 build/matmul 2048 2048 2048 \ | |||
: --host 192.168.100.3 -np 1 ~/matmul-src/phone_launch.sh 2048 2048 2048 | |||
</pre> | </pre> | ||
(Nilai default. Bisa di-override: <code>make | (Nilai default. Bisa di-override: <code>make cluster NP=2 NP_PHONE=1 M=1024 K=1024 N=1024</code>) | ||
== Penjelasan tiap flag == | == Penjelasan tiap flag == | ||
=== <code>-- | === <code>--mca btl_tcp_if_include 192.168.100.0/24</code> === | ||
Membatasi BTL (Byte Transfer Layer) TCP agar hanya pakai network interface yang masuk subnet <code>192.168.100.0/24</code>. | |||
BTL adalah lapisan Open MPI yang mengerjakan transfer data aktual — semua <code>MPI_Send</code>, <code>MPI_Bcast</code>, <code>MPI_Scatterv</code>, dll lewat sini. | |||
'''Kenapa perlu:''' Tiap laptop/HP biasanya punya banyak interface (WiFi, loopback, Docker virtual, VPN). Tanpa pembatasan ini, Open MPI bisa salah pilih interface yang tidak terhubung ke semua node, sehingga koneksi data gagal. | |||
=== <code>--mca oob_tcp_if_include 192.168.100.0/24</code> === | |||
Membatasi OOB (Out-of-Band) TCP ke subnet yang sama. | |||
OOB adalah kanal kontrol MPI — dipakai untuk handshake startup, sinkronisasi barrier, dan koordinasi antar proses, bukan untuk transfer data matmul. | |||
'''Kenapa perlu:''' Jika OOB dan BTL pakai interface berbeda, bisa terjadi kontrol berhasil tapi data transfer gagal, atau routing tidak konsisten antar node. Keduanya harus di-pin ke subnet yang sama. | |||
=== <code>--mca hwloc_base_binding_policy none</code> === | |||
Menonaktifkan CPU binding (affinity) yang dilakukan hwloc. | |||
Secara default, Open MPI mencoba mem-bind tiap proses MPI ke core CPU tertentu menggunakan hwloc. Di cluster heterogen (x86 laptop + ARM Android/Termux), hwloc di HP sering membaca topologi CPU yang berbeda atau tidak lengkap, sehingga binding gagal dan proses tidak bisa jalan. | |||
'''Kenapa perlu:''' Tanpa flag ini, mpirun bisa abort dengan error hwloc saat meluncurkan proses di HP Android karena Termux tidak mengekspos topologi CPU dengan cara yang sama seperti Linux biasa. Dengan <code>none</code>, OS yang menentukan sendiri di core mana proses berjalan. | |||
=== <code>-- | === <code>--prefix /data/data/com.termux/files/usr</code> === | ||
Menentukan | Menentukan path instalasi Open MPI yang digunakan di semua node, termasuk HP Android. | ||
'''Kenapa pakai path Termux, bukan <code>/home/haidhi/ompi4</code>:''' Path ini adalah path yang valid di HP Android (Termux). Di tiap laptop dibuat symlink: | |||
<pre> | <pre> | ||
sudo ln -s /home/haidhi/ompi4 /data/data/com.termux/files/usr | |||
</pre> | </pre> | ||
Jadi path yang sama (<code>/data/data/com.termux/files/usr</code>) resolve ke Open MPI yang benar di semua node — laptop maupun HP — tanpa perlu prefix berbeda per node. | |||
=== <code>--host 192.168.100.1,192.168.100.2 -np 2</code> === | |||
Menjalankan <code>-np 2</code> proses MPI yang dibagi ke host <code>192.168.100.1</code> dan <code>192.168.100.2</code> (dua laptop x86). | |||
Berbeda dari <code>--hostfile</code>, <code>--host</code> langsung menyebutkan IP di command line. Jumlah slot per host diambil dari default atau bisa diatur dengan <code>host:slot</code> (misal <code>192.168.100.1:2</code>). | |||
=== <code>:</code> (titik dua / MPMD separator) === | |||
Tanda <code>:</code> ini adalah pemisah MPMD (Multiple Program Multiple Data). | |||
Dengan MPMD, satu perintah <code>mpirun</code> bisa meluncurkan program yang '''berbeda''' di kelompok node yang berbeda dalam satu MPI job yang sama. Semua proses di kedua sisi <code>:</code> masuk ke <code>MPI_COMM_WORLD</code> yang sama dan bisa saling berkomunikasi. | |||
'''Kenapa perlu:''' | '''Kenapa perlu:''' HP Android punya arsitektur ARM (aarch64), sehingga binary x86 tidak bisa dijalankan di sana. HP punya binary-nya sendiri (<code>phone_launch.sh</code> yang memanggil binary ARM). MPMD memungkinkan laptop pakai <code>build/matmul</code> (x86) dan HP pakai <code>phone_launch.sh</code> (ARM) — tapi tetap dalam satu MPI job yang terpadu. | ||
=== <code>-np | === <code>--host 192.168.100.3 -np 1 ~/matmul-src/phone_launch.sh</code> === | ||
Menjalankan 1 proses MPI di HP Android (<code>192.168.100.3</code>), mengeksekusi <code>phone_launch.sh</code> sebagai gantinya binary laptop. | |||
<code>phone_launch.sh</code> berisi perintah untuk menjalankan binary ARM yang sudah dicompile di HP saat <code>make deploy-android</code>. | |||
== | == Topologi cluster == | ||
<pre> | |||
mpirun (master: 192.168.100.1) | |||
│ | |||
├── rank 0 → 192.168.100.1 (laptop 1, x86) build/matmul | |||
├── rank 1 → 192.168.100.2 (laptop 2, x86) build/matmul | |||
└── rank 2 → 192.168.100.3 (HP Android, ARM) phone_launch.sh | |||
</pre> | |||
== Variabel yang bisa di-override == | == Variabel yang bisa di-override == | ||
| Line 77: | Line 83: | ||
! Variabel !! Default !! Keterangan | ! Variabel !! Default !! Keterangan | ||
|- | |- | ||
| <code>NP</code> || <code>2</code> || | | <code>NP</code> || <code>2</code> || Proses MPI di laptop | ||
|- | |||
| <code>NP_PHONE</code> || <code>1</code> || Proses MPI di HP | |||
|- | |- | ||
| <code>M</code> || <code>2048</code> || Baris matriks A / C | | <code>M</code> || <code>2048</code> || Baris matriks A / C | ||
| Line 85: | Line 93: | ||
| <code>N</code> || <code>2048</code> || Kolom matriks B / C | | <code>N</code> || <code>2048</code> || Kolom matriks B / C | ||
|- | |- | ||
| <code> | | <code>LAPTOPS</code> || <code>192.168.100.1,192.168.100.2</code> || IP laptop | ||
|- | |- | ||
| <code> | | <code>ANDROID_IP</code> || <code>192.168.100.3</code> || IP HP Android | ||
|- | |- | ||
| <code> | | <code>CLUSTER_PREFIX</code> || <code>/data/data/com.termux/files/usr</code> || Path Open MPI | ||
|} | |} | ||
Latest revision as of 10:55, 17 June 2026
mpirun \ --mca btl_tcp_if_include 192.168.100.0/24 \ --mca oob_tcp_if_include 192.168.100.0/24 \ --mca hwloc_base_binding_policy none \ --prefix /data/data/com.termux/files/usr \ --host 192.168.100.1,192.168.100.2 -np 2 build/matmul 2048 2048 2048 \ : --host 192.168.100.3 -np 1 ~/matmul-src/phone_launch.sh 2048 2048 2048
(Nilai default. Bisa di-override: make cluster NP=2 NP_PHONE=1 M=1024 K=1024 N=1024)
Penjelasan tiap flag
--mca btl_tcp_if_include 192.168.100.0/24
Membatasi BTL (Byte Transfer Layer) TCP agar hanya pakai network interface yang masuk subnet 192.168.100.0/24.
BTL adalah lapisan Open MPI yang mengerjakan transfer data aktual — semua MPI_Send, MPI_Bcast, MPI_Scatterv, dll lewat sini.
Kenapa perlu: Tiap laptop/HP biasanya punya banyak interface (WiFi, loopback, Docker virtual, VPN). Tanpa pembatasan ini, Open MPI bisa salah pilih interface yang tidak terhubung ke semua node, sehingga koneksi data gagal.
--mca oob_tcp_if_include 192.168.100.0/24
Membatasi OOB (Out-of-Band) TCP ke subnet yang sama.
OOB adalah kanal kontrol MPI — dipakai untuk handshake startup, sinkronisasi barrier, dan koordinasi antar proses, bukan untuk transfer data matmul.
Kenapa perlu: Jika OOB dan BTL pakai interface berbeda, bisa terjadi kontrol berhasil tapi data transfer gagal, atau routing tidak konsisten antar node. Keduanya harus di-pin ke subnet yang sama.
--mca hwloc_base_binding_policy none
Menonaktifkan CPU binding (affinity) yang dilakukan hwloc.
Secara default, Open MPI mencoba mem-bind tiap proses MPI ke core CPU tertentu menggunakan hwloc. Di cluster heterogen (x86 laptop + ARM Android/Termux), hwloc di HP sering membaca topologi CPU yang berbeda atau tidak lengkap, sehingga binding gagal dan proses tidak bisa jalan.
Kenapa perlu: Tanpa flag ini, mpirun bisa abort dengan error hwloc saat meluncurkan proses di HP Android karena Termux tidak mengekspos topologi CPU dengan cara yang sama seperti Linux biasa. Dengan none, OS yang menentukan sendiri di core mana proses berjalan.
--prefix /data/data/com.termux/files/usr
Menentukan path instalasi Open MPI yang digunakan di semua node, termasuk HP Android.
Kenapa pakai path Termux, bukan /home/haidhi/ompi4: Path ini adalah path yang valid di HP Android (Termux). Di tiap laptop dibuat symlink:
sudo ln -s /home/haidhi/ompi4 /data/data/com.termux/files/usr
Jadi path yang sama (/data/data/com.termux/files/usr) resolve ke Open MPI yang benar di semua node — laptop maupun HP — tanpa perlu prefix berbeda per node.
--host 192.168.100.1,192.168.100.2 -np 2
Menjalankan -np 2 proses MPI yang dibagi ke host 192.168.100.1 dan 192.168.100.2 (dua laptop x86).
Berbeda dari --hostfile, --host langsung menyebutkan IP di command line. Jumlah slot per host diambil dari default atau bisa diatur dengan host:slot (misal 192.168.100.1:2).
: (titik dua / MPMD separator)
Tanda : ini adalah pemisah MPMD (Multiple Program Multiple Data).
Dengan MPMD, satu perintah mpirun bisa meluncurkan program yang berbeda di kelompok node yang berbeda dalam satu MPI job yang sama. Semua proses di kedua sisi : masuk ke MPI_COMM_WORLD yang sama dan bisa saling berkomunikasi.
Kenapa perlu: HP Android punya arsitektur ARM (aarch64), sehingga binary x86 tidak bisa dijalankan di sana. HP punya binary-nya sendiri (phone_launch.sh yang memanggil binary ARM). MPMD memungkinkan laptop pakai build/matmul (x86) dan HP pakai phone_launch.sh (ARM) — tapi tetap dalam satu MPI job yang terpadu.
--host 192.168.100.3 -np 1 ~/matmul-src/phone_launch.sh
Menjalankan 1 proses MPI di HP Android (192.168.100.3), mengeksekusi phone_launch.sh sebagai gantinya binary laptop.
phone_launch.sh berisi perintah untuk menjalankan binary ARM yang sudah dicompile di HP saat make deploy-android.
Topologi cluster
mpirun (master: 192.168.100.1) │ ├── rank 0 → 192.168.100.1 (laptop 1, x86) build/matmul ├── rank 1 → 192.168.100.2 (laptop 2, x86) build/matmul └── rank 2 → 192.168.100.3 (HP Android, ARM) phone_launch.sh
Variabel yang bisa di-override
| Variabel | Default | Keterangan |
|---|---|---|
NP |
2 |
Proses MPI di laptop |
NP_PHONE |
1 |
Proses MPI di HP |
M |
2048 |
Baris matriks A / C |
K |
2048 |
Kolom A / baris B |
N |
2048 |
Kolom matriks B / C |
LAPTOPS |
192.168.100.1,192.168.100.2 |
IP laptop |
ANDROID_IP |
192.168.100.3 |
IP HP Android |
CLUSTER_PREFIX |
/data/data/com.termux/files/usr |
Path Open MPI |