2017-12-30 64 views
2

具体的には、OpenCL/RenderscriptコードをAndroidエミュレータで実行したいのですが、実際にはCPUの代わりにコンピュータのGPUで実行されます。不運にも私はAMD CPUとGPUを使用しています。GPGPU Androidエミュレータ(Renderscript/OpenCL)

私は、AMDがOpenGL ESをサポートしていることを知っています(そして、すべてがOpenCLをかなりサポートしています)がSDKを介していますが、これまでのところ私が得た限りではありません - エミュレータに関するOpenCL /いずれも動作しないか、Intel CPUがあれば、OpenCLをエミュレータにインストールすることができますが、CPUを使用するだけです(そして、真面目な私のエミュレータは、 OpenCVは問題なく実行されますが、OpenCL-ZにはOpenCLのサポートはないと言われています)。

エミュレータからOSにコマンドを送信して自動的に実行する方法はありますか?私が思いついた唯一の方法は、私が2つのエミュレータインスタンスを実行しているので、高速(またはハードドライブには良い)ではないテキストファイルを保存して読み込むことです。

公式エミュレータではRenderScriptがサポートされているとのことが分かりましたが、エミュレータは私の使用目的ではなく、GPUを使用することを強く疑っています。

Bluestacks 3は2つのインスタンスを実行するときに2つのリソースを使用し、何らかの理由で2番目のインスタンスがadbコマンド/ rootでうまく動作しないため、現時点でMemuを使用しています。何でもする。より速いエミュレータが2つのインスタンスを実行する場合に役立つと確信していますが、奇妙なことにそれらを比較することは困難で時間がかかります(特に、それぞれが「いいえ、私は一番速いですバーグラフ!笑)、究極的に私の問題はOpenCVでGPUアクセラレーションを得られないと信じている(私の電話ではるかに速く走るので)エミュレータのベース速度ではない。

私は、AMDの仮想化機能を有効にして(Leomoonまたはw/eで確認済み)、Memuのマネージャで有効にしています。多分これは既に舞台裏で働いていますか?いずれにしても、OpenCVのプレイが始まると、エミュレーションコストはインスタンスごとに10%増加します(60から80%+になります)。

答えて

0

言語(Pythonなど)を使用し、ADB経由でコマンドを送信します。 PythonはOpenCLとOpenCVにフックできます。 ADBを使用してスクリーンショット用のFramebufferを取得するか、Pythonはエミュレータのウィンドウレンダリングをキャプチャすることができます。

また、SocketIO(私のケースではFlask Socket IOとJavascriptのクライアントソケットIO)を使用して接続することができ、そのように通信できます。エミュレータと実際のデバイスのブラウザで確認します。すべてのエミュレータにはネイティブOSと通信するためのポートがあります。私は最終的には、このルートを少し複雑な(2つのサーバー、異なる言語、LAN上のADBよりも優れている)ようにしないことを選択しましたが、それはオプションです。 Java(iirc)もSocketIOをうまく使いこなしており、言語に精通していて、Androidデバイスでネイティブにいくつかのことを実行したいと考えている多くの開発者にとってはまともな選択肢になるでしょう。

現実的に気分が悪く、電話で入力しているので、現在の例と援助が不足していることを謝ります。うまくいけば、私はこれに対処する時間をキャッチすることができますが、率直に言って、私が現在目指しているものの外にこれについてのユースケースはほとんどなく、それはかなりニッチです。