在java中有一个API叫做VectorApi。它使得在单个 CPU 周期内对整个 float[] 数组进行算术运算成为可能。
例如:
FloatVector fv = FloatVector.fromArray(SPECIES, new float[]{1, 2, 3, 4, 5, 6, 7}, 0);
//multiplies the wohle array in a single cycle by 2 (if the CPU supports this)
fv.mul(2f);
现在我想计算 1f / FloatVector 的结果。现在我这样做
fv.pow(-1f);
我认为这可能是一个缓慢的操作。有更好的方法吗?
我让这段代码在 Intel 架构 Windows 笔记本电脑上运行(jshell,所以没有类)
import jdk.incubator.vector.FloatVector;
import jdk.incubator.vector.VectorSpecies;
VectorSpecies SPECIES = FloatVector.SPECIES_256;
FloatVector ONE = FloatVector.zero(SPECIES).add(1f);
FloatVector fv = FloatVector.fromArray(SPECIES, new float[]{1, 2, 3, 4, 5, 6, 7, 8}, 0);
fv.pow(-1f);
ONE.div(fv); // gives the same result as the above pow operation
我没有进行任何性能测量,因为它们可能也依赖于平台,但由于您可以将
ONE
定义为常量,并且不必将构造和添加视为耗时的操作,因此您可以自己进行操作以找出答案如果 ONE.div(fv)
的表现优于 fv.pow(-1f);