Интерфейс VectorSpecies<E>
- Параметры типа:
-
E- упакованный аналогETYPE, тип элементов вектора
public interface VectorSpecies<E>
VectorSpecies опирается на предварительные возможности платформы Java: -
VectorSpeciesотносится к одному или нескольким предварительным API:MemorySegment.
- Примечание API:
- Код пользователя не должен реализовывать этот интерфейс. В будущей версии этого типа реализации могут быть ограничены принадлежностью к одному пакету.
- Примечание реализации:
- Строковое представление экземпляра этого интерфейса будет иметь вид "Species[ETYPE, VLENGTH, SHAPE]", где
ETYPE- примитивный тип элемента,VLENGTH- количество разрядов вектора, связанных со видом, аSHAPE- форма вектора, связанная с видом.Объекты Vector species могут храниться в локальных переменных, параметрах и как константы
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)
<F> VectorSpecies<F> check(Class<F> elementType).
- Параметры типа:
-
F- упакованный тип элемента требуемого типа дорожки - Параметры:
-
elementType- требуемый тип дорожки - Возвращает:
- тот же вид
- Исключение:
-
ClassCastException- если у вида неверный тип элемента - См. также:
partLimit
int partLimit(VectorSpecies<?> outputSpecies, boolean lanewise)
lane-wise conversion от этого вида ко второму. Знак и величина возвращаемого значения зависят от разницы размеров предлагаемой входной и выходной форм, и (необязательно, если lanewise равно true) также от разницы размеров предлагаемой входной и выходной дорожек. - Сначала определяется логический размер результата. Если
lanewiseравно false, этот размер равен размеру входногоVSHAPE. Еслиlanewiseравно true, логический размер результата равен произведению входногоVLENGTHна размер выходнойETYPE. - Затем логический размер результата сравнивается с размером предлагаемой выходной формы, чтобы увидеть, как он впишется.
- Если логический результат точно помещается в выходную форму, возвращаемое значение равно нулю, что означает отсутствие чистого расширения или сокращения.
- Если логический результат переполнит выходную форму, возвращаемое значение является отношением (больше единицы) логического размера результата к (меньшему) размеру выхода. Это отношение можно рассматривать как меру доли «упавших битов входных данных», которые необходимо удалить из входа, чтобы результат поместился в выходной вектор. Это также предел части, верхняя граница (исключительно) параметра
partк методу, который бы преобразовал вид входных данных в вид выходных данных. - Если логический результат поместится в выходную форму с избытком места, возвращаемое значение является отрицательным числом, модуль которого равен отношению (больше единицы) размера выхода к (меньшему) логическому размеру результата. Это отношение можно рассматривать как меру доли «дополнительных битов заполнения», которые необходимо добавить к логическому результату, чтобы заполнить выходной вектор. Это также предел части, нижняя граница (исключая) параметра
partк методу, который бы преобразовал вид входных данных в вид выходных данных.
- Параметры:
-
outputSpecies- предлагаемый вид выходных данных -
lanewise- учитывать ли размеры дорожек - Возвращает:
- указание на изменение размера как значащее отношение или ноль
- См. также:
сLanes
<F> VectorSpecies<F> withLanes(Class<F> newType)
VectorSpecies.of(newType, this.vectorShape()).- Type Parameters:
-
F- упакованный тип элемента - Parameters:
-
newType- новый тип элемента - Returns:
- вид для нового типа элемента и такой же формы
- Throws:
-
IllegalArgumentException- если такой вид для данного сочетания типа элемента и формы не существует или заданный тип не является допустимымETYPE - See Also:
сShape
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- тип элемента вектора (базовый тип) - 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:
fromMemorySegment
Vector<E> fromMemorySegment(MemorySegmentPREVIEW ms, long offset, ByteOrder bo)
Эквивалентно IntVector.fromMemorySegment(this,ms,offset,bo), для типа вектора, соответствующего этому виду.
- Parameters:
-
ms- сегмент памяти -
offset- смещение в сегменте памяти -
bo- желаемый порядок байтов - Returns:
- вектор заданного вида, заполненный из сегмента памяти
- Throws:
-
IndexOutOfBoundsException- еслиoffset+N*ESIZE < 0илиoffset+(N+1)*ESIZE > a.lengthдля любой полосыNв векторе - Since:
- 19
- See Also:
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 — форма вектора, связанная с видом.- Переопределяет:
-
toStringв классеObject - Возвращает:
- строка в формате "Species[ETYPE, VLENGTH, SHAPE]"
equals
boolean equals(Object obj)
- Переопределяет:
-
equalsв классеObject - Параметры:
-
obj- объект-ссылка для сравнения. - Возвращает:
- является ли этот вид идентичным какому-либо другому объекту
- См. также:
hashCode
int hashCode()
- Переопределяет:
-
hashCodeв классеObject - Возвращает:
- значение хэша для этого вида
- См. также:
© 1993, 2023, 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/21/docs/api/jdk.incubator.vector/jdk/incubator/vector/VectorSpecies.html
VectorSpeciesтолько при включенных предварительных функциях.