无法在BigInteger中使用jdk.incubator.vector类

时间:2019-03-03 20:01:35

标签: java vectorization simd project-panama

我正在尝试使用Panama项目中的Java Vector API将一些SIMD代码添加到java.math.BigInteger类中。我克隆了巴拿马仓库,并建立了一个JDK:

hg clone http://hg.openjdk.java.net/panama/dev/
cd dev/
hg checkout vectorIntrinsics
hg branch vectorIntrinsics
bash configure
make images

我能够编译并运行一个使用矢量API的简单小程序:

import static jdk.incubator.vector.Vector.Shape.S_256_BIT;
import jdk.incubator.vector.IntVector;
import static jdk.incubator.vector.IntVector.IntSpecies;

public class Panama {

    public static void main(String... args) {
        IntSpecies int256Species = (IntSpecies)IntSpecies.of(int.class, S_256_BIT);
        int[] arr = new int[] {1, 5, 0, 2, 8, -1, 4, 3};
        IntVector vec = IntVector.fromArray(int256Species, arr, 0);
        IntVector vec2 = vec.mul(vec);
        int[] arr2 = new int[8];
        vec2.intoArray(arr2, 0);
        System.out.println("x\tx²");
        System.out.println("-------------------");
        for (int i=0; i<8; i++)
            System.out.println(arr[i] + "\t" + arr2[i]);
    }
}

我用于编译和运行程序的命令是:

dev/build/linux-x86_64-server-release/jdk/bin/javac --add-modules=jdk.incubator.vector,java.base --patch-module java.base=src/ --add-reads java.base=jdk.incubator.vector src/Panama.java

dev/build/linux-x86_64-server-release/jdk/bin/java --add-modules=jdk.incubator.vector -cp src/ Panama

接下来,我想从JDK附带的源代码中将代码合并到BigInteger.java中。我只是将导入语句和main方法添加到BigInteger.java中。我编译了代码:

dev/build/linux-x86_64-server-release/jdk/bin/javac --add-reads java.base=jdk.incubator.vector --patch-module java.base=src/ --add-modules=jdk.incubator.vector src/java/math/BigInteger.java

当我尝试使用它运行时

dev/build/linux-x86_64-server-release/jdk/bin/java --add-reads java.base=jdk.incubator.vector --patch-module java.base=src/ --add-modules=jdk.incubator.vector --add-exports jdk.incubator.vector/jdk.incubator.vector=java.base -cp src/ java.math.BigInteger

我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: jdk/incubator/vector/Vector$Shape
    at java.base/java.math.BigInteger.main(BigInteger.java:4837)

第4837行以IntSpecies int256Species = ....开头

因此,似乎java.base模块无法访问jdk.incubator.vector模块。请注意,jdk.incubator.vector是Panama JDK的一部分。

我的问题是,即使我允许使用java.basejdk.incubator.vector选项从--add-exports--add-reads进行访问,为什么也会出现此错误?我是否需要提供其他选择,以便可以在jdk.incubator.vector中使用BigInteger类?

编辑:添加hg checkouthg branch

编辑^ 2:自从我两周前克隆回购协议以来,Panama API发生了变化。代码已更新,因此可以再次编译。

0 个答案:

没有答案