<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Heterogeneous_Cluster%3A_tambah_node_HP_android</id>
	<title>Heterogeneous Cluster: tambah node HP android - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.haidhi.my.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Heterogeneous_Cluster%3A_tambah_node_HP_android"/>
	<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Heterogeneous_Cluster:_tambah_node_HP_android&amp;action=history"/>
	<updated>2026-11-01T21:44:41Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=Heterogeneous_Cluster:_tambah_node_HP_android&amp;diff=668&amp;oldid=prev</id>
		<title>SanzSkuy: Created page with &quot; Setelah dua laptop saling ngobrol via LAN kabel, langkah ini menambahkan node ketiga yang berbeda di hampir semua sumbu: arsitektur, OS, libc, path instalasi, akses jaringan, dan model driver GPU.  == Ringkasan 5W1H ==  {| class=&quot;wikitable&quot; ! Aspek !! Penjelasan |- | &#039;&#039;&#039;What&#039;&#039;&#039; (Apa) || Menjalankan satu job MPI (perkalian matriks terdistribusi) di tiga node berbeda arsitektur, di mana tiap rank menjalankan kernel OpenCL di device-nya masing-masing: NVIDIA GPU, AMD CPU (...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=Heterogeneous_Cluster:_tambah_node_HP_android&amp;diff=668&amp;oldid=prev"/>
		<updated>2026-06-16T07:18:44Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; Setelah dua laptop saling ngobrol via LAN kabel, langkah ini menambahkan node ketiga yang berbeda di hampir semua sumbu: arsitektur, OS, libc, path instalasi, akses jaringan, dan model driver GPU.  == Ringkasan 5W1H ==  {| class=&amp;quot;wikitable&amp;quot; ! Aspek !! Penjelasan |- | &amp;#039;&amp;#039;&amp;#039;What&amp;#039;&amp;#039;&amp;#039; (Apa) || Menjalankan satu job MPI (perkalian matriks terdistribusi) di tiga node berbeda arsitektur, di mana tiap rank menjalankan kernel OpenCL di device-nya masing-masing: NVIDIA GPU, AMD CPU (...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
Setelah dua laptop saling ngobrol via LAN kabel, langkah ini menambahkan node ketiga yang berbeda di hampir semua sumbu: arsitektur, OS, libc, path instalasi, akses jaringan, dan model driver GPU.&lt;br /&gt;
&lt;br /&gt;
== Ringkasan 5W1H ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Aspek !! Penjelasan&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;What&amp;#039;&amp;#039;&amp;#039; (Apa) || Menjalankan satu job MPI (perkalian matriks terdistribusi) di tiga node berbeda arsitektur, di mana tiap rank menjalankan kernel OpenCL di device-nya masing-masing: NVIDIA GPU, AMD CPU (pocl), dan Qualcomm Adreno.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Why&amp;#039;&amp;#039;&amp;#039; (Kenapa) || Membuktikan komputasi terdistribusi bisa berjalan lintas-arsitektur (x86_64 + ARM64), lintas-OS (Linux + Android), dan lintas-vendor-GPU dalam satu proses MPI. Nilai utamanya adalah sinyal skill cross-stack (portofolio), bukan platform komputasi yang praktis/cepat.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Who&amp;#039;&amp;#039;&amp;#039; (Siapa/komponen) || &amp;lt;code&amp;gt;mpirun&amp;lt;/code&amp;gt; sebagai HNP di master (&amp;lt;code&amp;gt;darmogandolz&amp;lt;/code&amp;gt;) yang meluncurkan &amp;lt;code&amp;gt;orted&amp;lt;/code&amp;gt; di tiap node; tiap rank adalah proses MPI yang memanggil OpenCL di device lokalnya. Perangkat: darmogandolz (NVIDIA), tumbal (AMD/pocl), HP (Adreno).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;When&amp;#039;&amp;#039;&amp;#039; (Kapan) || Tahap akhir — setelah dua laptop terbukti saling terhubung via LAN kabel. Ini langkah &amp;quot;menambah node ketiga&amp;quot; ke cluster yang sudah jalan.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Where&amp;#039;&amp;#039;&amp;#039; (Di mana) || LAN kabel khusus &amp;lt;code&amp;gt;192.168.100.0/24&amp;lt;/code&amp;gt; lewat switch unmanaged. HP bergabung via adapter USB-to-LAN dengan IP statik &amp;lt;code&amp;gt;192.168.100.3&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;How&amp;#039;&amp;#039;&amp;#039; (Bagaimana) || Cek versi+PMIx pkg (cocok → pakai pkg), SSH port 8022 via &amp;lt;code&amp;gt;ssh config&amp;lt;/code&amp;gt;, samakan path via trik symlink terbalik, binary per-arch + MPMD, env OpenCL HP via skrip pembungkus, dan fix kunci: paksa policy routing Android lewat eth0. Diluncurkan via MPMD dengan interface dipin + binding hwloc dimatikan.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Lingkungan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Komponen !! darmogandolz (master) !! tumbal !! HP (Android)&lt;br /&gt;
|-&lt;br /&gt;
| Arsitektur || x86_64 || x86_64 || aarch64 (ARM64)&lt;br /&gt;
|-&lt;br /&gt;
| OS / libc || Arch Linux / glibc || Arch Linux / glibc || Android 13 / bionic (Termux)&lt;br /&gt;
|-&lt;br /&gt;
| Device OpenCL || NVIDIA RTX 3050 || AMD A8-6410 (pocl, CPU) || Qualcomm Adreno 610&lt;br /&gt;
|-&lt;br /&gt;
| OpenMPI || 4.1.5 (source) || 4.1.5 (source) || 4.1.5 (&amp;#039;&amp;#039;&amp;#039;pkg&amp;#039;&amp;#039;&amp;#039; Termux)&lt;br /&gt;
|-&lt;br /&gt;
| Prefix OpenMPI || &amp;lt;code&amp;gt;/home/haidhi/ompi4&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;/home/haidhi/ompi4&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;/data/data/com.termux/files/usr&amp;lt;/code&amp;gt; ($PREFIX)&lt;br /&gt;
|-&lt;br /&gt;
| NIC cluster || enp8s0 → 192.168.100.1 || eno1 → 192.168.100.2 || eth0 (USB) → 192.168.100.3&lt;br /&gt;
|-&lt;br /&gt;
| Akses SSH || port 22 || port 22 || &amp;#039;&amp;#039;&amp;#039;port 8022&amp;#039;&amp;#039;&amp;#039; (Termux sshd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Konsep: lima sumbu heterogenitas ==&lt;br /&gt;
&lt;br /&gt;
HP berbeda dari laptop di hampir semua sumbu sekaligus. Memahami ini menjelaskan kenapa tiap masalah muncul:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Arsitektur CPU&amp;#039;&amp;#039;&amp;#039; — aarch64 vs x86_64 → binary tidak bisa dipakai bersama, wajib MPMD (binary terpisah per-arch).&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;OS/libc&amp;#039;&amp;#039;&amp;#039; — Android(bionic)+Termux vs Linux(glibc) → butuh build/paket sendiri + preload libc++.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Path instalasi&amp;#039;&amp;#039;&amp;#039; — &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; vs &amp;lt;code&amp;gt;/home/haidhi/ompi4&amp;lt;/code&amp;gt; → aturan &amp;quot;path sama di semua node&amp;quot; pecah.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Jaringan &amp;amp; akses&amp;#039;&amp;#039;&amp;#039; — USB-LAN + IP statik + sshd di port 8022.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;OpenCL&amp;#039;&amp;#039;&amp;#039; — Adreno non-ICD (vendor-first + libc++ preload) vs ICD sistem di laptop.&lt;br /&gt;
&lt;br /&gt;
Benang merah semua: &amp;#039;&amp;#039;&amp;#039;versi OpenMPI wajib cocok&amp;#039;&amp;#039;&amp;#039; (4.1.5 di semua node).&lt;br /&gt;
&lt;br /&gt;
== Ikhtisar masalah ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! Tahap !! Gejala singkat&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SSH || &amp;lt;code&amp;gt;ssh: connect to host ... port 22: Connection refused&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Kompatibilitas || Apakah pkg Termux bisa interop dengan build source laptop?&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Launch || &amp;lt;code&amp;gt;/home/haidhi/ompi4/bin/orted: No such file or directory&amp;lt;/code&amp;gt; (di HP)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Koneksi || &amp;lt;code&amp;gt;unable to complete a TCP connection ... Local host: localhost&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Jaringan || HP tidak bisa menjangkau &amp;lt;code&amp;gt;192.168.100.1&amp;lt;/code&amp;gt; (routing salah arah)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Masalah 1: SSH ke HP ditolak (port) =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Muncul saat:&amp;#039;&amp;#039; mpirun pertama kali mencoba meluncurkan orted di HP. &amp;#039;&amp;#039;Di mana:&amp;#039;&amp;#039; master → HP.&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ssh: connect to host 192.168.100.3 port 22: Connection refused&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
Termux menjalankan sshd di &amp;#039;&amp;#039;&amp;#039;port 8022&amp;#039;&amp;#039;&amp;#039;, bukan 22. mpirun (lewat ssh) default ke port 22, jadi tidak ada yang mendengarkan. &amp;quot;Connection refused&amp;quot; (bukan timeout) justru kabar baik: HP reachable di level IP, jaringan USB-eth sudah jalan.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
Beri tahu ssh lewat &amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt; di master (per-host, jadi laptop tetap port 22):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Host 192.168.100.3&lt;br /&gt;
    Port 8022&lt;br /&gt;
    IdentityFile ~/.ssh/id_ed25519&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 ~/.ssh/config&lt;br /&gt;
# di Termux HP: pastikan sshd jalan + public key master terpasang&lt;br /&gt;
sshd&lt;br /&gt;
cat ~/.ssh/authorized_keys&lt;br /&gt;
# verifikasi (WAJIB lolos sebelum mpirun):&lt;br /&gt;
ssh 192.168.100.3 &amp;#039;uname -m&amp;#039;   # → aarch64, tanpa password&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Catatan: jangan pakai &amp;lt;code&amp;gt;--mca plm_rsh_agent &amp;quot;ssh -p 8022&amp;quot;&amp;lt;/code&amp;gt; — itu memaksa SEMUA host ke 8022, termasuk laptop di port 22. &amp;lt;code&amp;gt;ssh config&amp;lt;/code&amp;gt; per-host yang benar.&lt;br /&gt;
&lt;br /&gt;
= Masalah 2: apakah pkg Termux kompatibel? =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Muncul saat:&amp;#039;&amp;#039; memutuskan pakai paket Termux atau build dari source. &amp;#039;&amp;#039;Di mana:&amp;#039;&amp;#039; HP.&lt;br /&gt;
&lt;br /&gt;
=== Pertanyaan ===&lt;br /&gt;
OpenMPI di laptop di-build dari source (4.1.5, prefix custom). Di HP terpasang dari &amp;lt;code&amp;gt;pkg&amp;lt;/code&amp;gt;. Antar-node, versi &amp;#039;&amp;#039;&amp;#039;dan&amp;#039;&amp;#039;&amp;#039; build harus cukup cocok agar handshake peluncuran tidak gagal (lihat error &amp;quot;Data unpack&amp;quot; di halaman sebelumnya). Apakah pkg bisa dipakai?&lt;br /&gt;
&lt;br /&gt;
=== Diagnosis ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mpirun --version&lt;br /&gt;
ompi_info | grep -iE &amp;#039;configure command|pmix&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Hasil di HP:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mpirun (Open MPI) 4.1.5&lt;br /&gt;
Configure command line: ... &amp;#039;--host=aarch64-linux-android&amp;#039; &amp;#039;--disable-dlopen&amp;#039;&lt;br /&gt;
   &amp;#039;ac_cv_header_ifaddrs_h=no&amp;#039; ... &amp;#039;--enable-shared&amp;#039; &amp;#039;--enable-static&amp;#039;&lt;br /&gt;
MCA pmix: isolated (... Component v4.1.5)&lt;br /&gt;
MCA pmix: pmix3x (... Component v4.1.5)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kesimpulan ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cocok.&amp;#039;&amp;#039;&amp;#039; Versi (4.1.5) dan PMIx (&amp;lt;code&amp;gt;pmix3x&amp;lt;/code&amp;gt; internal v4.1.5) &amp;#039;&amp;#039;&amp;#039;identik&amp;#039;&amp;#039;&amp;#039; dengan laptop — ini faktor penentu handshake, dan dia match. Jadi pkg layak dipakai; &amp;#039;&amp;#039;&amp;#039;tidak perlu build dari source.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Dua flag pada build pkg sempat jadi kekhawatiran:&lt;br /&gt;
* &amp;lt;code&amp;gt;ac_cv_header_ifaddrs_h=no&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;getifaddrs()&amp;lt;/code&amp;gt; dimatikan; deteksi interface jatuh ke fallback (SIOCGIFCONF). Sempat dicurigai bikin HP gagal mengenali IP-nya di multi-node.&lt;br /&gt;
* &amp;lt;code&amp;gt;--disable-dlopen&amp;lt;/code&amp;gt; — komponen di-static-link, bukan plugin runtime. Tidak masalah untuk handshake.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Catatan penting (terbukti kemudian):&amp;#039;&amp;#039; kekhawatiran ifaddrs ternyata &amp;#039;&amp;#039;&amp;#039;tidak terbukti&amp;#039;&amp;#039;&amp;#039; — fallback SIOCGIFCONF membaca eth0 dengan benar. pkg berjalan tanpa modifikasi. Penyebab kegagalan sebenarnya ada di tempat lain (Masalah 5).&lt;br /&gt;
&lt;br /&gt;
= Masalah 3: orted tidak ditemukan di HP =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Muncul saat:&amp;#039;&amp;#039; mpirun meluncurkan orted di HP (SSH sudah berhasil). &amp;#039;&amp;#039;Di mana:&amp;#039;&amp;#039; HP.&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/data/data/com.termux/files/usr/bin/bash: line 1: /home/haidhi/ompi4/bin/orted: No such file or directory&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
Dua hal:&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;--prefix&amp;lt;/code&amp;gt; per-context tidak ke-propagate&amp;#039;&amp;#039;&amp;#039; di OpenMPI 4.1.5. Walau tiap section MPMD diberi &amp;lt;code&amp;gt;--prefix&amp;lt;/code&amp;gt; sendiri, mpirun hanya memakai SATU prefix global untuk semua orted. Akibatnya prefix laptop (&amp;lt;code&amp;gt;/home/haidhi/ompi4&amp;lt;/code&amp;gt;) dipaksakan ke HP, yang tidak punya path itu.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Tidak bisa membuat &amp;lt;code&amp;gt;/home/haidhi&amp;lt;/code&amp;gt; di Android.&amp;#039;&amp;#039;&amp;#039; Ini &amp;#039;&amp;#039;&amp;#039;bukan&amp;#039;&amp;#039;&amp;#039; soal root — root filesystem &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; di Android &amp;#039;&amp;#039;&amp;#039;read-only&amp;#039;&amp;#039;&amp;#039; (partisi system + verified boot). &amp;lt;code&amp;gt;su&amp;lt;/code&amp;gt; tidak menolong karena mount-nya memang ro; remount rw diblok/merusak boot. Jadi trik symlink &amp;quot;biasa&amp;quot; (bikin path laptop di HP) mati.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Balik arah triknya.&amp;#039;&amp;#039;&amp;#039; Karena &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; di laptop writable tapi di HP tidak, buat path HP &amp;#039;&amp;#039;&amp;#039;di laptop&amp;#039;&amp;#039;&amp;#039;, menunjuk ke instalasi laptop:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# di KEDUA laptop:&lt;br /&gt;
sudo mkdir -p /data/data/com.termux/files&lt;br /&gt;
sudo ln -s /home/haidhi/ompi4 /data/data/com.termux/files/usr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Sekarang path &amp;lt;code&amp;gt;/data/data/com.termux/files/usr/bin/orted&amp;lt;/code&amp;gt; valid di &amp;#039;&amp;#039;&amp;#039;semua&amp;#039;&amp;#039;&amp;#039; node — di HP itu pkg asli, di laptop itu symlink ke ompi4. Lalu pakai SATU &amp;lt;code&amp;gt;--prefix&amp;lt;/code&amp;gt; global = path HP (buang per-context):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mpirun ... --prefix /data/data/com.termux/files/usr ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tentang executable: di MPMD, path tiap app di-resolve di node masing-masing, dan tiap section menyebut app-nya sendiri, jadi binary boleh beda path antar-arch. &amp;#039;&amp;#039;&amp;#039;Wajib pakai path absolut untuk HP&amp;#039;&amp;#039;&amp;#039; — jangan &amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt;, karena tilde di-expand oleh shell laptop menjadi home laptop sebelum mpirun melihatnya.&lt;br /&gt;
&lt;br /&gt;
= Masalah 4 &amp;amp; 5: TCP gagal — sebenarnya routing Android =&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Muncul saat:&amp;#039;&amp;#039; orted sudah jalan di semua node, masuk fase komunikasi antar-rank. &amp;#039;&amp;#039;Di mana:&amp;#039;&amp;#039; HP ↔ master.&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
A process or daemon was unable to complete a TCP connection to another process:&lt;br /&gt;
  Local host:    localhost&lt;br /&gt;
  Remote host:   darmogandolz&lt;br /&gt;
This is usually caused by a firewall on the remote host.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Investigasi: dari HP, &amp;lt;code&amp;gt;ping 192.168.100.1&amp;lt;/code&amp;gt; gagal.&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
Pesan menuduh firewall, tapi penyebab sebenarnya adalah &amp;#039;&amp;#039;&amp;#039;policy routing Android&amp;#039;&amp;#039;&amp;#039;. Bukti:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su -c &amp;#039;ip addr show eth0&amp;#039;             # 192.168.100.3 ADA, eth0 UP&lt;br /&gt;
su -c &amp;#039;ip route get 192.168.100.1&amp;#039;&lt;br /&gt;
# 192.168.100.1 via 192.168.1.1 dev wlan0 table wlan0 src 192.168.1.136&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
HP mengirim paket untuk &amp;lt;code&amp;gt;192.168.100.1&amp;lt;/code&amp;gt; lewat &amp;#039;&amp;#039;&amp;#039;WiFi&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;dev wlan0&amp;lt;/code&amp;gt;, via gateway router &amp;lt;code&amp;gt;192.168.1.1&amp;lt;/code&amp;gt;), bukan lewat eth0 — padahal eth0 sudah punya IP di subnet itu. Router WiFi tidak kenal subnet &amp;lt;code&amp;gt;192.168.100.x&amp;lt;/code&amp;gt;, jadi paket nyasar.&lt;br /&gt;
&lt;br /&gt;
Android tidak memakai tabel routing &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; seperti Linux desktop. Ia memakai banyak tabel + &amp;lt;code&amp;gt;ip rule&amp;lt;/code&amp;gt; per-jaringan; rule untuk jaringan WiFi (&amp;lt;code&amp;gt;table wlan0&amp;lt;/code&amp;gt;) dibaca lebih dulu, membypass route eth0 yang ada di tabel &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt;. Asimetri ini (inbound via eth0 jalan, outbound lari ke WiFi) yang membuat koneksi TCP balik ke master gagal.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Catatan:&amp;#039;&amp;#039; &amp;quot;Local host: localhost&amp;quot; hanyalah label hostname default Termux — &amp;#039;&amp;#039;&amp;#039;bukan&amp;#039;&amp;#039;&amp;#039; indikasi masalah ifaddrs. Itu sempat menyesatkan ke arah rebuild source yang sebenarnya tidak perlu.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
Paksa tujuan &amp;lt;code&amp;gt;192.168.100.0/24&amp;lt;/code&amp;gt; membaca tabel &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; (yang punya route eth0), pada prioritas tinggi:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su -c &amp;#039;ip route replace 192.168.100.0/24 dev eth0 src 192.168.100.3 table main&amp;#039;&lt;br /&gt;
su -c &amp;#039;ip rule add to 192.168.100.0/24 lookup main priority 100&amp;#039;&lt;br /&gt;
# verifikasi:&lt;br /&gt;
su -c &amp;#039;ip route get 192.168.100.1&amp;#039;   # harus jadi: dev eth0 src 192.168.100.3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Rule prioritas 100 dibaca sebelum rule WiFi Android (~10000-an), memaksa paket ke subnet wired lewat eth0.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Catatan operasional:&amp;#039;&amp;#039; hanya perlu di HP (laptop Arch routing-nya normal). Android sering me-reset rule ini saat layar mati / USB re-enumerate / reboot — jika putus, terapkan ulang (bisa dibuat skrip). &amp;lt;code&amp;gt;ping&amp;lt;/code&amp;gt; mungkin tetap gagal jika laptop men-drop ICMP, tapi itu tidak relevan — MPI memakai TCP, bukan ICMP.&lt;br /&gt;
&lt;br /&gt;
= Konfigurasi final yang berhasil =&lt;br /&gt;
&lt;br /&gt;
== Skrip pembungkus di HP (env OpenCL Adreno) ==&lt;br /&gt;
Rank HP butuh env khusus (vendor-first untuk Adreno + preload libc++), sementara laptop tidak boleh terkena. Dibungkus skrip yang men-set env lalu exec app (path di-hardcode karena env spawn bisa kosong):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/data/data/com.termux/files/usr/bin/bash&lt;br /&gt;
PREFIX=/data/data/com.termux/files/usr&lt;br /&gt;
HOME=/data/data/com.termux/files/home&lt;br /&gt;
export LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64:$PREFIX/lib&lt;br /&gt;
export LD_PRELOAD=$PREFIX/lib/libc++_shared.so&lt;br /&gt;
exec &amp;quot;$HOME/app_arm&amp;quot; &amp;quot;$@&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Simpan sebagai &amp;lt;code&amp;gt;/data/data/com.termux/files/home/phone_launch.sh&amp;lt;/code&amp;gt;, lalu &amp;lt;code&amp;gt;chmod +x&amp;lt;/code&amp;gt;. (&amp;lt;code&amp;gt;app_arm&amp;lt;/code&amp;gt; = matmul yang dikompilasi di HP untuk ARM.)&lt;br /&gt;
&lt;br /&gt;
== Perintah peluncuran (MPMD) ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mpirun \&lt;br /&gt;
  --mca btl_tcp_if_include 192.168.100.0/24 \&lt;br /&gt;
  --mca oob_tcp_if_include 192.168.100.0/24 \&lt;br /&gt;
  --mca hwloc_base_binding_policy none \&lt;br /&gt;
  --prefix /data/data/com.termux/files/usr \&lt;br /&gt;
  --host 192.168.100.1,192.168.100.2 -np 2 ./matmul \&lt;br /&gt;
  : --host 192.168.100.3 -np 1 /data/data/com.termux/files/home/phone_launch.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Penjelasan flag: &amp;lt;code&amp;gt;btl/oob_tcp_if_include&amp;lt;/code&amp;gt; mengunci jalur data &amp;amp; kontrol ke subnet wired; &amp;lt;code&amp;gt;hwloc_base_binding_policy none&amp;lt;/code&amp;gt; mematikan binding proses (syscall-nya diblok seccomp Android); &amp;lt;code&amp;gt;--prefix&amp;lt;/code&amp;gt; tunggal + symlink laptop menyeragamkan path; sintaks &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; (MPMD) memberi binary berbeda per-arch.&lt;br /&gt;
&lt;br /&gt;
== Hasil ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Hello World from MPI rank 0/3 on host &amp;#039;darmogandolz&amp;#039; using OpenCL device &amp;#039;NVIDIA GeForce RTX 3050 6GB Laptop GPU&amp;#039;&lt;br /&gt;
Hello World from MPI rank 2/3 on host &amp;#039;localhost&amp;#039; using OpenCL device &amp;#039;QUALCOMM Adreno(TM)&amp;#039;&lt;br /&gt;
Hello World from MPI rank 1/3 on host &amp;#039;tumbal&amp;#039; using OpenCL device &amp;#039;cpu-ivybridge-AMD A8-6410 APU with AMD Radeon R5 Graphics&amp;#039;&lt;br /&gt;
Matrix multiply 512x512 * 512x512 = 512x512 selesai pada 3 proses MPI. Verifikasi: OK ✓&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Tiga node, tiga arsitektur/OS, tiga vendor OpenCL, satu job MPI — terverifikasi benar.&lt;br /&gt;
&lt;br /&gt;
= Ringkasan =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Masalah !! Penyebab inti !! Solusi inti&lt;br /&gt;
|-&lt;br /&gt;
| SSH refused (port 22) || Termux sshd di port 8022 || &amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt; per-host Port 8022&lt;br /&gt;
|-&lt;br /&gt;
| Kompatibilitas pkg || (ternyata cocok: 4.1.5 + pmix3x internal) || Pakai pkg apa adanya — tidak perlu build source&lt;br /&gt;
|-&lt;br /&gt;
| orted not found di HP || per-context prefix tak propagate + &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; Android read-only || Symlink terbalik (path HP di laptop) + satu &amp;lt;code&amp;gt;--prefix&amp;lt;/code&amp;gt; global&lt;br /&gt;
|-&lt;br /&gt;
| TCP gagal / &amp;quot;localhost&amp;quot; || Policy routing Android (paket wired lari ke WiFi) || &amp;lt;code&amp;gt;ip rule ... lookup main priority 100&amp;lt;/code&amp;gt; + route eth0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Catatan / Pelajaran =&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;pkg ternyata cukup.&amp;#039;&amp;#039;&amp;#039; Faktor penentu interop adalah versi + PMIx, dan keduanya match. Flag &amp;lt;code&amp;gt;ifaddrs=no&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;--disable-dlopen&amp;lt;/code&amp;gt; yang ditakutkan tidak mematahkan multi-node (fallback SIOCGIFCONF membaca eth0). &amp;#039;&amp;#039;&amp;#039;Jangan rebuild dari source secara prematur&amp;#039;&amp;#039;&amp;#039; — coba pkg dulu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Blocker terberat justru jaringan Android, bukan MPI.&amp;#039;&amp;#039;&amp;#039; Policy routing yang membypass eth0 adalah penyebab sebenarnya kegagalan TCP, bukan handshake MPI maupun ifaddrs.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Android &amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt; read-only walau di-root.&amp;#039;&amp;#039;&amp;#039; Karena itu unifikasi path dibalik: buat path HP di laptop (yang writable), bukan sebaliknya.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ping ≠ MPI.&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;ping&amp;lt;/code&amp;gt; memakai ICMP; banyak host men-drop ICMP tapi menerima TCP. Kegagalan ping bisa menyesatkan — uji TCP langsung (mis. &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; ke host; sampai prompt password pun berarti TCP nyampe).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;quot;localhost&amp;quot; itu kosmetik.&amp;#039;&amp;#039;&amp;#039; Hanya hostname default Termux, bukan kegagalan pengalamatan. Jika ingin output rapi, set hostname HP.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Per-context &amp;lt;code&amp;gt;--prefix&amp;lt;/code&amp;gt; tidak bekerja&amp;#039;&amp;#039;&amp;#039; di OpenMPI 4.1.5 untuk peluncuran orted — hanya satu prefix global. Atasi dengan menyeragamkan path (symlink), bukan mengandalkan prefix per-section.&lt;br /&gt;
&lt;br /&gt;
= Lihat pula =&lt;br /&gt;
&lt;br /&gt;
* [[Troubleshooting Cluster OpenMPI Multi-Node (Build &amp;amp; Koneksi)]]&lt;br /&gt;
* [[OpenCL Adreno di Termux]]&lt;br /&gt;
* [[Troubleshooting OpenCL + MPI di Termux]]&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenMPI]]&lt;br /&gt;
[[Category:HPC]]&lt;br /&gt;
[[Category:Cluster]]&lt;br /&gt;
[[Category:Android]]&lt;br /&gt;
[[Category:Termux]]&lt;br /&gt;
[[Category:Troubleshooting]]&lt;/div&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
</feed>