Интерфейс VectorSpecies<E>
- Параметры типа:
E- упакованная версияETYPE, тип элемента вектора
public interface VectorSpecies<E>
ETYPE) и shape.- Примечание API:
- Код пользователя не должен реализовывать этот интерфейс. В будущей версии этот тип может ограничить реализации членством в одном пакете.
- Примечание реализации:
- Строковое представление экземпляра этого интерфейса будет иметь вид "Species[ETYPE, VLENGTH, SHAPE]", где
ETYPE- примитивный тип элемента,VLENGTH- количество элементов вектора, связанное с видом, аSHAPE- форма вектора, связанная с видом.Объекты вида вектора могут храниться в локальных переменных и параметрах, а также в качестве
static finalконстант, но хранение их в других полях Java или элементах массива, хотя и семантически допустимо, может повлечь за собой штрафные санкции по производительности.
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Vector |
broadcast |
Возвращает вектор заданного вида, где все элементы канала установлены в примитивное значение e. |
<F> VectorSpecies |
check |
Проверяет, что у этого вида есть указанный тип элемента, и возвращает этот вид без изменений. |
long |
checkValue |
Проверяет, что этот вид может представлять данное значение элемента, и возвращает значение без изменений. |
int |
elementSize() |
Возвращает размер канала в битах векторов этого вида. |
static int |
elementSize |
Возвращает размер в битах данного типа элемента вектора ( ETYPE). |
Class |
elementType() |
Возвращает примитивный тип элемента векторов этого вида. |
boolean |
equals |
Указывает, идентичен ли этот вид другому объекту. |
Vector |
fromArray |
Возвращает вектор этого вида, где элементы канала инициализируются из данного массива по указанному смещению. |
Vector |
fromMemorySegment |
Загружает вектор этого вида из сегмента памяти, начиная со смещения в сегменте памяти. |
int |
hashCode() |
Возвращает значение хэш-кода для вида, основанное на форме и типе элемента вектора. |
VectorMask |
indexInRange |
Возвращает маску этого вида, где установлены только каналы с индексом N, такие что откорректированный индекс N+offset находится в диапазоне [0..limit-1]. |
VectorMask |
indexInRange |
Возвращает маску этого вида, где установлены только каналы с индексом N, такие что откорректированный индекс N+offset находится в диапазоне [0..limit-1]. |
VectorShuffle |
iotaShuffle |
Создаёт перестановку, используя исходные индексы, установленные в последовательные значения, начиная с start и шагом step. |
int |
length() |
Возвращает количество каналов в векторе этого вида. |
VectorMask |
loadMask |
Возвращает маску этого вида, где элементы канала инициализируются из данного массива по указанному смещению. |
int |
loopBound |
Функция управления циклом, которая возвращает наибольшее кратное VLENGTH, которое меньше или равно заданному значению length. |
long |
loopBound |
Функция управления циклом, которая возвращает наибольшее кратное VLENGTH, которое меньше или равно заданному значению length. |
VectorMask |
maskAll |
Возвращает тип маски вектора для этого вида, где каждый канал устанавливается или сбрасывается в соответствии с заданным одиночным булевым значением, которое транслируется во все каналы. |
Class |
maskType() |
Возвращает тип маски вектора для этого вида. |
static <E> VectorSpecies |
of |
Находит вид для типа элемента и формы. |
static <E> VectorSpecies |
ofLargestShape |
Находит наибольший вид вектора заданного типа элемента. |
static <E> VectorSpecies |
ofPreferred |
Находит вид, предпочтительный для текущей платформы, для данного типа элемента вектора. |
int |
partLimit |
Принимая во внимание этот вид и второй, сообщает о чистом расширении или сокращении (возможно, изменяющего размер преобразования переинтерпретации или lane-wise conversion от этого вида ко второму. |
VectorShuffle |
shuffleFromArray |
Создает перестановку для этого вида из массива int, начиная со смещения. |
VectorShuffle |
shuffleFromOp |
Создает перестановку для этого вида из последовательных значений оператора, применённого к диапазону [0..VLENGTH-1]. |
VectorShuffle |
shuffleFromValues |
Создает перестановку для этого вида из ряда исходных индексов. |
String |
toString() |
Возвращает строку вида "Species[ETYPE, VLENGTH, SHAPE]", где ETYPE - примитивный тип элемента, VLENGTH - количество элементов вектора, связанное с видом, а
SHAPE - форма вектора, связанная с видом. |
int |
vectorBitSize() |
Возвращает общий размер вектора в битах для любого вектора этого вида. |
int |
vectorByteSize() |
Возвращает общий размер вектора в байтах для любого вектора этого вида. |
VectorShape |
vectorShape() |
Возвращает форму векторов, создаваемых этим видом. |
Class |
vectorType() |
Возвращает тип вектора этого вида. |
<F> VectorSpecies |
withLanes |
Находит вид с заданным типом элемента и той же формой, что и этот вид. |
VectorSpecies |
withShape |
Находит вид с заданной формой и тем же типом элемента, что и этот вид. |
Vector |
zero() |
Возвращает вектор этого вида, где все элементы канала установлены в значение по умолчанию для примитивного типа, (ETYPE)0. |
Подробное описание методов
elementType
Class<E> elementType()
- Возвращает:
- примитивный тип элемента (
ETYPE) - См. также:
vectorType
Class<? extends Vector<E>> vectorType()
- Возвращает:
- тип вектора данного вида
maskType
Class<? extends VectorMask<E>> maskType()
- Возвращает:
- тип маски
elementSize
int elementSize()
- Возвращает:
- размер элемента в битах
vectorShape
VectorShape vectorShape()
- Возвращает:
- форму векторов данного вида
length
int length()
- Примечание API:
- Это также количество дорожек в маске или перемещении, связанных с вектором данного вида.
- Возвращает:
- количество дорожек вектора
vectorBitSize
int vectorBitSize()
this.vectorShape().vectorBitSize().- Примечание API:
- Этот размер может отличаться от размера маски или перемещения этого вида в битах.
- Возвращает:
- общий размер вектора в битах
vectorByteSize
int vectorByteSize()
this.vectorShape().vectorBitSize() / Byte.SIZE.- Примечание API:
- Этот размер может отличаться от размера маски или перемещения этого вида в битах.
- Возвращает:
- общий размер вектора в байтах
loopBound
int loopBound(int length)
VLENGTH, которое меньше или равно заданному значению length. Здесь VLENGTH — результат this.length(), а length интерпретируется как количество дорожек. Результирующее значение R удовлетворяет этому неравенству: R <= length < R+VLENGTH
Конкретно, этот метод вычисляет length - floorMod(length, VLENGTH), где floorMod вычисляет остаток, округляя частное до минус бесконечности. Пока VLENGTH является степенью двойки, результат также равен length & ~(VLENGTH - 1).
- Параметры:
-
length- входная длина - Возвращает:
- наибольшее кратное длины вектора, не больше заданной длины
- Исключения:
-
IllegalArgumentException- еслиlengthотрицательное и результат переполнит положительное значение - См. также:
loopBound
long loopBound(long length)
VLENGTH, которое меньше или равно заданному значению length. Здесь VLENGTH — результат this.length(), а length интерпретируется как количество дорожек. Результирующее значение R удовлетворяет этому неравенству: R <= length < R+VLENGTH
Конкретно, этот метод вычисляет length - floorMod(length, VLENGTH), где floorMod вычисляет остаток, округляя частное до минус бесконечности. Пока VLENGTH является степенью двойки, результат также равен length & ~(VLENGTH - 1).
- Параметры:
-
length- входная длина - Возвращает:
- наибольшее кратное длины вектора, не больше заданной длины
- Исключения:
-
IllegalArgumentException- еслиlengthотрицательное и результат переполнит положительное значение - С:
- 19
- См. также:
indexInRange
VectorMask<E> indexInRange(int offset, int limit)
N+offset находится в диапазоне [0..limit-1]. Этот метод возвращает значение выражения maskAll(true).indexInRange(offset, limit)
- Параметры:
-
offset- начальный индекс -
limit- верхняя граница (исключительно) диапазона индексов - Возвращает:
- маска с не установленным индексом вне диапазона
- См. также:
indexInRange
VectorMask<E> indexInRange(long offset, long limit)
N+offset находится в диапазоне [0..limit-1]. Этот метод возвращает значение выражения maskAll(true).indexInRange(offset, limit)
- Параметры:
-
offset- начальный индекс -
limit- верхняя граница (исключительно) диапазона индексов - Возвращает:
- маска с не установленным индексом вне диапазона
- С:
- 19
- См. также:
check
<F> VectorSpecies<F> check(Class<F> elementType)
elementType == elementType()
? this
: throw new ClassCastException().- Параметрические типы:
F- упакованный тип элемента требуемого типа дорожки- Параметры:
-
elementType- требуемый тип дорожки - Возвращает:
- тот же вид
- Исключения:
-
ClassCastException- если у вида неверный тип элемента - См. также:
partLimit
int partLimit(VectorSpecies<?> outputSpecies, boolean lanewise)
lane-wise conversion из этого вида во второй. Знак и величина возвращаемого значения зависят от разницы размеров предлагаемых входных и выходных форм, а также (необязательно, если lanewise равно true) и от разницы размеров предлагаемых входных и выходных строк. - Сначала определяется логический размер результата. Если
lanewiseравно false, этот размер равен размеру входногоVSHAPE. Еслиlanewiseравно true, логический размер результата равен произведению размера входногоVLENGTHи размера выходногоETYPE. - Далее, логический размер результата сравнивается с размером предлагаемой выходной формы, чтобы увидеть, как он впишется.
- Если логический результат точно помещается в выходную форму, возвращаемое значение равно нулю, что указывает на отсутствие чистого расширения или сжатия.
- Если логический результат превышает выходную форму, возвращаемое значение равно отношению (больше единицы) логического размера результата к (меньшему) размеру выходной формы. Это отношение можно рассматривать как меру доли «утерянных битов входных данных», которые необходимо удалить из входных данных, чтобы результат поместился в выходной вектор. Это также предельное значение части, верхняя исключительная граница параметра
partдля метода, который преобразовывал бы входной вид во выходной вид. - Если логический результат помещается в выходную форму с избытком места, возвращаемое значение — отрицательное число, абсолютное значение которого — отношение (больше единицы) между размером выходной формы и (меньшим) логическим размером результата. Это отношение можно рассматривать как меру доли «дополнительных битов заполнения», которые необходимо добавить к логическому результату, чтобы заполнить выходной вектор. Это также предельное значение части, нижняя исключительная граница параметра
partдля метода, который преобразовывал бы входной вид во выходной вид.
- Parameters:
-
outputSpecies- предлагаемый выходной вид -
lanewise- учитывать ли размеры строк - Returns:
- указание на изменение размера в виде знаковой дроби или нуля
- See Also:
withLanes
<F> VectorSpecies<F> withLanes(Class<F> newType)
VectorSpecies.of(newType, this.vectorShape()).- Type Parameters:
F- упакованный тип элемента- Parameters:
-
newType- новый тип элемента - Returns:
- вид для нового типа элемента и такой же формы
- Throws:
-
IllegalArgumentException- если для данного сочетания типа элемента и формы такого вида нет или если заданный тип не является допустимымETYPE - See Also:
withShape
VectorSpecies<E> withShape(VectorShape newShape)
VectorSpecies.of(this.elementType(), newShape).- Parameters:
-
newShape- новая форма - Returns:
- вид для того же типа элемента и новой формы
- Throws:
-
IllegalArgumentException- если для данного сочетания типа элемента и формы такого вида нет - See Also:
of
static <E> VectorSpecies<E> of(Class<E> elementType, VectorShape shape)
- Type Parameters:
E- упакованный тип элемента- Parameters:
-
elementType- тип элемента -
shape- форма - Returns:
- вид для заданного типа элемента и формы
- Throws:
-
IllegalArgumentException- если для данного сочетания типа элемента и формы такого вида нет или если заданный тип не является допустимымETYPE - See Also:
ofLargestShape
static <E> VectorSpecies<E> ofLargestShape(Class<E> etype)
Возвращаемый вид выбирается платформой, у которой форма имеет максимальный возможный размер для данного типа элемента. Поддерживаемая форма вектора на некоторых платформах может не поддерживать другие типы строк, что может ограничить применимость переинтерпретации. Векторные алгоритмы, которые требуют переинтерпретации, будут более переносимыми, если они используют предпочтительный вид платформы.
- Type Parameters:
E- упакованный тип элемента- Parameters:
-
etype- тип элемента - Returns:
- предпочтительный вид для типа элемента
- Throws:
-
IllegalArgumentException- если для типа элемента такого вида нет или если заданный тип не является допустимымETYPE - See Also:
ofPreferred
static <E> VectorSpecies<E> ofPreferred(Class<E> etype)
VectorSpecies.of(etype, VectorShape.preferredShape()). Этот вид выбирается платформой так, чтобы у него была самая большая возможная форма, которая поддерживает все типы элементов строк. Это имеет следующие последствия:
- Различные предпочтительные виды для разных типов элементов будут иметь одинаковую основную форму.
- Все векторы, созданные из предпочтительных видов, будут иметь общий размер в битах и емкость информации.
- Переинтерпретация между векторами предпочтительных видов не будет усекать строки и не заполнять их значениями по умолчанию.
- Для любого конкретного типа элемента платформа может предоставить более крупную форму вектора, которая (в качестве компромисса) не поддерживает все возможные типы элементов.
- Implementation Note:
- На многих платформах нет поведенческой разницы между
ofLargestShapeиofPreferred, так как предпочтительная форма обычно также является наибольшей доступной формой для каждого типа строк. Поэтому большинство векторных алгоритмов будут работать хорошо безofLargestShape. - Type Parameters:
E- упакованный тип элемента- Parameters:
-
etype- тип элемента - Returns:
- предпочтительный вид для этого типа элемента
- Throws:
-
IllegalArgumentException- если для типа элемента такого вида нет или если заданный тип не является допустимымETYPE - See Also:
elementSize
static int elementSize(Class<?> elementType)
ETYPE). Тип элемента должен быть допустимым ETYPE, а не типом-обёрткой или другим типом объекта. Аргумент типа элемента должен быть зеркалом для допустимого векторного ETYPE, например, byte.class, int.class или double.class. Размер в битах такого типа является константой SIZE для соответствующего класса-обёртки, например, Byte.SIZE или Integer.SIZE или Double.SIZE.- Parameters:
-
elementType- тип вектора элемента (ETYPE) - Returns:
- размер в битах
elementType, например, 32 дляint.class - Throws:
-
IllegalArgumentException- если заданный аргументelementTypeне является допустимым векторомETYPE
zero
Vector<E> zero()
(ETYPE)0. Эквивалентно IntVector.zero(this) или эквивалентному методу zero для типа вектора, соответствующего данному виду.- Returns:
- вектор нулевого значения данного вида
- See Also:
fromArray
Vector<E> fromArray(Object a, int offset)
ETYPE. Эквивалентно IntVector.fromArray(this,a,offset) или эквивалентному методу fromArray для типа вектора, соответствующего этому виду.- Параметры:
-
a- массивETYPEдля данного вида -
offset- индекс первого значения дорожки для загрузки - Возвращает:
- вектор заданного вида, заполненный из массива
- Исключения:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любой дорожкиNв векторе - См. также:
fromMemorySegment
Vector<E> fromMemorySegment(MemorySegment ms, long offset, ByteOrder bo)
Эквивалентно IntVector.fromMemorySegment(this,ms,offset,bo) для типа вектора, соответствующего этому виду.
- Параметры:
-
ms- сегмент памяти -
offset- смещение в сегменте памяти -
bo- желаемый порядок байтов - Возвращает:
- вектор данного вида, заполненный из сегмента памяти
- Исключения:
-
IndexOutOfBoundsException- еслиoffset+N*ESIZE < 0илиoffset+(N+1)*ESIZE > a.lengthдля любой дорожкиNв векторе - С тех пор:
- 19
- См. также:
loadMask
VectorMask<E> loadMask(boolean[] bits, int offset)
VectorMask.fromArray(this,a,offset).- Параметры:
-
bits- массивboolean -
offset- смещение в массиве - Возвращает:
- маску, загруженную из массива
boolean - Исключения:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любой дорожкиNв маске вектора - См. также:
maskAll
VectorMask<E> maskAll(boolean bit)
- Параметры:
-
bit- заданный бит маски, который нужно дублировать - Возвращает:
- маску, где каждый элемент дорожки устанавливается или сбрасывается в зависимости от заданного бита
- См. также:
broadcast
Vector<E> broadcast(long e)
e. Этот метод возвращает значение данного выражения: EVector.broadcast(this, (ETYPE)e), где EVector — это класс вектора, специфичный для ETYPE этого вида. Значение long должно быть точно представимо ETYPE, чтобы e==(long)(ETYPE)e.
- Параметры:
-
e- значение для трансляции - Возвращает:
- вектор, где все элементы дорожек устанавливаются в примитивное значение
e - Исключения:
-
IllegalArgumentException- если заданное значениеlongне может быть представлено видом вектораETYPE - См. также:
checkValue
long checkValue(long e)
long должно быть точно представимо ETYPE вида вектора, чтобы e==(long)(ETYPE)e. Эффект аналогичен этому псевдокоду: e == (long)(ETYPE)e
? e
: throw new IllegalArgumentException().- Параметры:
-
e- значение для проверки - Возвращает:
e- Исключения:
-
IllegalArgumentException- если заданное значениеlongне может быть представлено видом вектораETYPE - См. также:
shuffleFromValues
VectorShuffle<E> shuffleFromValues(int... sourceIndexes)
Для каждой дорожки перемешивания, где N — это индекс дорожки перемешивания, значение индекса N проверяется на соответствие виду VLENGTH, и (в случае несоответствия) частично оборачивается в исключительный индекс в диапазоне [-VLENGTH..-1].
- Параметры:
-
sourceIndexes- индексы источника, из которых будет извлекать перемешивание - Возвращает:
- перемешивание, где индекс источника каждой дорожки устанавливается на заданное значение
int, частично оборачиваемый, если исключительный - Исключения:
-
IndexOutOfBoundsException- еслиsourceIndexes.length != VLENGTH - См. также:
shuffleFromArray
VectorShuffle<E> shuffleFromArray(int[] sourceIndexes, int offset)
int, начиная со смещения. Для каждой дорожки перемешивания, где N — это индекс дорожки перемешивания, элемент массива с индексом i + N проверяется на соответствие виду VLENGTH, и (в случае несоответствия) частично оборачивается в исключительный индекс в диапазоне [-VLENGTH..-1].
- Параметры:
-
sourceIndexes- индексы источника, из которых будет извлекать перемешивание -
offset- смещение в массиве - Возвращает:
- перемешивание, где индекс источника каждой дорожки устанавливается на заданное значение
int, частично оборачиваемый, если исключительный - Исключения:
-
IndexOutOfBoundsException- еслиoffset < 0илиoffset > sourceIndexes.length - VLENGTH - См. также:
shuffleFromOp
VectorShuffle<E> shuffleFromOp(IntUnaryOperator fn)
[0..VLENGTH-1]. Для каждой дорожки перемешивания, где N — это индекс дорожки перемешивания, значение индекса N проверяется на соответствие виду VLENGTH, и (в случае несоответствия) частично оборачивается в исключительный индекс в диапазоне [-VLENGTH..-1].
Следует позаботиться о том, чтобы значения VectorShuffle, полученные с помощью этого метода, потреблялись как константы, чтобы обеспечить оптимальную генерацию кода. Например, значения перемешивания можно хранить в static final полях или инвариантных по циклу локальных переменных.
Этот метод ведёт себя так, как будто перемешивание создаётся из массива сопоставленных индексов следующим образом:
int[] a = new int[VLENGTH];
for (int i = 0; i < a.length; i++) {
a[i] = fn.applyAsInt(i);
}
return VectorShuffle.fromArray(this, a, 0);
- Параметры:
-
fn- функция сопоставления индекса дорожки - Возвращает:
- перемешивание сопоставленных индексов
- См. также:
iotaShuffle
VectorShuffle<E> iotaShuffle(int start, int step, boolean wrap)
start и с шагом, заданным данным step. Этот метод возвращает значение выражения VectorSpecies.shuffleFromOp(i -> R(start + i * step)), где R — это wrapIndex, если wrap истинно, и является тождественной функцией в противном случае.
Если wrap ложно, каждый индекс проверяется на соответствие спецификации VLENGTH, и (если не соответствует) частично оборачивается на исключительный индекс в диапазоне [-VLENGTH..-1]. В противном случае, если wrap истинно, каждый индекс также уменьшается, как если бы он проходил через wrapIndex, до допустимого диапазона [0..VLENGTH-1].
- Примечание API:
- Параметр
wrapдолжен быть установлен наtrue, если недопустимые исходные индексы должны быть обернуты. В противном случае, установка наfalseпозволяет проверять диапазон недопустимых исходных индексов с помощью последующих операций, таких какunary rearrange. - Параметры:
-
start- начальное значение последовательности исходных индексов, обычно0 -
step- разность между смежными исходными индексами, обычно1 -
wrap- оборачивать ли результирующие индексы по модулюVLENGTH - Возвращает:
- перемешивание последовательных индексов регистров
- См. также:
toString
String toString()
ETYPE — это примитивный тип регистров, VLENGTH — это количество регистров вектора, связанное со спецификацией, и
SHAPE — это форма вектора, связанная со спецификацией.equals
boolean equals(Object obj)
hashCode
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://download.java.net/java/early_access/jdk24/docs/api/jdk.incubator.vector/jdk/incubator/vector/VectorSpecies.html