我是RenderScript
的完美菜鸟,我刚开始玩,我设法并行处理一些算法,但我真的没有正确使用它。
这是java代码:
Allocation input = Allocation.createSized(renderScript, Element.I32(renderScript), some_input_image.length); // where renderScript is an instance of RenderScript
input.copyFrom(some_input_image);
Allocation output = Allocation.createSized(renderScript, Element.I32(renderScript), image.length);
output.copyFrom(some_image);
scriptC_algo.bind_output(output);
scriptC_algo.invoke_process(input,output);
和RenderScript
代码
uint32_t *input;
uint32_t *output;
void RS_KERNEL algo(uint32_t in, uint32_t out) {
rsAtomicInc(&counter);
// some code
}
void process(rs_allocation input, rs_allocation output) {
rsForEach(algo, input, output);
}
我认为我需要在algo
函数中获取与读取的input
或output
值相关的索引。但是,我无法使用counter
,因为我注意到阅读input
或output
的索引不是增加的顺序。有人知道怎么做吗?
答案 0 :(得分:0)
你的内核应该是这样的:
#pragma rs_fp_relaxed
uint32_t RS_KERNEL algo(uint32_t in, uint32_t x) {
// << x will be the location of 'in' and 'out' element
return in; // write input to output
}
另外,糟糕的想法是拥有输入/输出变量的全局/本地版本并避免使用bind api。使用全局rs_allocation对象和rsGetElement _ * / rsSetElementAt_ * apis。