我在 android 中有一个如下所示的函数,它有点慢,是我的实时应用程序的瓶颈。我正在考虑以某种方式使其更快,也许通过 gpu 或任何可能的方法。有哪些方法可以使用并行化使其更快、更高效?
private int[] getArray (ByteBuffer byteBuffer) {
int[] array = new int[width * height];
FloatBuffer fb = byteBuffer.asFloatBuffer();
for (int i = 0; i < width* height; i++) {
float probability = 1 - floatBuffer.get();
if (probability > 0.9) {
array[i] = originalBuffer[i];
}
}
return array;
}
上下文用于分割任务。基本上,ml 模型在字节缓冲区中返回一个掩码。我将它传递给这个函数以使背景变成粉红色。在此仅供参考。
正确答案
(评论太长)但是你可以轻松做到:替换
float probability = 1 - floatbuffer.get();
if (probability > 0.9) {
由
if (floatbuffer.get() < 0.1) {
而且:老实说,我不知道编译器是否编写了一个机器代码来计算 width*height 在每个循环中计算中止标准(我希望/认为不是) >)。但尝试一下:添加该行
立即学习“Java免费学习笔记(深入)”;
int product = width*height; int[] array = new int[product];
然后设置
for (int i = 0; i < product; i++) {
这样,你就消除了循环中的所有算术运算(除了必不可少的 i++ 和 )。










