java - 可以加速这个java代码吗?

标签 java optimization

我在 Android 应用程序中有一些代码,当我分析我的应用程序时,它占用了大部分时间。我已经尝试对其进行优化,但仍然占用了大部分 CPU 时间。我想知道是否有人对如何加快速度有任何想法。这是我使用的代码的精简版本:

输入:
d 是 float 数组
a 是 float 数组
e 是 float 数组

输出:
out 是一个包含 3 个 float 的数组

代码:

float [] c=new float[3];
float [] b=new float[3];
float [] out=new float[3];

c[0] = a[0] - d[0 * 4 + 3];
c[1] = a[1] - d[1 * 4 + 3];
c[2] = a[2] - d[2 * 4 + 3];

b[0] = c[0]*d[0 * 4 + 0] + c[1]*d[1 * 4 + 0] + c[2]*d[2 * 4 + 0];
b[1] = c[0]*d[0 * 4 + 1] + c[1]*d[1 * 4 + 1] + c[2]*d[2 * 4 + 1];
b[2] = c[0]*d[0 * 4 + 2] + c[1]*d[1 * 4 + 2] + c[2]*d[2 * 4 + 2];           

out[0] = b[0] * e[0 * 4 + 0] + b[1] * e[0 * 4 + 1] + b[2] * e[0 * 4 + 2] + e[0 * 4 + 3];
out[1] = b[0] * e[1 * 4 + 0] + b[1] * e[1 * 4 + 1] + b[2] * e[1 * 4 + 2] + e[1 * 4 + 3];
out[2] = b[0] * e[2 * 4 + 0] + b[1] * e[2 * 4 + 1] + b[2] * e[2 * 4 + 2] + e[2 * 4 + 3];

对于那些对 3D 模型动画的顶点变换感兴趣的人。 “out”是变换后的顶点,“a”是原始顶点。其余数组为骨骼关节信息。

最佳答案

其余代码的作用是什么?这看起来像是一小段代码,因此它的执行速度应该非常快。您是否确实存在性能问题,或者您是否试图让您的程序完全不消耗 CPU?

也就是说,您可以简单地预先计算所有这些琐碎的算术运算:

c[0] = a[0] - d[3];
c[1] = a[1] - d[7];
c[2] = a[2] - d[11];

等等

我不明白如何访问 d[3]d[7]d[11],因为d 应该是一个包含 3 个元素的数组。

关于java - 可以加速这个java代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128819/

相关文章:

java - 为什么不应将 Java 的异常处理语句视为非本地分支的通用机制?

针对 SIMD : Making an SoA less of a PiTA 的 C++ 设计

python - 如何告诉 cvxpy 如何对目标函数中矩阵的值求和?

c++ - 如何使用 SSE 或 GLSL 优化 "u[0]*v[0] + u[2]*v[2]"代码行

c++ - 不必要的 else 语句 : Is there any disadvantage to using ELSE IF when just IF can be used?

java - Android 中的运行时类是什么?

java - ANTLR4如何根据规则改变隐藏字符?

java - 如何使 int 在随机生成时不被使用两次?

java - PHP 在大迭代中速度缓慢

php - 单个返回语句与多个?