2014-10-08 79 views
0

我需要在我的render脚本根方法中处理一些数据的大型数据缓冲区。例如,用于存储临时值的大型浮点数组。出于这个原因,我只在堆栈上放了一个大数组。这工作正常,只要数据缓冲区不会变得太大android renderscript堆栈大小太小

我的每个根调用都需要自己的缓冲区来执行计算。如果我正确地得到它,根方法可以并行运行,所以它不可能从java分配这个缓冲区,因为这将在所有正在运行的根方法之间共享,对吧?

任何想法如何分配或访问根方法中的本地数据缓冲区?还是不可能?

可用大小接缝的大小取决于设备/ Android版本。有没有办法在当前设备上获取堆栈大小?

(是它可能能够进一步分割作业,使之需要较少的缓冲空间,但将彻底改变当前运行的算法,我会先尝试寻找另一种解决方案。)

回答

0

的renderScript不支持在脚本本身内分配内存。它全部由Java(或NDK)方面管理和绑定。

+0

任何解决方法?例如,在java中我可以分配一大块内存,足够容纳所有根方法作业的所有缓冲区。然后,将该块的非重叠部分分配给每个根作业(通过将块偏移量作为另一个参数传递)。但是,根据计算结果(以及我的情况),由于有很多根呼叫,块将会非常大。 – Clemens 2014-10-08 19:52:54

+0

没有看到一个具体的例子就很难说,但我认为你在正确的轨道上。您的代码中使用您的根的坐标参数可能暗示“分配”。例如,如果'Allocation'是1D,那么可以使用'x'值来抵消绑定到根的大块RAM,并将该空间用作临时区域。你不能在每次根调用时都推送一个偏移量,因为这些都是在幕后完成的,所以你必须像这样派生它。 – 2014-10-08 20:10:02

+0

是的我已经使用in参数来告诉根函数做什么。从这些信息中,我也可以得出缓冲区的位置......以防有人对代码感兴趣:https://github.com/czeidler/Lablet/tree/master/src/nz/ac/auckland/lablet /麦克风(fft.rs和Fourier.java) – Clemens 2014-10-08 20:50:50