Jump to content

Mpirun arguments

From Haidhi Wiki
Revision as of 10:55, 17 June 2026 by SanzSkuy (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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