我可以使用AS3 Stage3D AGAL来实现CUDA处理吗?

时间:2012-12-31 16:32:11

标签: actionscript-3 flash flex stage3d agal

我有一个在320x240流运行时检测球的程序,但是如果我传输更大的分辨率,它会变得太慢。我假设如果我可以使用GPU来计算每个像素(使用它们的相邻帧和neigbor像素),它会更快。任何人都知道我是否可以通过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
                }
            }

3 个答案:

答案 0 :(得分:2)

您可以使用AGAL在GPU上进行快速计算,只需了解限制即可。 它大致如下:
您需要将数据上传为纹理(n * m矩阵),一个数据点是3x8位值。将任何类型的大数据上传到GPU都很慢,因此您不应该在每一帧中都这样做。将纹理恢复到Actionscript也很慢 您可以将数据上传到GPU到其全局变量内存(但数量有限)

GPU将在此矩阵的每个元素上并行运行AGAL程序,输出也将是一个n * m矩阵。
每个程序实例都可以访问3个东西:它的坐标,全局变量和上传的矩阵。程序的输出将写入输出矩阵到同一位置。如果您编写多个程序,可以快速访问此输出矩阵,但将其恢复到正常内存(用于操作脚本操作)的速度很慢。

与Actionscript相比,AGAL程序非常有限:
- 最大256条指令。
- 没有循环,函数,类。你只有数学运算符和条件(“if-else”) - 无法写入全局内存

答案 1 :(得分:1)

您可以使用PixelBender。它也适用于单独的线程,并使用多核CPU,因此比动作脚本快得多。

请参阅http://www.flashmagazine.com/tutorials/detail/using_pixel_bender_to_calculate_information/以获取示例

答案 2 :(得分:0)

无法获取数据。你只能回颜色。此外,要在动作脚本中获取像素颜色,您应该将数据从纹理复制到位图数据,因为VEEEERY很慢。