1

RenderScript を 2 台の電話で実行しようとしました。1 台は 2 GHz Intel Atom Z2580 CPU デュアル コアを搭載し、もう 1 台は 2.2 GHz Qualcomm Snapdragon 800 CPU クアッド コアを搭載しています。RenderScript を使用すると、両方のデバイスでプログラムを並行して実行できましたが、同じプログラムの絶対的なパフォーマンスが両方のデバイスで大きく異なることがわかりました。次の実験を行いました。

  1. adb シェルで「setprop debug.rs.max-threads」を使用して、最大実行スレッドを 1 に制限します (1 コアのみを使用します)。
  2. RenderScript の ScriptIntrinsicYuvToRGB と ScriptIntrinsicBlur の両方を使用します。この 2 つの組み込み組み込み関数は、生の YUV カメラ データを処理し、ぼやけた画像を出力します。

組み込み関数はバイト コード レベルで高度に最適化されているはずですが、Qualcomm Snapdragon 800 は Intel Atom Z2580 よりもほぼ 5 ~ 6 倍高速に動作することがわかりました (どちらも実験では 1 コアのみを使用しました)。なぜそうなのかはわかりません。私の推測は次のとおりです。

私は別のテストをしました。ARM コンパイラを使用して、単純な NDK ベースの C コードをマシン コードにコンパイルしたところ、Intel CPU を搭載したデバイスでも動作することがわかりました。ただし、Intel コンパイラを使用して同じコードをコンパイルすると、同じデバイスで大幅な速度向上 (3 倍から 4 倍) が見られました。デバイスの libbcc コンパイラが Intel CPU ベースのデバイスの renderscript バイト コードに対して何を行うかがわからないため、実行時に間違った (または不適切な) コンパイル ターゲットが原因でパフォーマンスが低下する可能性がありますか?

これが正しい場合、RenderScript 用の Intel x86 CPU ベースのデバイス用のランタイム コンパイラを選択する方法はありますか?

4

1 に答える 1