0

OpenCL現在、 GPU パイプラインが提示されるプロジェクトに取り組んでいます。のプロジェクトですAndroid OS

当分の間、特定の Qualcomm プロセッサに関して、パフォーマンスに問題が発生しています。通常、GPU パイプラインは で実行されます9-11 msが、実行時間が最大40-50 ms.

私は考えられる 2 つの問題に対処する必要があると判断しました。メモリ アクセス (デフォルトでシステムによってバッファができるだけアンロードされないようにするため) とカーネル オーバーヘッドです。

その問題を解決するためにtask parallelism、機能であるに目を向けましたOpenCL 2.0。基本的に、GPU レベルで新しいカーネルを使用してキューをロードできるようになり、一連の作業をより厳密かつ効率的にするのに役立ちます。

それがどのように機能するかをテストするためだけに、非常に簡単な例を書きました。

__kernel void child_kernel(__global const int* buff) {
       buff[get_global_id(0)] = get_global_id(1);
}

__kernel void parent_kernel(__global const int* buff) {

            size_t offset[] = {1, 1};
            size_t work_size[] = {100, 50};
            ndrange_t testRange = ndrange_2D(offset, work_size);

            void (^operation)(void) = ^{
                child_kernel(buff);
            };

            enqueue_kernel(get_default_queue(),
                           CLK_ENQUEUE_FLAGS_WAIT_KERNEL,
                           testRange,
                           operation);
        }

残念ながら、この単純な例は機能しません。私のbuffにはまだゼロが含まれており、何も入っていません。だから私の質問は - 私はここで何か間違ったことをしていますか? タスクの並列処理は Android フォンでサポートされていますか? サポートされているかどうかを確認するにはどうすればよいですか?

どんな助けでも大歓迎です。ご清聴ありがとうございました!

4

0 に答える 0