答えは、AndroidのニーズはOpenCLが提供しようとしているものとは大きく異なるということです。
OpenCLは、CUDAで最初に導入された実行モデルを使用します。このモデルでは、カーネルは1つまたは複数のワーカーのグループで構成されており、各グループには、そのグループ内に高速共有メモリと同期プリミティブがあります。これにより、アルゴリズムの説明が、特定のアーキテクチャでそのアルゴリズムをスケジュールする方法と混ざり合うことになります(グループのサイズと、そのグループ内で同期するタイミングを決定しているため)。
これは、1つのアーキテクチャ用に作成していて、絶対的なピークパフォーマンスが必要な場合に最適ですが、パフォーマンスの移植性を犠牲にしてピークパフォーマンスを実現します。おそらくあなたのアーキテクチャでは、最高のパフォーマンスを得るためにグループあたり256ワーカーを実行するのに十分なレジスタと共有メモリがありますが、別のアーキテクチャでは、グループあたり128ワーカーを超えるもので大量のレジスタが流出し、80%のパフォーマンス低下が発生します。一方、コードはグループごとに256人のワーカー用に明示的に記述されているため、ランタイムは別のアーキテクチャの状況を改善するために何もできません。記述した内容に従わなければなりません。この種の状況は、GPUコンピューティングのデスクトップ/HPC側でアーキテクチャからアーキテクチャに移行するときによく見られます。
モバイルでは、Androidには、アーキテクチャが大きく異なる多くの異なるGPUベンダーとCPUベンダー間のパフォーマンスの移植性が必要です。AndroidがCUDAスタイルの実行モデルに依存している場合、単一のカーネルを作成して、さまざまなデバイスで許容できるように実行することはほとんど不可能です。
RenderScriptは、ピークパフォーマンスをいくらか犠牲にして、開発者から離れたスケジューリングの制御を抽象化します。ただし、RenderScriptで可能なことに関しては、常にギャップを埋めています。たとえば、Android 4.2で導入されたAPIであるScriptGroupは、GPUコード生成をさらに改善する計画の大きな部分を占めています。高速コードの記述をさらに簡単にする多くの新しい改善もあります。