gpt4 book ai didi

java - 在 RenderScript 中增加计数变量

转载 作者:行者123 更新时间:2023-11-29 19:26:30 24 4
gpt4 key购买 nike

我想使用以下 RenderScript 代码计算位图的像素

渲染脚本

文件名:counter.rs

#pragma version(1)
#pragma rs java_package_name(com.mypackage)
#pragma rs_fp_relaxed

uint count; // initialized in Java
void countPixels(uchar4* unused, uint x, uint y) {
rsAtomicInc(&count);
}

Java

Application context = ...; // The application context
RenderScript rs = RenderScript.create(applicationContext);

Bitmap bitmap = ...; // A random bitmap
Allocation allocation = Allocation.createFromBitmap(rs, bitmap);

ScriptC_Counter script = new ScriptC_Counter(rs);
script.set_count(0);
script.forEach_countPixels(allocation);

allocation.syncAll(Allocation.USAGE_SCRIPT);
long count = script.get_count();

错误

这是我收到的错误信息:

ERROR: Address not found for count

问题

  • 为什么我的代码不起作用?
  • 我该如何解决?

链接

最佳答案

附带说明一下,除非迫不得已,否则在并行计算中使用原子操作通常不是一个好习惯。 RenderScript 实际上提供了 reduction kernel对于这种应用。也许您可以尝试一下。

代码有几个问题:

  1. 变量“count”应该声明为“volatile”
  2. countPixels 应该是“void RS_KERNEL countPixels(uchar4 in)”
  3. script.get_count() 不会为您提供“计数”的最新值,您必须通过分配取回该值。

如果您必须使用 rsAtomicInc,一个很好的例子实际上是 RenderScript CTS 测试:

AtomicTest.rs

AtomicTest.java

关于java - 在 RenderScript 中增加计数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41288051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com