Интерфейс VectorSpecies<E>
- Параметры типа:
-
E- упакованный видETYPE, тип элемента вектора
public interface VectorSpecies<E>
ETYPE) и shape.- Примечание API:
- Код пользователя не должен реализовывать этот интерфейс. В будущих версиях этого типа реализации могут быть ограничены принадлежностью к одному пакету.
- Примечание реализации:
- Строковое представление экземпляра этого интерфейса будет иметь вид «Species[ETYPE, VLENGTH, SHAPE]», где
ETYPE— примитивный тип линейного типа,VLENGTH— количество линий вектора, связанное с видом, иSHAPE— форма вектора, связанная с видом.Объекты видов векторов могут храниться в локальных переменных, параметрах и как
static finalконстанты, но хранение их в других полях Java или в элементах массива, хотя и семантически допустимо, может привести к потерям производительности.
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Vector<E> |
broadcast |
Возвращает вектор заданного вида, где все элементы дорожки установлены в примитивное значение e. |
<F> VectorSpecies<F> |
check |
Проверяет, имеет ли этот вид заданный тип элемента, и возвращает этот вид без изменений. |
long |
checkValue |
Проверяет, может ли этот вид представлять заданное значение элемента, и возвращает значение без изменений. |
int |
elementSize() |
Возвращает размер дорожки, в битах, векторов этого вида. |
static int |
elementSize |
Возвращает размер в битах типа элемента заданного вектора ( ETYPE). |
Class<E> |
elementType() |
Возвращает примитивный тип элемента векторов этого вида. |
boolean |
equals |
Указывает, идентичен ли этот вид какому-либо другому объекту. |
Vector<E> |
fromArray |
Возвращает вектор этого вида, где элементы дорожки инициализируются из заданного массива по заданному смещению. |
Vector<E> |
fromByteArray |
Загружает вектор этого вида из массива байтов, начиная со смещения. |
int |
hashCode() |
Возвращает значение хэша для вида, основанное на форме вектора и типе элемента. |
VectorMask<E> |
indexInRange |
Возвращает маску этого вида, где установлены только дорожки с индексом N, такие что скорректированный индекс N+offset находится в диапазоне [0..limit-1]. |
VectorShuffle<E> |
iotaShuffle |
Создаёт сдвиг, используя исходные индексы, установленные в последовательные значения, начиная с start и с шагом заданного step. |
int |
length() |
Возвращает количество дорожек в векторе этого вида. |
VectorMask<E> |
loadMask |
Возвращает маску этого вида, где элементы дорожек инициализируются из заданного массива по заданному смещению. |
int |
loopBound |
Функция управления циклом, возвращающая наибольшее кратное VLENGTH, которое меньше или равно заданному значению length. |
VectorMask<E> |
maskAll |
Возвращает маску этого вида, где каждый элемент дорожки установлен или сброшен в соответствии с заданным одиночным булевым значением, которое транслируется на все дорожки. |
Class<? extends VectorMask<E>> |
maskType() |
Возвращает тип маски вектора для этого вида. |
static <E> VectorSpecies<E> |
of |
Находит вид для типа элемента и формы. |
static <E> VectorSpecies<E> |
ofLargestShape |
Находит наибольший вид вектора заданного типа элемента. |
static <E> VectorSpecies<E> |
ofPreferred |
Находит вид, предпочтительный для текущей платформы, для заданного типа элемента вектора. |
int |
partLimit |
Учитывая этот вид и второй, сообщает о чистом расширении или сокращении (возможно) изменяющего размер преобразования переинтерпретации или lane-wise conversion от этого вида ко второму. |
VectorShuffle<E> |
shuffleFromArray |
Создаёт сдвиг для этого вида из массива int, начиная со смещения. |
VectorShuffle<E> |
shuffleFromOp |
Создаёт сдвиг для этого вида из последовательных значений оператора, применённых к диапазону [0..VLENGTH-1]. |
VectorShuffle<E> |
shuffleFromValues |
Создаёт сдвиг для этого вида из ряда исходных индексов. |
String |
toString() |
Возвращает строку вида "Вид[ETYPE, VLENGTH, SHAPE]", где ETYPE является примитивным типом дорожки, VLENGTH является количеством дорожек вектора, связанным с видом, а
SHAPE является формой вектора, связанной с видом. |
int |
vectorBitSize() |
Возвращает общий размер вектора, в битах, любого вектора этого вида. |
int |
vectorByteSize() |
Возвращает общий размер вектора, в байтах, любого вектора этого вида. |
VectorShape |
vectorShape() |
Возвращает форму векторов, созданных этим видом. |
Class<? extends Vector<E>> |
vectorType() |
Возвращает тип вектора этого вида. |
<F> VectorSpecies<F> |
withLanes |
Находит вид с заданным типом элемента и той же формой, что и этот вид. |
VectorSpecies<E> |
withShape |
Находит вид с заданной формой и тем же типом элемента, что и этот вид. |
Vector<E> |
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отрицательно, а результат переполнится в положительное значение - См. также:
indexInRange
VectorMask<E> indexInRange(int offset, int limit)
N+offset находится в диапазоне [0..limit-1]. Этот метод возвращает значение выражения maskAll(true).indexInRange(offset, limit)
- Параметры:
-
offset- начальный индекс -
limit- верхняя граница (исключая) диапазона индексов - Возвращает:
- маска с выключенными дорожками вне диапазона
- См. также:
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 истинно) также от разницы в размерах между предлагаемым входом и выходом дорожек. - Сначала определяется логический размер результата. Если
lanewiseложно, этот размер такой же, как у входногоVSHAPE. Еслиlanewiseистинно, логический размер результата равен произведению входногоVLENGTHна размер выходногоETYPE. - Затем логический размер результата сравнивается с размером предлагаемой формы вывода, чтобы увидеть, как он впишется.
- Если логический результат точно вписывается в форму вывода, возвращаемое значение равно нулю, что означает отсутствие чистого расширения или сокращения.
- Если логический результат превысит форму вывода, возвращаемое значение — это отношение (больше единицы) логического размера результата к (меньшему) размеру вывода. Это отношение можно рассматривать как измерение пропорции «потерянных битов ввода», которые необходимо удалить из ввода, чтобы результат поместился в вектор вывода. Это также предельная часть, верхняя граница (не включая) параметра
partк методу, который преобразовал бы вид ввода в вид вывода. - Если логический результат поместится в форму вывода с избытком места, возвращаемое значение — отрицательное число, абсолютное значение которого является отношением (больше единицы) между размером вывода и (меньшим) логическим размером результата. Это отношение можно рассматривать как измерение пропорции «дополнительных битов заполнения», которые необходимо добавить к логическому результату, чтобы заполнить вектор вывода. Это также предельная часть, нижняя граница (не включая) параметра
partк методу, который преобразовал бы вид ввода в вид вывода.
- Параметры:
-
outputSpecies- предполагаемый вид вывода -
lanewise- нужно ли учитывать размеры дорожек - Возвращает:
- указание на изменение размера в виде подписанного отношения или нуля
- См. также:
withLanes
<F> VectorSpecies<F> withLanes(Class<F> newType)
VectorSpecies.of(newType, this.vectorShape()).- Параметры типа:
-
F- упакованный тип элемента - Параметры:
-
newType- новый тип элемента - Возвращает:
- вид для нового типа элемента и той же формы
- Исключения:
-
IllegalArgumentException- если такого вида не существует для данного сочетания типа элемента и формы или если заданный тип не является допустимымETYPE - См. также:
withShape
VectorSpecies<E> withShape(VectorShape newShape)
VectorSpecies.of(this.elementType(), newShape).- Параметры:
-
newShape- новая форма - Возвращает:
- вид для того же типа элемента и новой формы
- Исключения:
-
IllegalArgumentException- если такого вида не существует для данного сочетания типа элемента и формы - См. также:
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 для типа вектора, соответствующего этому виду.- Parameters:
-
a- массив соответствующегоETYPEтипа для этого вида -
offset- индекс первого значения прохода для загрузки - Returns:
- вектор заданного вида, заполненный из массива
- Throws:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любого проходаNв векторе - See Also:
fromByteArray
Vector<E> fromByteArray(byte[] a, int offset, ByteOrder bo)
Эквивалентно IntVector.fromByteArray(this,a,offset,bo) или эквивалентному методу fromByteArray для типа вектора, соответствующего этому виду.
- Parameters:
-
a- массив байтов -
offset- индекс первого байта для загрузки -
bo- желаемый порядок байтов - Returns:
- вектор заданного вида, заполненный из массива байтов
- Throws:
-
IndexOutOfBoundsException- еслиoffset+N*ESIZE < 0илиoffset+(N+1)*ESIZE > a.lengthдля любого проходаNв векторе - See Also:
loadMask
VectorMask<E> loadMask(boolean[] bits, int offset)
VectorMask.fromArray(this,a,offset).- Parameters:
-
bits- массивboolean -
offset- смещение в массиве - Returns:
- маска, загруженная из массива
boolean - Throws:
-
IndexOutOfBoundsException- еслиoffset+N < 0илиoffset+N >= a.lengthдля любого проходаNв маске вектора - See Also:
maskAll
VectorMask<E> maskAll(boolean bit)
- Parameters:
-
bit- заданный бит маски, который будет дублироваться - Returns:
- маска, где каждый проход устанавливается или сбрасывается в соответствии с заданным битом
- See Also:
broadcast
Vector<E> broadcast(long e)
e. Этот метод возвращает значение этого выражения: EVector.broadcast(this, (ETYPE)e), где EVector — это класс вектора, специфичный для ETYPE этого вида. Значение long должно быть точно представимо ETYPE, чтобы e==(long)(ETYPE)e.
- Parameters:
-
e- значение для трансляции - Returns:
- вектор, где все элементы проходов установлены в примитивное значение
e - Throws:
-
IllegalArgumentException- если заданное значениеlongне может быть представлено векторным видомETYPE - See Also:
checkValue
long checkValue(long e)
long должно быть точно представимо ETYPE вида вектора, чтобы e==(long)(ETYPE)e. Эффект похож на этот псевдокод: e == (long)(ETYPE)e
? e
: throw new IllegalArgumentException(). - Parameters:
-
e- проверяемое значение - Returns:
e- Throws:
-
IllegalArgumentException- если данноеlongзначение не может быть представлено видом вектораETYPE - See Also:
shuffleFromValues
VectorShuffle<E> shuffleFromValues(int... sourceIndexes)
Для каждой дорожки перемешивания, где N - индекс дорожки перемешивания, значение N-го индекса проверяется на соответствие виду VLENGTH, и (если не соответствует) частично обертывается в исключительный индекс в диапазоне [-VLENGTH..-1].
- Parameters:
-
sourceIndexes- индексы источников, из которых будет происходить выбор - Returns:
- перемешивание, где индекс источника каждой дорожки установлен на заданное
intзначение, частично обернутый, если исключительный - Throws:
-
IndexOutOfBoundsException- еслиsourceIndexes.length != VLENGTH - See Also:
shuffleFromArray
VectorShuffle<E> shuffleFromArray(int[] sourceIndexes, int offset)
int начиная со смещения. Для каждой дорожки перемешивания, где N - индекс дорожки перемешивания, элемент массива с индексом i + N проверяется на соответствие виду VLENGTH, и (если не соответствует) частично обертывается в исключительный индекс в диапазоне [-VLENGTH..-1].
- Parameters:
-
sourceIndexes- индексы источников, из которых будет происходить выбор -
offset- смещение в массиве - Returns:
- перемешивание, где индекс источника каждой дорожки установлен на заданное
intзначение, частично обернутый, если исключительный - Throws:
-
IndexOutOfBoundsException- еслиoffset < 0, илиoffset > sourceIndexes.length - VLENGTH - See Also:
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);
- Parameters:
-
fn- функция сопоставления индекса дорожки - Returns:
- перемешивание сопоставленных индексов
- See Also:
iotaShuffle
VectorShuffle<E> iotaShuffle(int start, int step, boolean wrap)
start и шагом заданным step. Этот метод возвращает значение выражения VectorSpecies.shuffleFromOp(i -> R(start + i * step)), где R - wrapIndex, если wrap - true, и является тождественной функцией в противном случае.
Если wrap - false, каждый индекс проверяется на соответствие виду VLENGTH, и (если не соответствует) частично обертывается в исключительный индекс в диапазоне [-VLENGTH..-1]. В противном случае, если wrap - true, также уменьшите каждый индекс, как если бы по wrapIndex, до допустимого диапазона [0..VLENGTH-1].
- API Note:
- Параметр
wrapдолжен быть установлен вtrue, если невалидные индексы источников должны обертываться. В противном случае, установка его вfalseпозволяет проверить невалидные индексы источников в более поздних операциях, таких какunary rearrange. - Parameters:
-
start- начальное значение последовательности индексов источника, обычно0 -
step- разность между соседними индексами источника, обычно1 -
wrap- обернуть полученные индексы по модулюVLENGTH - Returns:
- перемешивание последовательных индексов дорожек
- See Also:
toString
String toString()
ETYPE - примитивный тип дорожки, VLENGTH - количество дорожек вектора, связанное со видом, и
SHAPE - форма вектора, связанная со видом.- Overrides:
-
toStringв классеObject - Returns:
- строка вида "Species[ETYPE, VLENGTH, SHAPE]"
equals
boolean equals(Object obj)
- Overrides:
-
equalsв классеObject - Parameters:
-
obj- справочный объект для сравнения. - Returns:
- является ли этот вид идентичным другому объекту
- See Also:
hashCode
int hashCode()
- Overrides:
-
hashCodeв классеObject - Returns:
- значение хэш-кода для этого вида
- See Also:
© 1993, 2021, 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://docs.oracle.com/en/java/javase/17/docs/api/jdk.incubator.vector/jdk/incubator/vector/VectorSpecies.html