1

320x240のストリームランタイムでボールを検出するプログラムがありますが、より大きな解像度をストリーミングすると、速度が遅くなります。GPUを使用して各ピクセル(隣接するフレームと隣接するピクセルを含む)を計算できれば、より高速になると思います。AGALを使用してGPUからデータを取り戻すことができるかどうか誰かが知っていますか?

並べ替えると、フレームの各ピクセルを通過するループが以下にあります。パフォーマンスを向上させるために、GPUで最も多く計算したいと思います。

for(var i:int=cv.length-1; i>1;i--){
                if( (110*255) < (cv[i] & 0x0000FF00) && (cv[i] & 0x0000FF00) < (150*255)){ //i zöld
                    if(  (cv[i+2] & 0x0000FF00) > (150*255) ) { //i+2 világos
                        if(floodhere(cv, i+2)){ //méret nagy
                            prevDiff[i]=0xffffffff; //fehér
                            close.push(i);
                        }
                        else prevDiff[i]=0xffff0000 //méret kicsi -> piros
                    } else {
                        prevDiff[i]=0xff000055 //kék
                    }
                } else {
                    prevDiff[i]=0xff000000 //fekete
                }
            }
4

3 に答える 3

2

AGALを使用して、GPUで高速計算を行うことができますが、制限に注意してください。これは大まかに次のようになり
ます。データをテクスチャ(an * m行列)としてアップロードする必要があります。1つのデータポイントは3x8ビット値です。あらゆる種類のビッグデータをGPUにアップロードするのは遅いため、すべてのフレームでアップロードする必要はありません。テクスチャをActionscriptに戻すのも遅いです。
GPUのグローバル可変メモリにデータをアップロードできます(ただし、限られた量のみ)

GPUは、このマトリックス上のすべての要素でAGALプログラムを並列に実行し、出力もn*mマトリックスになります。
すべてのプログラムインスタンスは、その座標、グローバル変数、およびアップロードされた行列の3つにアクセスできます。プログラムの出力は、同じ位置の出力マトリックスに書き込まれます。複数のプログラムを作成する場合、はこの出力マトリックスにすばやくアクセスできますが、(actionscript操作のために)通常のメモリに戻すのは遅くなります。

AGALプログラムは、Actionscriptと比較して非常に制限されています
。256命令。
-ループ、関数、クラスはありません。数学演算子と条件文(「if-else」)しかありません。
-グローバルメモリに書き込めません

于 2013-05-17T00:00:50.037 に答える
1

PixelBenderを使用できる場合があります。また、別々のスレッドで動作し、マルチコアCPUを使用するため、actionscriptよりもはるかに高速です。

例については、http://www.flashmagazine.com/tutorials/detail/using_pixel_bender_to_calculate_information/を参照してください。

于 2013-01-02T03:40:22.067 に答える
0

データを取り戻す方法はありません。あなたは色を取り戻すことができるだけです。さらに、actionscriptでピクセルの色を取得するには、データをテクスチャからビットマップデータにコピーする必要がありますが、これは非常に低速です。

于 2013-01-01T12:32:28.903 に答える