Java Vector Api 比较两个向量

问题描述 投票:0回答:1

为什么使用 Java 21(孵化器)中的 Java Vector API,我比较两个向量并将结果复制到数组中。它会出现异常:

java.lang.IndexOutOfBoundsException: Index 4 out of bounds for length 2
没有接受掩码的方法:
v3.intoArray(result, i, mask);
。 如何使用向量 api 比较数组并将结果复制到另一个数组?

      int[] a1 = new int[] {1, 2, 3, 4, 5};
      int[] a2 = new int[] {1, 2, 3, 4, 5};
      boolean[] result = new boolean[] {false, false, false, false, false};
        
      var species = IntVector.SPECIES_PREFERRED;
      for (int i = 0; i < a1.length; i += species.length()) {
        var mask = species.indexInRange(i, a1.length);
        var v1 = IntVector.fromArray(species, a1, i, mask);
        var v2 = IntVector.fromArray(species, a2, i, mask);
        VectorMask<Integer> v3 = v1.eq(v2);
        v3.intoArray(result, i)
        // v3.intoArray(result, i, mask); - no method wtih mask ! here exception
      }
java vector
1个回答
0
投票

您应该声明结果,以便它可以容纳species.length()的倍数。这将评估结果:

int[] a1 = new int[] {1, 2, 3, 4, 5};
int[] a2 = new int[] {1, 2, 3, 4, 5};
boolean[] result = new boolean[8];
    
var species = IntVector.SPECIES_PREFERRED;
for (int i = 0; i < a1.length; i += species.length()) {
    var mask = species.indexInRange(i, a1.length);
    var v1 = IntVector.fromArray(species, a1, i, mask);
    var v2 = IntVector.fromArray(species, a2, i, mask);
    VectorMask<Integer> v3 = v1.eq(v2);
    v3.intoArray(result, i);
}
System.out.println(Arrays.toString(Arrays.copyOf(result, a1.length)));
© www.soinside.com 2019 - 2024. All rights reserved.