Не могу использовать классы jdk.incubator.vector в BigInteger
Я пытаюсь использовать 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
Далее я хотел включить код в BigInteger.java
из источников, которые идут с JDK. Я просто добавил операторы импорта и метод 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
является частью Панамы JDK.
У меня вопрос, почему я получаю эту ошибку, хотя я разрешил доступ от java.base
в jdk.incubator.vector
с использованием --add-exports
а также --add-reads
опции? Есть ли другой вариант, мне нужно дать его, чтобы я мог использовать jdk.incubator.vector
занятия в BigInteger
?
Редактировать: добавить hg checkout
а также hg branch
Редактировать ^2: Панамский API изменился, так как я клонировал репо две недели назад. Код был обновлен, поэтому он снова компилируется.