0

レンダリングスクリプトでは、バインドされたポインタを使用して大きなイメージを反復処理しています。 問題は配列アクセスのパフォーマンスにあります。例えばレンダスクリプトのCスタイルのポインタ使用パフォーマンスの問題

... 
for(int i=0; i < channels; i++) { 
    sum += (input[i*input_size]) * mulValue; 
} 
... 

、input_sizeが12288であるときには、スクリプトを完了するまでに1.5秒かかりますが、input_sizeが12280であるとき、それは〜0.5秒かかります。

このようなミステリー現象を引き起こす原因は何ですか?

+0

範囲外にアクセスしていないことを確認します。また、バインドされたポインタにrsGetElementAt_ *関数を使用することをお勧めします。 – sakridge

+0

@sakridge配列が大きすぎますが、範囲外にアクセスしていません。これはキャッシングの結果ですか? – Vardan95

+0

できます。そのサイズによって、アルゴリズムがキャッシュレベルの1つを超えてしまうことがあります。もう一つは、より遅いサイズがより整列しているため、より多くの銀行の競合が発生する可能性がありますが、3倍の差は過剰と思われます。さまざまなサイズの掃除を試すことができますか? – sakridge

答えて

1

RenderScript(またはopenCL)で書く内容がパフォーマンスに与える影響を理解することは複雑です。

RendersScriptで書いても、パフォーマンスが保証されるわけではありません。 多くの場合、メモリアクセスが跳ね上がるとキャッシュの一貫性の問題が発生します。

コードは、キャッシュフレンドリーな方法で処理する一連のカーネルとして構造化することがよくあります。

申し訳ありませんが、これはあいまいです。あなたはクエストに十分な詳細がありません。