Cara pake OpenCL di Android
Panduan memperbaiki masalah clinfo melaporkan "Number of platforms: 0" di Termux pada perangkat Android dengan GPU Qualcomm Adreno. Masalah ini terjadi karena ICD loader OpenCL sudah terpasang, tetapi belum ada driver OpenCL vendor yang terdaftar ke loader tersebut.
| Item | Keterangan |
|---|---|
| Perangkat | Redmi Note 12 4G |
| SoC / GPU | Snapdragon 685 / Adreno 610 |
| Sistem operasi | Android (rooted) |
| Shell | Termux (arsitektur aarch64) |
Gejala
Menjalankan clinfo menghasilkan output berikut:
Number of platforms 0
ICD loader properties
ICD loader Name OpenCL ICD Loader
ICD loader Vendor OCL Icd free software
ICD loader Version 2.3.5
ICD loader Profile OpenCL 3.1
ICD loader terdeteksi normal, tetapi jumlah platform 0 — artinya tidak ada implementasi OpenCL (driver) yang ditemukan oleh loader.
Penyebab
Pada Android, driver OpenCL untuk GPU Adreno sudah tersedia dalam bentuk libOpenCL.so milik Qualcomm di partisi vendor. Namun, ICD loader bawaan Termux (ocl-icd) tidak mengetahui lokasi driver tersebut karena belum ada berkas ICD (*.icd) yang menunjuk ke sana.
Catatan: Terdapat dua berkas bernama libOpenCL.so pada sistem — satu milik Termux (berperan sebagai loader, yaitu yang dipanggil oleh clinfo) dan satu milik Qualcomm (driver asli di /vendor). Yang perlu didaftarkan adalah milik Qualcomm.
Persyaratan
- Perangkat Android dengan GPU Adreno yang mendukung OpenCL (seri Adreno 6xx ke atas umumnya mendukung OpenCL Full Profile).
- Termux dengan paket
clinfodan ICD loader (ocl-icd) sudah terpasang. - Akses root disarankan (membantu pada beberapa kasus pemuatan library vendor).
Solusi
1. Temukan lokasi driver
ls -l /vendor/lib64/libOpenCL.so /system/vendor/lib64/libOpenCL.so /system/lib64/libOpenCL.so 2>/dev/null
# Jika ragu, scan menyeluruh:
find /vendor /system -iname 'libOpenCL*.so' 2>/dev/null
Catat path yang muncul (umumnya /vendor/lib64/libOpenCL.so).
2. Daftarkan driver sebagai ICD
mkdir -p $PREFIX/etc/OpenCL/vendors
echo /vendor/lib64/libOpenCL.so > $PREFIX/etc/OpenCL/vendors/adreno.icd
Sesuaikan path dengan hasil langkah 1.
3. Arahkan linker ke library dependensi
Driver vendor membutuhkan berkas .so lain yang berada di /vendor/lib64:
export LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
4. Uji
clinfo | head -20
Jika berhasil, Number of platforms menjadi 1 dan muncul nama seperti QUALCOMM Snapdragon / Adreno (TM) 610.
5. Membuat pengaturan permanen
Tambahkan ke ~/.bashrc agar tidak perlu mengetik ulang setiap membuka Termux:
echo 'export LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}' >> ~/.bashrc
Troubleshooting
Jika platform masih 0, aktifkan mode debug pada loader untuk melihat penyebab kegagalan:
OCL_ICD_DEBUG=15 clinfo 2>&1 | head -40
Berdasarkan pesan yang muncul:
- Berkas ICD seperti tidak terbaca (platform tetap 0)
- Paksa direktori vendor lalu ulangi pengujian:
export OCL_ICD_VENDORS=$PREFIX/etc/OpenCL/vendors
... not accessible for the namespace "(default)"- Android memblokir pemuatan library vendor dari aplikasi. Karena perangkat sudah root, jalankan sebagai root: pasang
tsumelaluipkg install tsu, lalu jalankansudo env LD_LIBRARY_PATH=/vendor/lib64:/system/lib64 clinfo.
cannot locate symbol/undefined reference- Ada dependensi yang kurang. Periksa dengan
readelf -d /vendor/lib64/libOpenCL.so | grep NEEDED(perlupkg install binutils), lalu tambahkan folder library terkait (mis./odm/lib64) keLD_LIBRARY_PATH.
- Arsitektur tidak cocok
- Pastikan Termux 64-bit —
dpkg --print-architectureharus menghasilkanaarch64— agar sesuai dengan library dilib64. Jika Termux 32-bit, gunakan/vendor/lib/libOpenCL.so(tanpa64).
Memakai berkas ICD bawaan ROM
Beberapa ROM sudah menyertakan berkas ICD sendiri yang menunjuk ke driver asli:
cat /vendor/etc/OpenCL/vendors/*.icd /system/etc/OpenCL/vendors/*.icd 2>/dev/null
Jika ada isinya, gunakan path tersebut pada langkah 2.
Catatan
- Jika perintah
findpada langkah 1 sama sekali tidak menemukanlibOpenCL.so, kemungkinan ROM (umumnya custom ROM) telah membuang blob OpenCL. Berkas tersebut perlu ditarik manual dari stock ROM (MIUI/HyperOS). - GPU seri Adreno 6xx mendukung OpenCL Full Profile; performa nyata bergantung pada model GPU dan versi driver.