<?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=OpenCL_and_MPI_Termux_Troubleshooting</id>
	<title>OpenCL and MPI Termux Troubleshooting - 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=OpenCL_and_MPI_Termux_Troubleshooting"/>
	<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=OpenCL_and_MPI_Termux_Troubleshooting&amp;action=history"/>
	<updated>2026-11-01T18:05:12Z</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=OpenCL_and_MPI_Termux_Troubleshooting&amp;diff=661&amp;oldid=prev</id>
		<title>SanzSkuy at 04:24, 15 June 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=OpenCL_and_MPI_Termux_Troubleshooting&amp;diff=661&amp;oldid=prev"/>
		<updated>2026-06-15T04:24:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:24, 15 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dokumentasi proses menjalankan &#039;&#039;&#039;OpenCL + MPI&#039;&#039;&#039; secara bersamaan di &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;[https://termux.dev/en/ Termux&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]&lt;/del&gt;] pada perangkat Android yang sudah di-root, lengkap dengan &#039;&#039;&#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&#039;&#039;&#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dokumentasi proses menjalankan &#039;&#039;&#039;OpenCL + MPI&#039;&#039;&#039; secara bersamaan di [https://termux.dev/en/ Termux] pada perangkat Android yang sudah di-root, lengkap dengan &#039;&#039;&#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&#039;&#039;&#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lingkungan ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lingkungan ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l159&quot;&gt;Line 159:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 159:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dua pilihan:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dua pilihan:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;A. Pakai OpenCL C API dari C++&#039;&#039;&#039; (paling andal &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;hanya butuh &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; yang sudah ada). Tetap C++ (pakai &amp;lt;code&amp;gt;std::vector&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;std::string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;iostream&amp;lt;/code&amp;gt;), tapi panggil fungsi C:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;A. Pakai OpenCL C API dari C++&#039;&#039;&#039; (paling andal&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;hanya butuh &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; yang sudah ada). Tetap C++ (pakai &amp;lt;code&amp;gt;std::vector&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;std::string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;iostream&amp;lt;/code&amp;gt;), tapi panggil fungsi C:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l197&quot;&gt;Line 197:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 197:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pemicunya: OpenMPI memakai &amp;#039;&amp;#039;&amp;#039;hwloc&amp;#039;&amp;#039;&amp;#039; untuk mengikat (binding) proses ke core CPU saat &amp;lt;code&amp;gt;MPI_Init&amp;lt;/code&amp;gt;, dan binding itu memanggil syscall yang diblokir seccomp Android. Karena ini terjadi saat init (sebelum komunikasi), &amp;#039;&amp;#039;&amp;#039;mengganti transport tidak menolong&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Pemicunya: OpenMPI memakai &amp;#039;&amp;#039;&amp;#039;hwloc&amp;#039;&amp;#039;&amp;#039; untuk mengikat (binding) proses ke core CPU saat &amp;lt;code&amp;gt;MPI_Init&amp;lt;/code&amp;gt;, dan binding itu memanggil syscall yang diblokir seccomp Android. Karena ini terjadi saat init (sebelum komunikasi), &amp;#039;&amp;#039;&amp;#039;mengganti transport tidak menolong&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Yang TIDAK menyelesaikan&#039;&#039;&#039; (sudah dicoba): &amp;lt;code&amp;gt;--mca btl self,tcp&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;--mca btl_vader_single_copy_mechanism none&amp;lt;/code&amp;gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;keduanya tentang &#039;&#039;transport&#039;&#039;, padahal masalahnya di &#039;&#039;binding&#039;&#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Yang TIDAK menyelesaikan&#039;&#039;&#039; (sudah dicoba): &amp;lt;code&amp;gt;--mca btl self,tcp&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;--mca btl_vader_single_copy_mechanism none&amp;lt;/code&amp;gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;  &lt;/ins&gt;keduanya tentang &#039;&#039;transport&#039;&#039;, padahal masalahnya di &#039;&#039;binding&#039;&#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Solusi ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Solusi ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l236&quot;&gt;Line 236:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 236:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ini inti persoalannya. Demi libc++ (Masalah 2), program C++ menaruh &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;paling depan&amp;#039;&amp;#039;&amp;#039; di &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt;. Akibatnya &amp;lt;code&amp;gt;libOpenCL.so&amp;lt;/code&amp;gt; yang termuat adalah &amp;#039;&amp;#039;&amp;#039;loader ocl-icd&amp;#039;&amp;#039;&amp;#039; (di &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt;), bukan driver vendor.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Ini inti persoalannya. Demi libc++ (Masalah 2), program C++ menaruh &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;paling depan&amp;#039;&amp;#039;&amp;#039; di &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt;. Akibatnya &amp;lt;code&amp;gt;libOpenCL.so&amp;lt;/code&amp;gt; yang termuat adalah &amp;#039;&amp;#039;&amp;#039;loader ocl-icd&amp;#039;&amp;#039;&amp;#039; (di &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt;), bukan driver vendor.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Masalahnya: driver Adreno &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; &#039;&#039;&#039;bukan driver ICD yang patuh&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;ia adalah implementasi OpenCL lengkap yang berdiri sendiri, tetapi &#039;&#039;&#039;tidak meng-export entry point ICD&#039;&#039;&#039; (&amp;lt;code&amp;gt;clIcdGetPlatformIDsKHR&amp;lt;/code&amp;gt;) yang dipakai loader untuk meng-enumerasi platform. Maka:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Masalahnya: driver Adreno &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; &#039;&#039;&#039;bukan driver ICD yang patuh&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;ia adalah implementasi OpenCL lengkap yang berdiri sendiri, tetapi &#039;&#039;&#039;tidak meng-export entry point ICD&#039;&#039;&#039; (&amp;lt;code&amp;gt;clIcdGetPlatformIDsKHR&amp;lt;/code&amp;gt;) yang dipakai loader untuk meng-enumerasi platform. Maka:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Lewat &amp;#039;&amp;#039;&amp;#039;loader&amp;#039;&amp;#039;&amp;#039; (saat &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; di depan) → loader bisa memuat driver tapi &amp;#039;&amp;#039;&amp;#039;tidak bisa enumerate&amp;#039;&amp;#039;&amp;#039; → 0 platform.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Lewat &amp;#039;&amp;#039;&amp;#039;loader&amp;#039;&amp;#039;&amp;#039; (saat &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; di depan) → loader bisa memuat driver tapi &amp;#039;&amp;#039;&amp;#039;tidak bisa enumerate&amp;#039;&amp;#039;&amp;#039; → 0 platform.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l297&quot;&gt;Line 297:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 297:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Tiga prinsip kunci:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Tiga prinsip kunci:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &#039;&#039;&#039;Build pakai env bersih&#039;&#039;&#039; (&amp;lt;code&amp;gt;env -u LD_LIBRARY_PATH&amp;lt;/code&amp;gt;), &#039;&#039;&#039;run pakai env vendor&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;jangan dicampur, jangan di-global.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &#039;&#039;&#039;Build pakai env bersih&#039;&#039;&#039; (&amp;lt;code&amp;gt;env -u LD_LIBRARY_PATH&amp;lt;/code&amp;gt;), &#039;&#039;&#039;run pakai env vendor&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;jangan dicampur, jangan di-global.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;OpenCL&amp;#039;&amp;#039;&amp;#039;: muat driver vendor &amp;#039;&amp;#039;&amp;#039;langsung&amp;#039;&amp;#039;&amp;#039; (vendor-first), karena driver Adreno bukan ICD-compliant.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;OpenCL&amp;#039;&amp;#039;&amp;#039;: muat driver vendor &amp;#039;&amp;#039;&amp;#039;langsung&amp;#039;&amp;#039;&amp;#039; (vendor-first), karena driver Adreno bukan ICD-compliant.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;C++ + vendor-first&amp;#039;&amp;#039;&amp;#039;: pakai &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt; libc++ Termux supaya tidak bentrok namespace.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# &amp;#039;&amp;#039;&amp;#039;C++ + vendor-first&amp;#039;&amp;#039;&amp;#039;: pakai &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt; libc++ Termux supaya tidak bentrok namespace.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l303&quot;&gt;Line 303:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 303:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Catatan ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Catatan ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;&quot;Max clock 1 MHz&quot; dan &quot;1 compute unit&quot;&#039;&#039;&#039; yang dilaporkan device &#039;&#039;&#039;bukan error/bug kode&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;driver Adreno memang sering melaporkan &amp;lt;code&amp;gt;CL_DEVICE_MAX_CLOCK_FREQUENCY&amp;lt;/code&amp;gt; dengan nilai placeholder, dan Adreno meng-expose 1 &#039;&#039;compute unit&#039;&#039; ke OpenCL (normal untuk arsitekturnya). Kernel tetap berjalan paralel di banyak ALU di dalamnya.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;&quot;Max clock 1 MHz&quot; dan &quot;1 compute unit&quot;&#039;&#039;&#039; yang dilaporkan device &#039;&#039;&#039;bukan error/bug kode&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;driver Adreno memang sering melaporkan &amp;lt;code&amp;gt;CL_DEVICE_MAX_CLOCK_FREQUENCY&amp;lt;/code&amp;gt; dengan nilai placeholder, dan Adreno meng-expose 1 &#039;&#039;compute unit&#039;&#039; ke OpenCL (normal untuk arsitekturnya). Kernel tetap berjalan paralel di banyak ALU di dalamnya.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Paralelisme&#039;&#039;&#039;: dengan hanya &#039;&#039;&#039;1 GPU&#039;&#039;&#039;, menjalankan banyak rank MPI tidak mempercepat sisi GPU &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;rangkaian kernel dari tiap rank di-&#039;&#039;serialize&#039;&#039; oleh driver pada GPU yang sama. Sisi CPU (generate data, verifikasi, reduksi) tetap paralel. Paralelisme GPU nyata baru tercapai bila ada &#039;&#039;&#039;beberapa GPU&#039;&#039;&#039; (mis. cluster beberapa perangkat Android via MPI/TCP), satu rank per GPU.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &#039;&#039;&#039;Paralelisme&#039;&#039;&#039;: dengan hanya &#039;&#039;&#039;1 GPU&#039;&#039;&#039;, menjalankan banyak rank MPI tidak mempercepat sisi GPU &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;  &lt;/ins&gt;rangkaian kernel dari tiap rank di-&#039;&#039;serialize&#039;&#039; oleh driver pada GPU yang sama. Sisi CPU (generate data, verifikasi, reduksi) tetap paralel. Paralelisme GPU nyata baru tercapai bila ada &#039;&#039;&#039;beberapa GPU&#039;&#039;&#039; (mis. cluster beberapa perangkat Android via MPI/TCP), satu rank per GPU.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; Termux = &amp;lt;code&amp;gt;/data/data/com.termux/files/usr&amp;lt;/code&amp;gt;. Variabel &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; sudah otomatis ter-set di Termux.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; Termux = &amp;lt;code&amp;gt;/data/data/com.termux/files/usr&amp;lt;/code&amp;gt;. Variabel &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; sudah otomatis ter-set di Termux.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lihat pula ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lihat pula ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/OCL-dev/ocl-icd ocl-icd] &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;OpenCL ICD loader&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/OCL-dev/ocl-icd ocl-icd]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;OpenCL ICD loader&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://www.open-mpi.org/ Open MPI]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://www.open-mpi.org/ Open MPI]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/KhronosGroup/OpenCL-CLHPP OpenCL-CLHPP] &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;C++ bindings&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://github.com/KhronosGroup/OpenCL-CLHPP OpenCL-CLHPP]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;C++ bindings&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://registry.khronos.org/OpenCL/ Spesifikasi OpenCL (Khronos)]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [https://registry.khronos.org/OpenCL/ Spesifikasi OpenCL (Khronos)]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=OpenCL_and_MPI_Termux_Troubleshooting&amp;diff=660&amp;oldid=prev</id>
		<title>SanzSkuy at 04:21, 15 June 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=OpenCL_and_MPI_Termux_Troubleshooting&amp;diff=660&amp;oldid=prev"/>
		<updated>2026-06-15T04:21:48Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:21, 15 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{DISPLAYTITLE:OpenCL + MPI di Termux (Android/Adreno) — Troubleshooting Lengkap}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Dokumentasi &lt;/ins&gt;proses menjalankan &#039;&#039;&#039;OpenCL + MPI&#039;&#039;&#039; secara bersamaan di [[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://termux.dev/en/ &lt;/ins&gt;Termux]] pada perangkat Android yang sudah di-root, lengkap dengan &#039;&#039;&#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&#039;&#039;&#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Halaman ini mendokumentasikan &lt;/del&gt;proses menjalankan &#039;&#039;&#039;OpenCL + MPI&#039;&#039;&#039; secara bersamaan di [[Termux]] pada perangkat Android yang sudah di-root, lengkap dengan &#039;&#039;&#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&#039;&#039;&#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lingkungan ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Lingkungan ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l36&quot;&gt;Line 36:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 34:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! # !! Gejala (error) !! Penyebab singkat !! Fix singkat&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! # !! Gejala (error) !! Penyebab singkat !! Fix singkat&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 1 || &amp;lt;code&amp;gt;clinfo&amp;lt;/code&amp;gt;: Number of platforms = 0 || Loader ocl-icd tidak menemukan driver vendor || Daftarkan ICD / muat driver vendor langsung&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 1 || &amp;lt;code&amp;gt;clinfo&amp;lt;/code&amp;gt;: Number of platforms = 0 || Loader ocl-icd tidak menemukan driver vendor || Daftarkan &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/ins&gt;ICD&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]] &lt;/ins&gt;/ muat driver vendor langsung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 2 || clang: &amp;lt;code&amp;gt;cannot locate symbol _ZNSt6__ndk1...&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; global menarik libc++ Android || Jangan set &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; global; pisah env build vs run&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| 2 || clang: &amp;lt;code&amp;gt;cannot locate symbol _ZNSt6__ndk1...&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; global menarik libc++ Android || Jangan set &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; global; pisah env build vs run&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l63&quot;&gt;Line 63:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 61:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Loader &amp;lt;code&amp;gt;ocl-icd&amp;lt;/code&amp;gt; terpasang, tetapi tidak ada driver vendor yang terdaftar. Loader mencari berkas &amp;lt;code&amp;gt;*.icd&amp;lt;/code&amp;gt; di &amp;lt;code&amp;gt;$PREFIX/etc/OpenCL/vendors/&amp;lt;/code&amp;gt;; kalau kosong, hasilnya 0 platform.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Loader &amp;lt;code&amp;gt;ocl-icd&amp;lt;/code&amp;gt; terpasang, tetapi tidak ada driver vendor yang terdaftar. Loader mencari berkas &amp;lt;code&amp;gt;*.icd&amp;lt;/code&amp;gt; di &amp;lt;code&amp;gt;$PREFIX/etc/OpenCL/vendors/&amp;lt;/code&amp;gt;; kalau kosong, hasilnya 0 platform.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Catatan penting:&#039;&#039;&#039; driver Adreno &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; ternyata &#039;&#039;&#039;bukan driver ICD yang patuh&#039;&#039;&#039; (tidak meng-export &amp;lt;code&amp;gt;clIcdGetPlatformIDsKHR&amp;lt;/code&amp;gt;). Jadi mendaftarkannya ke loader saja &#039;&#039;&#039;tidak selalu cukup&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;lihat [[#Masalah 5: &quot;No OpenCL platform&quot; saat program C++ dijalankan|Masalah 5]] untuk gambaran lengkapnya. Cara paling andal adalah memuat driver vendor &#039;&#039;&#039;langsung&#039;&#039;&#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Catatan penting:&#039;&#039;&#039; driver Adreno &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; ternyata &#039;&#039;&#039;bukan driver ICD yang patuh&#039;&#039;&#039; (tidak meng-export &amp;lt;code&amp;gt;clIcdGetPlatformIDsKHR&amp;lt;/code&amp;gt;). Jadi mendaftarkannya ke loader saja &#039;&#039;&#039;tidak selalu cukup&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;lihat [[#Masalah 5: &quot;No OpenCL platform&quot; saat program C++ dijalankan|Masalah 5]] untuk gambaran lengkapnya. Cara paling andal adalah memuat driver vendor &#039;&#039;&#039;langsung&#039;&#039;&#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Solusi ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Solusi ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l135&quot;&gt;Line 135:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 133:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jangan menaruh &amp;lt;code&amp;gt;export LD_LIBRARY_PATH=...&amp;lt;/code&amp;gt; di &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt;. Untuk compile, driver vendor &#039;&#039;&#039;tidak&#039;&#039;&#039; dibutuhkan &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;&amp;lt;code&amp;gt;-lOpenCL&amp;lt;/code&amp;gt; hanya butuh loader ocl-icd di &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt;; library vendor hanya perlu saat runtime.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Jangan menaruh &amp;lt;code&amp;gt;export LD_LIBRARY_PATH=...&amp;lt;/code&amp;gt; di &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt;. Untuk compile, driver vendor &#039;&#039;&#039;tidak&#039;&#039;&#039; dibutuhkan&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;&amp;lt;code&amp;gt;-lOpenCL&amp;lt;/code&amp;gt; hanya butuh loader ocl-icd di &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt;; library vendor hanya perlu saat runtime.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Masalah 3: header C++ OpenCL tidak ada (use of undeclared identifier &amp;#039;cl&amp;#039;) ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Masalah 3: header C++ OpenCL tidak ada (use of undeclared identifier &amp;#039;cl&amp;#039;) ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l154&quot;&gt;Line 154:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 152:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dua hal berbeda:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Dua hal berbeda:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; adalah header &#039;&#039;&#039;C&#039;&#039;&#039; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;— &lt;/del&gt;isinya fungsi &amp;lt;code&amp;gt;clGetPlatformIDs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clCreateContext&amp;lt;/code&amp;gt;, dst. Header ini &#039;&#039;&#039;tidak punya namespace &amp;lt;code&amp;gt;cl::&amp;lt;/code&amp;gt;&#039;&#039;&#039; sama sekali. Maka semua &amp;lt;code&amp;gt;cl::Platform&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cl::Device&amp;lt;/code&amp;gt;, dsb. menjadi &quot;undeclared&quot;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; adalah header &#039;&#039;&#039;C&#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;; &lt;/ins&gt;isinya fungsi &amp;lt;code&amp;gt;clGetPlatformIDs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clCreateContext&amp;lt;/code&amp;gt;, dst. Header ini &#039;&#039;&#039;tidak punya namespace &amp;lt;code&amp;gt;cl::&amp;lt;/code&amp;gt;&#039;&#039;&#039; sama sekali. Maka semua &amp;lt;code&amp;gt;cl::Platform&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cl::Device&amp;lt;/code&amp;gt;, dsb. menjadi &quot;undeclared&quot;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Class &amp;lt;code&amp;gt;cl::*&amp;lt;/code&amp;gt; hanya ada di &amp;lt;code&amp;gt;&amp;amp;lt;CL/opencl.hpp&amp;amp;gt;&amp;lt;/code&amp;gt; (OpenCL C++ bindings), yang merupakan header &amp;#039;&amp;#039;&amp;#039;terpisah&amp;#039;&amp;#039;&amp;#039; (paket &amp;lt;code&amp;gt;opencl-clhpp&amp;lt;/code&amp;gt;) dan &amp;#039;&amp;#039;&amp;#039;bukan&amp;#039;&amp;#039;&amp;#039; bagian dari &amp;lt;code&amp;gt;opencl-headers&amp;lt;/code&amp;gt;. Header ini sering belum terpasang di Termux.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Class &amp;lt;code&amp;gt;cl::*&amp;lt;/code&amp;gt; hanya ada di &amp;lt;code&amp;gt;&amp;amp;lt;CL/opencl.hpp&amp;amp;gt;&amp;lt;/code&amp;gt; (OpenCL C++ bindings), yang merupakan header &amp;#039;&amp;#039;&amp;#039;terpisah&amp;#039;&amp;#039;&amp;#039; (paket &amp;lt;code&amp;gt;opencl-clhpp&amp;lt;/code&amp;gt;) dan &amp;#039;&amp;#039;&amp;#039;bukan&amp;#039;&amp;#039;&amp;#039; bagian dari &amp;lt;code&amp;gt;opencl-headers&amp;lt;/code&amp;gt;. Header ini sering belum terpasang di Termux.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
	<entry>
		<id>https://wiki.haidhi.my.id/wiki/index.php?title=OpenCL_and_MPI_Termux_Troubleshooting&amp;diff=659&amp;oldid=prev</id>
		<title>SanzSkuy: Created page with &quot;{{DISPLAYTITLE:OpenCL + MPI di Termux (Android/Adreno) — Troubleshooting Lengkap}}  Halaman ini mendokumentasikan proses menjalankan &#039;&#039;&#039;OpenCL + MPI&#039;&#039;&#039; secara bersamaan di Termux pada perangkat Android yang sudah di-root, lengkap dengan &#039;&#039;&#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&#039;&#039;&#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.  == Lingkungan...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.haidhi.my.id/wiki/index.php?title=OpenCL_and_MPI_Termux_Troubleshooting&amp;diff=659&amp;oldid=prev"/>
		<updated>2026-06-15T03:50:38Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{DISPLAYTITLE:OpenCL + MPI di Termux (Android/Adreno) — Troubleshooting Lengkap}}  Halaman ini mendokumentasikan proses menjalankan &amp;#039;&amp;#039;&amp;#039;OpenCL + MPI&amp;#039;&amp;#039;&amp;#039; secara bersamaan di &lt;a href=&quot;/wiki/index.php?title=Termux&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Termux (page does not exist)&quot;&gt;Termux&lt;/a&gt; pada perangkat Android yang sudah di-root, lengkap dengan &amp;#039;&amp;#039;&amp;#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&amp;#039;&amp;#039;&amp;#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.  == Lingkungan...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{DISPLAYTITLE:OpenCL + MPI di Termux (Android/Adreno) — Troubleshooting Lengkap}}&lt;br /&gt;
&lt;br /&gt;
Halaman ini mendokumentasikan proses menjalankan &amp;#039;&amp;#039;&amp;#039;OpenCL + MPI&amp;#039;&amp;#039;&amp;#039; secara bersamaan di [[Termux]] pada perangkat Android yang sudah di-root, lengkap dengan &amp;#039;&amp;#039;&amp;#039;semua error yang ditemui, penyebabnya, dan cara memperbaikinya&amp;#039;&amp;#039;&amp;#039;. Hasil akhir: sebuah program C++ yang membagi vektor lewat MPI ke beberapa proses, lalu tiap proses menghitung bagiannya di GPU Adreno lewat OpenCL.&lt;br /&gt;
&lt;br /&gt;
== Lingkungan ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Komponen !! Keterangan&lt;br /&gt;
|-&lt;br /&gt;
| Perangkat || Redmi Note 12 4G (rooted)&lt;br /&gt;
|-&lt;br /&gt;
| SoC || Qualcomm Snapdragon 685&lt;br /&gt;
|-&lt;br /&gt;
| GPU || Adreno 610 (OpenCL 2.0 device, driver melaporkan OpenCL 3.0)&lt;br /&gt;
|-&lt;br /&gt;
| Userland || Termux&lt;br /&gt;
|-&lt;br /&gt;
| ICD loader || &amp;lt;code&amp;gt;ocl-icd&amp;lt;/code&amp;gt; (&amp;quot;OCL Icd free software&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| Driver OpenCL || &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; (milik vendor/Qualcomm)&lt;br /&gt;
|-&lt;br /&gt;
| MPI || OpenMPI (paket &amp;lt;code&amp;gt;openmpi&amp;lt;/code&amp;gt; Termux)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;/data/data/com.termux/files/usr&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Paket yang dibutuhkan:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkg install clang make cmake openmpi opencl-headers ocl-icd clinfo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ringkasan masalah ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! # !! Gejala (error) !! Penyebab singkat !! Fix singkat&lt;br /&gt;
|-&lt;br /&gt;
| 1 || &amp;lt;code&amp;gt;clinfo&amp;lt;/code&amp;gt;: Number of platforms = 0 || Loader ocl-icd tidak menemukan driver vendor || Daftarkan ICD / muat driver vendor langsung&lt;br /&gt;
|-&lt;br /&gt;
| 2 || clang: &amp;lt;code&amp;gt;cannot locate symbol _ZNSt6__ndk1...&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; global menarik libc++ Android || Jangan set &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; global; pisah env build vs run&lt;br /&gt;
|-&lt;br /&gt;
| 3 || &amp;lt;code&amp;gt;use of undeclared identifier &amp;#039;cl&amp;#039;&amp;lt;/code&amp;gt; || Header C++ &amp;lt;code&amp;gt;&amp;amp;lt;CL/opencl.hpp&amp;amp;gt;&amp;lt;/code&amp;gt; tidak ada; &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; tidak punya namespace &amp;lt;code&amp;gt;cl::&amp;lt;/code&amp;gt; || Pakai C API dari C++, atau pasang &amp;lt;code&amp;gt;opencl-clhpp&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 4 || &amp;lt;code&amp;gt;mpirun ... signal 31 (Bad system call)&amp;lt;/code&amp;gt; || seccomp Android memblokir syscall binding hwloc saat &amp;lt;code&amp;gt;MPI_Init&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;--mca hwloc_base_binding_policy none&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Program C++: &amp;lt;code&amp;gt;No OpenCL platform&amp;lt;/code&amp;gt; || Driver Adreno bukan ICD-compliant → loader gagal enumerate || Muat driver vendor langsung (vendor-first) + &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt; libc++ Termux&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Masalah 1: clinfo melaporkan 0 platform ==&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Number of platforms                               0&lt;br /&gt;
  ICD loader Name                                 OpenCL ICD Loader&lt;br /&gt;
  ICD loader Vendor                               OCL Icd free software&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loader-nya kebaca, tapi tidak ada platform OpenCL sama sekali.&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
&lt;br /&gt;
Loader &amp;lt;code&amp;gt;ocl-icd&amp;lt;/code&amp;gt; terpasang, tetapi tidak ada driver vendor yang terdaftar. Loader mencari berkas &amp;lt;code&amp;gt;*.icd&amp;lt;/code&amp;gt; di &amp;lt;code&amp;gt;$PREFIX/etc/OpenCL/vendors/&amp;lt;/code&amp;gt;; kalau kosong, hasilnya 0 platform.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Catatan penting:&amp;#039;&amp;#039;&amp;#039; driver Adreno &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; ternyata &amp;#039;&amp;#039;&amp;#039;bukan driver ICD yang patuh&amp;#039;&amp;#039;&amp;#039; (tidak meng-export &amp;lt;code&amp;gt;clIcdGetPlatformIDsKHR&amp;lt;/code&amp;gt;). Jadi mendaftarkannya ke loader saja &amp;#039;&amp;#039;&amp;#039;tidak selalu cukup&amp;#039;&amp;#039;&amp;#039; — lihat [[#Masalah 5: &amp;quot;No OpenCL platform&amp;quot; saat program C++ dijalankan|Masalah 5]] untuk gambaran lengkapnya. Cara paling andal adalah memuat driver vendor &amp;#039;&amp;#039;&amp;#039;langsung&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
&lt;br /&gt;
1. Cari lokasi driver:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ls -l /vendor/lib64/libOpenCL.so /system/vendor/lib64/libOpenCL.so 2&amp;gt;/dev/null&lt;br /&gt;
find /vendor /system -iname &amp;#039;libOpenCL*.so&amp;#039; 2&amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. (Opsional, untuk loader) daftarkan ICD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p $PREFIX/etc/OpenCL/vendors&lt;br /&gt;
echo /vendor/lib64/libOpenCL.so &amp;gt; $PREFIX/etc/OpenCL/vendors/adreno.icd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Saat menjalankan, arahkan loader ke library vendor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64&lt;br /&gt;
clinfo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dengan &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; vendor-first, &amp;lt;code&amp;gt;libOpenCL.so&amp;lt;/code&amp;gt; yang dimuat adalah library vendor (driver Adreno) langsung, dan &amp;lt;code&amp;gt;clinfo&amp;lt;/code&amp;gt; akan melihat platform &amp;quot;QUALCOMM Snapdragon&amp;quot; / &amp;quot;Adreno (TM) 610&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;PERINGATAN:&amp;#039;&amp;#039;&amp;#039; meng-export &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; secara &amp;#039;&amp;#039;&amp;#039;global&amp;#039;&amp;#039;&amp;#039; (mis. di &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt;) akan menimbulkan [[#Masalah 2: clang rusak (cannot locate symbol __ndk1)|Masalah 2]]. Set hanya saat dibutuhkan.&lt;br /&gt;
&lt;br /&gt;
== Masalah 2: clang rusak (cannot locate symbol __ndk1) ==&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&lt;br /&gt;
Setelah meng-export &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; untuk OpenCL, &amp;lt;code&amp;gt;clang&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;clang++&amp;lt;/code&amp;gt; berhenti bekerja:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
CANNOT LINK EXECUTABLE &amp;quot;clang&amp;quot;: cannot locate symbol&lt;br /&gt;
&amp;quot;_ZNSt6__ndk122__libcpp_verbose_abortEPKcz&amp;quot; referenced by ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Simbol itu kalau di-demangle: &amp;lt;code&amp;gt;std::__ndk1::__libcpp_verbose_abort(char const*, ...)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;LD_LIBRARY_PATH=/vendor/lib64:/system/lib64&amp;lt;/code&amp;gt; yang di-set global membuat Termux memuat &amp;#039;&amp;#039;&amp;#039;libc++ milik Android&amp;#039;&amp;#039;&amp;#039; dari &amp;lt;code&amp;gt;/system/lib64&amp;lt;/code&amp;gt; alih-alih libc++ milik Termux. Keduanya memakai &amp;#039;&amp;#039;inline namespace&amp;#039;&amp;#039; yang berbeda:&lt;br /&gt;
&lt;br /&gt;
* libc++ Termux → &amp;lt;code&amp;gt;std::__ndk1&amp;lt;/code&amp;gt;&lt;br /&gt;
* libc++ Android → &amp;lt;code&amp;gt;std::__1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
clang Termux dikompilasi terhadap &amp;lt;code&amp;gt;__ndk1&amp;lt;/code&amp;gt;, sehingga ketika libc++ Android (&amp;lt;code&amp;gt;__1&amp;lt;/code&amp;gt;) yang termuat, simbol &amp;lt;code&amp;gt;__ndk1&amp;lt;/code&amp;gt; hilang dan clang gagal jalan.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
&lt;br /&gt;
Konfirmasi dulu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
unset LD_LIBRARY_PATH&lt;br /&gt;
clang --version    # kalau jalan lagi, terbukti LD_LIBRARY_PATH penyebabnya&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prinsipnya: pisahkan environment untuk COMPILE dan RUN.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Saat &amp;#039;&amp;#039;&amp;#039;compile/cmake/make&amp;#039;&amp;#039;&amp;#039; → &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; harus &amp;#039;&amp;#039;&amp;#039;kosong&amp;#039;&amp;#039;&amp;#039; (biar libc++ Termux yang dipakai). Caranya pakai &amp;lt;code&amp;gt;env -u&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
env -u LD_LIBRARY_PATH clang -lOpenCL main.c -o app&lt;br /&gt;
env -u LD_LIBRARY_PATH cmake --build build&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Saat &amp;#039;&amp;#039;&amp;#039;run&amp;#039;&amp;#039;&amp;#039; → baru set &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; ke library vendor, sebagai prefix satu perintah agar otomatis hilang setelahnya:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64 ./app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jangan menaruh &amp;lt;code&amp;gt;export LD_LIBRARY_PATH=...&amp;lt;/code&amp;gt; di &amp;lt;code&amp;gt;~/.bashrc&amp;lt;/code&amp;gt;. Untuk compile, driver vendor &amp;#039;&amp;#039;&amp;#039;tidak&amp;#039;&amp;#039;&amp;#039; dibutuhkan — &amp;lt;code&amp;gt;-lOpenCL&amp;lt;/code&amp;gt; hanya butuh loader ocl-icd di &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt;; library vendor hanya perlu saat runtime.&lt;br /&gt;
&lt;br /&gt;
== Masalah 3: header C++ OpenCL tidak ada (use of undeclared identifier &amp;#039;cl&amp;#039;) ==&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&lt;br /&gt;
Saat memakai OpenCL C++ bindings, &amp;lt;code&amp;gt;&amp;amp;lt;CL/opencl.hpp&amp;amp;gt;&amp;lt;/code&amp;gt; tidak ditemukan. Lalu setelah diganti ke &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt;, muncul:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
error: use of undeclared identifier &amp;#039;cl&amp;#039;&lt;br /&gt;
static cl::Device pick_gpu(...) { ... }&lt;br /&gt;
       ^&lt;br /&gt;
error: missing &amp;#039;template&amp;#039; keyword prior to dependent template name &amp;#039;getInfo&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
&lt;br /&gt;
Dua hal berbeda:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; adalah header &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; — isinya fungsi &amp;lt;code&amp;gt;clGetPlatformIDs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;clCreateContext&amp;lt;/code&amp;gt;, dst. Header ini &amp;#039;&amp;#039;&amp;#039;tidak punya namespace &amp;lt;code&amp;gt;cl::&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; sama sekali. Maka semua &amp;lt;code&amp;gt;cl::Platform&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cl::Device&amp;lt;/code&amp;gt;, dsb. menjadi &amp;quot;undeclared&amp;quot;.&lt;br /&gt;
* Class &amp;lt;code&amp;gt;cl::*&amp;lt;/code&amp;gt; hanya ada di &amp;lt;code&amp;gt;&amp;amp;lt;CL/opencl.hpp&amp;amp;gt;&amp;lt;/code&amp;gt; (OpenCL C++ bindings), yang merupakan header &amp;#039;&amp;#039;&amp;#039;terpisah&amp;#039;&amp;#039;&amp;#039; (paket &amp;lt;code&amp;gt;opencl-clhpp&amp;lt;/code&amp;gt;) dan &amp;#039;&amp;#039;&amp;#039;bukan&amp;#039;&amp;#039;&amp;#039; bagian dari &amp;lt;code&amp;gt;opencl-headers&amp;lt;/code&amp;gt;. Header ini sering belum terpasang di Termux.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
&lt;br /&gt;
Dua pilihan:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A. Pakai OpenCL C API dari C++&amp;#039;&amp;#039;&amp;#039; (paling andal — hanya butuh &amp;lt;code&amp;gt;&amp;amp;lt;CL/cl.h&amp;amp;gt;&amp;lt;/code&amp;gt; yang sudah ada). Tetap C++ (pakai &amp;lt;code&amp;gt;std::vector&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;std::string&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;iostream&amp;lt;/code&amp;gt;), tapi panggil fungsi C:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#define CL_TARGET_OPENCL_VERSION 300&lt;br /&gt;
#include &amp;lt;CL/cl.h&amp;gt;&lt;br /&gt;
// cl_context ctx = clCreateContext(...); dst.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B. Sediakan header C++ bindings&amp;#039;&amp;#039;&amp;#039; kalau memang ingin gaya &amp;lt;code&amp;gt;cl::&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pkg install opencl-clhpp        # kalau tersedia di repo&lt;br /&gt;
# atau ambil manual (header tunggal, hanya butuh cl.h):&lt;br /&gt;
mkdir -p CL&lt;br /&gt;
curl -L -o CL/opencl.hpp \&lt;br /&gt;
  https://github.com/KhronosGroup/OpenCL-CLHPP/raw/main/include/CL/opencl.hpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
lalu tambahkan &amp;lt;code&amp;gt;target_include_directories(... PRIVATE ${CMAKE_SOURCE_DIR})&amp;lt;/code&amp;gt; di CMake.&lt;br /&gt;
&lt;br /&gt;
== Masalah 4: mpirun signal 31 (Bad system call / SIGSYS) ==&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
mpirun: Forwarding signal 31 to job&lt;br /&gt;
mpirun noticed that process rank 3 with PID 0 on node localhost&lt;br /&gt;
exited on signal 31 (Bad system call).&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tidak ada output program sama sekali sebelum crash (mati di dalam &amp;lt;code&amp;gt;MPI_Init&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
&lt;br /&gt;
Signal 31 = &amp;#039;&amp;#039;&amp;#039;SIGSYS&amp;#039;&amp;#039;&amp;#039; = &amp;quot;Bad system call&amp;quot;. Kernel Android memasang filter &amp;#039;&amp;#039;&amp;#039;seccomp&amp;#039;&amp;#039;&amp;#039; yang memblokir syscall tertentu; saat proses memanggil syscall yang diblokir, proses langsung dibunuh dengan sinyal 31.&lt;br /&gt;
&lt;br /&gt;
Pemicunya: OpenMPI memakai &amp;#039;&amp;#039;&amp;#039;hwloc&amp;#039;&amp;#039;&amp;#039; untuk mengikat (binding) proses ke core CPU saat &amp;lt;code&amp;gt;MPI_Init&amp;lt;/code&amp;gt;, dan binding itu memanggil syscall yang diblokir seccomp Android. Karena ini terjadi saat init (sebelum komunikasi), &amp;#039;&amp;#039;&amp;#039;mengganti transport tidak menolong&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Yang TIDAK menyelesaikan&amp;#039;&amp;#039;&amp;#039; (sudah dicoba): &amp;lt;code&amp;gt;--mca btl self,tcp&amp;lt;/code&amp;gt; dan &amp;lt;code&amp;gt;--mca btl_vader_single_copy_mechanism none&amp;lt;/code&amp;gt; — keduanya tentang &amp;#039;&amp;#039;transport&amp;#039;&amp;#039;, padahal masalahnya di &amp;#039;&amp;#039;binding&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
&lt;br /&gt;
Matikan binding hwloc:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mpirun -np 4 --oversubscribe \&lt;br /&gt;
  --mca hwloc_base_binding_policy none \&lt;br /&gt;
  --mca btl tcp,self \&lt;br /&gt;
  ./app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--mca hwloc_base_binding_policy none&amp;lt;/code&amp;gt; → &amp;#039;&amp;#039;&amp;#039;kunci&amp;#039;&amp;#039;&amp;#039;-nya; matikan binding yang memicu SIGSYS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--mca btl tcp,self&amp;lt;/code&amp;gt; → komunikasi lewat TCP loopback (untuk demo ini datanya kecil, jadi tidak masalah).&lt;br /&gt;
* &amp;lt;code&amp;gt;--oversubscribe&amp;lt;/code&amp;gt; → izinkan proses lebih banyak daripada slot terdeteksi.&lt;br /&gt;
&lt;br /&gt;
Verifikasi cepat dengan program &amp;quot;hello world&amp;quot; MPI minimal sebelum menggabungkan dengan OpenCL.&lt;br /&gt;
&lt;br /&gt;
== Masalah 5: &amp;quot;No OpenCL platform&amp;quot; saat program C++ dijalankan ==&lt;br /&gt;
&lt;br /&gt;
=== Gejala ===&lt;br /&gt;
&lt;br /&gt;
MPI sudah jalan (banner tampil, 4 rank start), tapi tiap rank gagal di OpenCL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[rank 0] No OpenCL platform&lt;br /&gt;
[rank 1] No OpenCL platform&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anehnya:&lt;br /&gt;
* &amp;lt;code&amp;gt;clinfo&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;polos&amp;#039;&amp;#039;&amp;#039; (env shell vendor-first) → &amp;#039;&amp;#039;&amp;#039;menemukan&amp;#039;&amp;#039;&amp;#039; Adreno.&lt;br /&gt;
* &amp;lt;code&amp;gt;clinfo&amp;lt;/code&amp;gt; dengan &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; di depan → &amp;#039;&amp;#039;&amp;#039;0 platform&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Penyebab ===&lt;br /&gt;
&lt;br /&gt;
Ini inti persoalannya. Demi libc++ (Masalah 2), program C++ menaruh &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;paling depan&amp;#039;&amp;#039;&amp;#039; di &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt;. Akibatnya &amp;lt;code&amp;gt;libOpenCL.so&amp;lt;/code&amp;gt; yang termuat adalah &amp;#039;&amp;#039;&amp;#039;loader ocl-icd&amp;#039;&amp;#039;&amp;#039; (di &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt;), bukan driver vendor.&lt;br /&gt;
&lt;br /&gt;
Masalahnya: driver Adreno &amp;lt;code&amp;gt;/vendor/lib64/libOpenCL.so&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;bukan driver ICD yang patuh&amp;#039;&amp;#039;&amp;#039; — ia adalah implementasi OpenCL lengkap yang berdiri sendiri, tetapi &amp;#039;&amp;#039;&amp;#039;tidak meng-export entry point ICD&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;clIcdGetPlatformIDsKHR&amp;lt;/code&amp;gt;) yang dipakai loader untuk meng-enumerasi platform. Maka:&lt;br /&gt;
&lt;br /&gt;
* Lewat &amp;#039;&amp;#039;&amp;#039;loader&amp;#039;&amp;#039;&amp;#039; (saat &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; di depan) → loader bisa memuat driver tapi &amp;#039;&amp;#039;&amp;#039;tidak bisa enumerate&amp;#039;&amp;#039;&amp;#039; → 0 platform.&lt;br /&gt;
* Dimuat &amp;#039;&amp;#039;&amp;#039;langsung&amp;#039;&amp;#039;&amp;#039; (saat &amp;lt;code&amp;gt;/vendor/lib64&amp;lt;/code&amp;gt; di depan) → berhasil, karena fungsi &amp;lt;code&amp;gt;clGetPlatformIDs&amp;lt;/code&amp;gt; dipanggil langsung ke driver vendor.&lt;br /&gt;
&lt;br /&gt;
Jadi driver model ini &amp;#039;&amp;#039;&amp;#039;harus dimuat langsung&amp;#039;&amp;#039;&amp;#039;, bukan lewat loader. Tetapi itu berbenturan dengan kebutuhan libc++ Termux yang menuntut &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; di depan.&lt;br /&gt;
&lt;br /&gt;
=== Solusi ===&lt;br /&gt;
&lt;br /&gt;
Muat driver vendor langsung (vendor-first) &amp;#039;&amp;#039;&amp;#039;dan&amp;#039;&amp;#039;&amp;#039; paksa libc++ Termux lewat &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64:$PREFIX/lib \&lt;br /&gt;
LD_PRELOAD=$PREFIX/lib/libc++_shared.so \&lt;br /&gt;
  mpirun --oversubscribe --mca hwloc_base_binding_policy none --mca btl tcp,self \&lt;br /&gt;
  -np 4 ./app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cara kerjanya:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/vendor/lib64&amp;lt;/code&amp;gt; di depan → &amp;lt;code&amp;gt;libOpenCL.so&amp;lt;/code&amp;gt; menyangkut ke driver Adreno langsung → platform ketemu.&lt;br /&gt;
* &amp;lt;code&amp;gt;$PREFIX/lib&amp;lt;/code&amp;gt; di paling belakang → cadangan untuk library Termux lain (mis. &amp;lt;code&amp;gt;libmpi.so&amp;lt;/code&amp;gt;), yang juga ditemukan lewat RUNPATH binary.&lt;br /&gt;
* &amp;lt;code&amp;gt;LD_PRELOAD=$PREFIX/lib/libc++_shared.so&amp;lt;/code&amp;gt; → memaksa libc++ Termux (&amp;lt;code&amp;gt;__ndk1&amp;lt;/code&amp;gt;) dimuat lebih dulu, sehingga simbol C++ program ter-resolve dengan benar (mencegah crash &amp;lt;code&amp;gt;__ndk1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Catatan:&amp;#039;&amp;#039;&amp;#039; cara ini bekerja selama driver vendor memakai &amp;lt;code&amp;gt;libc++.so&amp;lt;/code&amp;gt; (platform, soname berbeda) dan/atau tidak meng-link &amp;lt;code&amp;gt;libc++_shared.so&amp;lt;/code&amp;gt; secara dinamis. Untuk mengecek dependensi driver:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
readelf -d /vendor/lib64/libOpenCL.so | grep NEEDED&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jika di sana muncul &amp;lt;code&amp;gt;libc++_shared.so&amp;lt;/code&amp;gt; (akan bentrok dengan preload), alternatifnya adalah &amp;#039;&amp;#039;&amp;#039;static-link libc++&amp;#039;&amp;#039;&amp;#039; ke binary (tambah &amp;lt;code&amp;gt;-static-libstdc++&amp;lt;/code&amp;gt; di kompilasi) sehingga binary tidak butuh libc++ shared sama sekali, lalu &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt; bisa dilepas.&lt;br /&gt;
&lt;br /&gt;
== Konfigurasi runtime final ==&lt;br /&gt;
&lt;br /&gt;
Ringkasan resep yang terbukti bekerja end-to-end:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Build&amp;#039;&amp;#039;&amp;#039; (libc++ Termux, &amp;lt;code&amp;gt;LD_LIBRARY_PATH&amp;lt;/code&amp;gt; dibuang):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
env -u LD_LIBRARY_PATH cmake -S . -B build -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
env -u LD_LIBRARY_PATH cmake --build build -j&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Cek GPU&amp;#039;&amp;#039;&amp;#039; (driver vendor langsung):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64:$PREFIX/lib \&lt;br /&gt;
  clinfo | head -n 25&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Run&amp;#039;&amp;#039;&amp;#039; (driver vendor langsung + libc++ Termux + binding hwloc dimatikan):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LD_LIBRARY_PATH=/vendor/lib64:/system/vendor/lib64:/system/lib64:$PREFIX/lib \&lt;br /&gt;
LD_PRELOAD=$PREFIX/lib/libc++_shared.so \&lt;br /&gt;
TMPDIR=$PREFIX/tmp \&lt;br /&gt;
  mpirun --oversubscribe --mca hwloc_base_binding_policy none --mca btl tcp,self \&lt;br /&gt;
  -np 4 ./build/app &amp;lt;arg...&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tiga prinsip kunci:&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Build pakai env bersih&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;env -u LD_LIBRARY_PATH&amp;lt;/code&amp;gt;), &amp;#039;&amp;#039;&amp;#039;run pakai env vendor&amp;#039;&amp;#039;&amp;#039; — jangan dicampur, jangan di-global.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;OpenCL&amp;#039;&amp;#039;&amp;#039;: muat driver vendor &amp;#039;&amp;#039;&amp;#039;langsung&amp;#039;&amp;#039;&amp;#039; (vendor-first), karena driver Adreno bukan ICD-compliant.&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;C++ + vendor-first&amp;#039;&amp;#039;&amp;#039;: pakai &amp;lt;code&amp;gt;LD_PRELOAD&amp;lt;/code&amp;gt; libc++ Termux supaya tidak bentrok namespace.&lt;br /&gt;
&lt;br /&gt;
== Catatan ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;quot;Max clock 1 MHz&amp;quot; dan &amp;quot;1 compute unit&amp;quot;&amp;#039;&amp;#039;&amp;#039; yang dilaporkan device &amp;#039;&amp;#039;&amp;#039;bukan error/bug kode&amp;#039;&amp;#039;&amp;#039; — driver Adreno memang sering melaporkan &amp;lt;code&amp;gt;CL_DEVICE_MAX_CLOCK_FREQUENCY&amp;lt;/code&amp;gt; dengan nilai placeholder, dan Adreno meng-expose 1 &amp;#039;&amp;#039;compute unit&amp;#039;&amp;#039; ke OpenCL (normal untuk arsitekturnya). Kernel tetap berjalan paralel di banyak ALU di dalamnya.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Paralelisme&amp;#039;&amp;#039;&amp;#039;: dengan hanya &amp;#039;&amp;#039;&amp;#039;1 GPU&amp;#039;&amp;#039;&amp;#039;, menjalankan banyak rank MPI tidak mempercepat sisi GPU — rangkaian kernel dari tiap rank di-&amp;#039;&amp;#039;serialize&amp;#039;&amp;#039; oleh driver pada GPU yang sama. Sisi CPU (generate data, verifikasi, reduksi) tetap paralel. Paralelisme GPU nyata baru tercapai bila ada &amp;#039;&amp;#039;&amp;#039;beberapa GPU&amp;#039;&amp;#039;&amp;#039; (mis. cluster beberapa perangkat Android via MPI/TCP), satu rank per GPU.&lt;br /&gt;
* &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; Termux = &amp;lt;code&amp;gt;/data/data/com.termux/files/usr&amp;lt;/code&amp;gt;. Variabel &amp;lt;code&amp;gt;$PREFIX&amp;lt;/code&amp;gt; sudah otomatis ter-set di Termux.&lt;br /&gt;
&lt;br /&gt;
== Lihat pula ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/OCL-dev/ocl-icd ocl-icd] — OpenCL ICD loader&lt;br /&gt;
* [https://www.open-mpi.org/ Open MPI]&lt;br /&gt;
* [https://github.com/KhronosGroup/OpenCL-CLHPP OpenCL-CLHPP] — C++ bindings&lt;br /&gt;
* [https://registry.khronos.org/OpenCL/ Spesifikasi OpenCL (Khronos)]&lt;/div&gt;</summary>
		<author><name>SanzSkuy</name></author>
	</entry>
</feed>