モジュール jdk.incubator.vector
パッケージ jdk.incubator.vector

クラスVectorMask<E>

java.lang.Object
jdk.internal.vm.vector.VectorSupport.VectorPayload
jdk.internal.vm.vector.VectorSupport.VectorMask<E>
jdk.incubator.vector.VectorMask<E>
型パラメータ:
E - ETYPEのボックス版、ベクトルの要素型

値ベースのクラスとアイデンティティ演算

VectorMaskは、Vectorとともにvalue-basedクラスです。 VectorMaskを使用すると、==などのアイデンティティ依存の演算で予期しない結果が発生したり、パフォーマンスが低下する可能性があります。 equalsはアイデンティティ依存のメソッドではないため、v.equals(w)v==wよりも高速である可能性が高くなります。 (toStringでもhashCodeでもありません。) また、ベクトル・マスク・オブジェクトは、ローカルおよびパラメータにstatic final定数として格納できますが、セマンティクスが有効な場合でも、他のJavaフィールドまたは配列要素に格納すると、パフォーマンスが低下する可能性があります。

public abstract class VectorMask<E> extends jdk.internal.vm.vector.VectorSupport.VectorMask<E>
VectorMaskは、順序付けられた不変のboolean値のシーケンスを表します。

同じ「要素型」 (ETYPE)およびshapeVectorMaskおよびVectorには同じ数のレーンがあるため、(具体的には、そのvector speciesには互換性があります)との互換性があります。

ベクトル演算の中には、入力ベクトルのレーン要素の選択と演算を制御する(compatible)マスクを受け入れるものがあります。

順序内の値の数は、VectorMask lengthと呼ばれます。 長さは、VectorMaskレーンの数にも対応します。 レーン索引N (0(これを含む)、長さ(これを含まない))のレーン要素は、順序内のN + 1のth値に対応します。

レーン要素がtrueの場合、レーンはsetと呼ばれます。それ以外の場合、レーン要素がfalseの場合、レーンはunsetと呼ばれます。

VectorMaskは、単項、二項およびリダクション演算の限定されたセットを宣言します。

  • レーンワイズ単項演算は、1つの入力マスクで動作し、結果マスクを生成します。 入力マスクのレーンごとに、レーン要素は指定されたスカラー単項演算を使用して演算され、ブール結果は同じレーンのマスク結果に配置されます。 次の疑似コードは、この演算カテゴリの動作を示しています:
    
     VectorMask<E> a = ...;
     boolean[] ar = new boolean[a.length()];
     for (int i = 0; i < a.length(); i++) {
         ar[i] = scalar_unary_op(a.laneIsSet(i));
     }
     VectorMask<E> r = VectorMask.fromArray(a.vectorSpecies(), ar, 0);
     
  • レーンワイズ二項演算では、2つの入力マスクを演算して結果マスクを生成します。 2つの入力マスクaおよびbのレーンごとに、aおよびbの対応するレーン要素が、指定されたスカラー二項演算を使用して演算され、ブール結果が同じレーンのマスク結果に配置されます。 次の疑似コードは、この演算カテゴリの動作を示しています:
    
     VectorMask<E> a = ...;
     VectorMask<E> b = ...;
     boolean[] ar = new boolean[a.length()];
     for (int i = 0; i < a.length(); i++) {
         ar[i] = scalar_binary_op(a.laneIsSet(i), b.laneIsSet(i));
     }
     VectorMask<E> r = VectorMask.fromArray(a.vectorSpecies(), ar, 0);
     
  • クロス・レーン・リダクション演算では、入力マスクを受け入れてスカラー結果を生成します。 入力マスクのレーンごとに、レーン要素は、指定されたスカラー二項演算を使用してスカラー累積値とともに演算されます。 スカラー結果は、累計の最終値です。 次の疑似コードは、この演算カテゴリの動作を示しています:
    
     Mask<E> a = ...;
     int acc = zero_for_scalar_binary_op;  // 0, or 1 for &
     for (int i = 0; i < a.length(); i++) {
          acc = scalar_binary_op(acc, a.laneIsSet(i) ? 1 : 0);  // & | +
     }
     return acc;  // maybe boolean (acc != 0)
     

  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    abstract boolean
    すべてのマスク・レーンが設定されている場合、trueを返します。
    abstract VectorMask<E>
    このマスクと2番目の入力マスク間の論理積(a&bとして)を計算します。
    abstract VectorMask<E>
    このマスク(a&~bとして)から別の入力マスクを論理的に減算します。
    abstract boolean
    マスク・レーンのいずれかが設定されている場合、trueを返します。
    abstract <F> VectorMask<F>
    cast(VectorSpecies<F> species)
    このマスクを、指定された種の要素型Fのマスクに変換します。
    abstract <F> VectorMask<F>
    check(Class<F> elementType)
    このマスクが指定された要素型のベクトルに適用されることを確認し、このマスクをそのまま返します。
    abstract <F> VectorMask<F>
    check(VectorSpecies<F> species)
    このマスクが指定された種を持っていることを確認し、このマスクをそのまま返します。
    abstract VectorMask<E>
    このマスクと別の入力マスク(ブールa==bまたはa^~bとして)との論理的な等価性を判定します。
    final boolean
    このマスクが他のオブジェクトと同一かどうかを示します。
    abstract int
    設定されている最初のマスク・レーンのインデックスを返します。
    static <E> VectorMask<E>
    fromArray(VectorSpecies<E> species, boolean[] bits, int offset)
    オフセットから始まるboolean配列からマスクをロードします。
    static <E> VectorMask<E>
    fromLong(VectorSpecies<E> species, long bits)
    指定されたビット・マスク内のビットに従って、最下位ビットから符号ビットまで、各レーンが設定または設定解除されているマスクを返します。
    static <E> VectorMask<E>
    fromValues(VectorSpecies<E> species, boolean... bits)
    指定されたboolean値に従って各レーンが設定または設定解除されるマスクを返します。
    final int
    マスク・ビット設定およびベクトル種に基づいて、マスクのハッシュ・コード値を返します。
    abstract VectorMask<E>
    indexInRange(int offset, int limit)
    調整された索引N+offset[0..limit-1]の範囲内にない場合に、このマスクからレーン番号付きNを削除します。
    abstract void
    intoArray(boolean[] a, int offset)
    このマスクをoffsetから始まるboolean配列に格納します。
    abstract boolean
    laneIsSet(int i)
    索引iのレーンが設定されているかどうかをテスト
    abstract int
    設定されている最後のマスク・レーンのインデックスを返します。
    final int
    マスク・レーンの数を返します。
    abstract VectorMask<E>
    not()
    このマスクを論理的に否定します。
    abstract VectorMask<E>
    このマスクと別の入力マスクの論理和集合(a|bとして)を計算します。
    abstract boolean[]
    このマスクのレーン要素を含むboolean配列を返します。
    abstract long
    最大で最初の64個のレーン要素のlong値にパックされた、このマスクのレーン要素を返します。
    final String
    このマスクの文字列表現を"Mask[T.TT...]"形式で返し、マスク・ビット設定('T'または'.'文字として)をレーン順に報告します。
    abstract Vector<E>
    このマスクのベクトル表現を返します。そのレーン・ビットは、マスク・ビットに対応して設定または設定解除されます。
    abstract int
    設定されているマスク・レーンの数を返します。
    abstract VectorSpecies<E>
    このマスクが適用されるベクトル種を返します。

    クラスjdk.internal.vm.vector.VectorSupport.VectorPayloadで宣言されたメソッド

    getPayload

    クラス java.lang.Objectで宣言されたメソッド

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • メソッドの詳細

    • vectorSpecies

      public abstract VectorSpecies<E> vectorSpecies()
      このマスクが適用されるベクトル種を返します。 このマスクは、同じ種のベクトルと、同じレーン数に適用されます。
      戻り値:
      このマスクのベクトル種
    • length

      public final int length()
      マスク・レーンの数を返します。 このマスクは、同じレーン数のベクトルと同じ種のベクトルに適用されます。
      戻り値:
      マスク・レーンの数
    • fromValues

      public static <E> VectorMask<E> fromValues(VectorSpecies<E> species, boolean... bits)
      指定されたboolean値に従って各レーンが設定または設定解除されるマスクを返します。

      Nがマスク・レーン索引である各マスク・レーンについて、索引Nの指定されたboolean値がtrueの場合は、索引Nのマスク・レーンが設定されます。それ以外の場合は、設定が解除されます。

      指定された種には、指定された配列と互換性のあるレーンがいくつか必要です。

      型パラメータ:
      E - boxed要素型
      パラメータ:
      species - 希望するマスクのベクトル種
      bits - 指定されたboolean
      戻り値:
      指定されたboolean値に従って各レーンが設定または設定解除されるマスク
      例外:
      IllegalArgumentException - bits.length != species.length()の場合
      関連項目:
    • fromArray

      public static <E> VectorMask<E> fromArray(VectorSpecies<E> species, boolean[] bits, int offset)
      オフセットから始まるboolean配列からマスクをロードします。

      Nがマスク・レーン索引である各マスク・レーンについて、索引offset + Nの配列要素がtrueの場合は、索引Nのマスク・レーンが設定されます。それ以外の場合は、設定が解除されます。

      型パラメータ:
      E - boxed要素型
      パラメータ:
      species - 希望するマスクのベクトル種
      bits - boolean配列
      offset - 配列へのオフセット
      戻り値:
      boolean配列からロードされたマスク
      例外:
      IndexOutOfBoundsException - offset < 0またはoffset > bits.length - species.length()の場合
      関連項目:
    • fromLong

      public static <E> VectorMask<E> fromLong(VectorSpecies<E> species, long bits)
      指定されたビット・マスク内のビットに従って、最下位ビットから符号ビットまで、各レーンが設定または設定解除されているマスクを返します。

      Nがマスク・レーン索引である各マスク・レーンについて、式(bits>>min(63,N))&1がゼロ以外の場合は、索引Nのマスク・レーンが設定されます。それ以外の場合は、設定が解除されます。

      指定された種のレーンが64レーン未満の場合、ビット・マスクの上位64-VLENGTHビットは無視されます。 指定された種が64レーンを超える場合、符号ビットはレーン64以上に複製されます。

      型パラメータ:
      E - boxed要素型
      パラメータ:
      species - 希望するマスクのベクトル種
      bits - 指定されたマスク・ビット(64ビット符号付き整数)
      戻り値:
      指定された整数値のビットに従って各レーンが設定または設定解除されるマスク
      関連項目:
    • cast

      public abstract <F> VectorMask<F> cast(VectorSpecies<F> species)
      このマスクを、指定された種の要素型Fのマスクに変換します。 species.length()はマスクの長さと同じである必要があります。 様々なマスク・レーン・ビットは変更されません。

      Nがレーン索引である各マスク・レーンについて、索引Nのマスク・レーンが設定されている場合は、結果のマスクの索引Nのマスク・レーンが設定されます。それ以外の場合は、マスク・レーンは設定されません。

      型パラメータ:
      F - 種のboxed要素の型
      パラメータ:
      species - 希望するマスクのベクトル種
      戻り値:
      シェイプおよび要素タイプによって変換されたマスク
      例外:
      IllegalArgumentException - このマスクの長さと種の長さが異なる場合
    • toLong

      public abstract long toLong()
      最大で最初の64個のレーン要素のlong値にパックされた、このマスクのレーン要素を返します。

      レーン要素は、最下位ビットから最上位ビットの順に梱包されます。 Nがマスク・レーン索引である各マスク・レーンについて、マスク・レーンが設定されている場合、Nのthビットは結果のlong値でいずれかに設定されます。それ以外の場合、Nのthビットはゼロに設定されます。 マスクのレーン数は64以下である必要があります。

      戻り値:
      long値にパックされたこのマスクのレーン要素。
      例外:
      UnsupportedOperationException - このマスクに64を超えるレーンがある場合
    • toArray

      public abstract boolean[] toArray()
      このマスクのレーン要素を含むboolean配列を返します。

      このメソッドは、このマスクを割り当てられた配列(intoArray(boolean[], int)を使用して)に格納するかのように動作し、その配列を次のように返します:

      
       boolean[] a = new boolean[this.length()];
       this.intoArray(a, 0);
       return a;
       

      戻り値:
      このベクトルのレーン要素を含む配列
    • intoArray

      public abstract void intoArray(boolean[] a, int offset)
      このマスクをoffsetから始まるboolean配列に格納します。

      Nがマスク・レーン索引である各マスク・レーンについて、索引Nのレーン要素が配列要素a[offset+N]に格納されます。

      パラメータ:
      a - boolean []型の配列
      offset - 配列へのオフセット
      例外:
      IndexOutOfBoundsException - offset < 0またはoffset > a.length - this.length()の場合
    • anyTrue

      public abstract boolean anyTrue()
      マスク・レーンのいずれかが設定されている場合、trueを返します。
      戻り値:
      マスク・レーンのいずれかが設定されている場合はtrue、それ以外の場合はfalse
    • allTrue

      public abstract boolean allTrue()
      すべてのマスク・レーンが設定されている場合、trueを返します。
      戻り値:
      すべてのマスク・レーンが設定されている場合はtrue、それ以外の場合はfalse
    • trueCount

      public abstract int trueCount()
      設定されているマスク・レーンの数を返します。
      戻り値:
      設定されているマスク・レーンの数。
    • firstTrue

      public abstract int firstTrue()
      設定されている最初のマスク・レーンのインデックスを返します。 いずれも設定されていない場合は、VLENGTHを返します。
      戻り値:
      設定されている最初のマスク・レーンのインデックス、またはVLENGTH
    • lastTrue

      public abstract int lastTrue()
      設定されている最後のマスク・レーンのインデックスを返します。 いずれも設定されていない場合は、-1を返します。
      戻り値:
      設定されている最後のマスク・レーンのインデックス、または-1
    • and

      public abstract VectorMask<E> and(VectorMask<E> m)
      このマスクと2番目の入力マスク間の論理積(a&bとして)を計算します。

      これは、論理AND演算(&)を対応するマスク・ビットの各ペアに適用するレーンワイズ二項演算です。

      パラメータ:
      m - 2番目の入力マスク
      戻り値:
      2つの入力マスクの論理結合の結果
    • or

      public abstract VectorMask<E> or(VectorMask<E> m)
      このマスクと別の入力マスクの論理和集合(a|bとして)を計算します。

      これは、論理OR演算(|)を対応するマスク・ビットの各ペアに適用するレーンワイズ二項演算です。

      パラメータ:
      m - 入力マスク
      戻り値:
      2つの入力マスクを論理的に分離した結果
    • eq

      public abstract VectorMask<E> eq(VectorMask<E> m)
      このマスクと別の入力マスク(ブールa==bまたはa^~bとして)との論理的な等価性を判定します。

      これは、レーンワイズ二項演算で、対応する各マスク・ビットのペアが等しいかどうかをテストします。 また、マスク・ビットでの逆引きXOR演算(^~)にも相当します。

      パラメータ:
      m - 入力マスク
      戻り値:
      2つの入力マスクが等しい場所を示すマスク
      関連項目:
    • andNot

      public abstract VectorMask<E> andNot(VectorMask<E> m)
      このマスク(a&~bとして)から別の入力マスクを論理的に減算します。

      これは、論理ANDC演算(&~)を対応するマスク・ビットの各ペアに適用するレーンワイズ二項演算です。

      パラメータ:
      m - 2番目の入力マスク
      戻り値:
      このマスクから2番目のマスクを論理的に減算した結果
    • not

      public abstract VectorMask<E> not()
      このマスクを論理的に否定します。

      これは、論理NOT演算(~)を各マスク・ビットに適用するレーンワイズ二項演算です。

      戻り値:
      このマスクの論理否定の結果
    • indexInRange

      public abstract VectorMask<E> indexInRange(int offset, int limit)
      調整された索引N+offset[0..limit-1]の範囲内にない場合に、このマスクからレーン番号付きNを削除します。

      いずれの場合も、一連のsetレーンとunsetレーンは、オーバーフローやラウンドなしで無限精度またはVLENGTH-飽和加算または減算を使用する場合と同様に割り当てられます。

      APIのノート:
      このメソッドは、[offset..offset+VLENGTH-1]の範囲内の索引番号に対して、Objects.checkIndex(int,int)によって実行されるチェックのSIMDエミュレーションを実行します。 例外が必要な場合は、結果のマスクを元のマスクと比較できます。等しくない場合は、少なくとも1つのレーンが範囲外であったため、例外処理を実行できます。

      一連のNセット・レーンであり、その後に一連の未設定レーンが続くマスクを取得するには、allTrue.indexInRange(0, N)を呼び出します。ここで、allTrueはすべての真のビットのマスクです。 N1の未設定レーンとそれに続くN2セット・レーンのマスクは、allTrue.indexInRange(-N1, N2)をコールすることで取得できます。

      パラメータ:
      offset - 開始インデックス
      limit - インデックス範囲の上限(exclusive)
      戻り値:
      範囲外のレーンが設定された、元のマスク
      関連項目:
    • toVector

      public abstract Vector<E> toVector()
      このマスクのベクトル表現を返します。そのレーン・ビットは、マスク・ビットに対応して設定または設定解除されます。 Nがマスク・レーン索引である各マスク・レーンについて、マスク・レーンがNで設定されている場合、特定のデフォルト以外の値-1がレーン索引Nの結果ベクトルに配置されます。 それ以外の場合、デフォルトの要素値0はレーン索引Nの結果ベクトルに配置されます。 このマスクの要素タイプ(ETYPE)が浮動小数点であるか整数であるかにかかわらず、マスクによって選択されるレーン値は、2つの算術値0または-1のいずれかになります。 ETYPEごとに、マスク・レーンが設定されている場合にのみ、ベクトル・レーンの最上位ビットが設定されます。 さらに、整数型の場合、allレーンのビットは、マスクが設定されているレーンに設定されます。

      戻されるベクトルは、ZERO.blend(MINUS_ONE, this)によって計算されるベクトルと同じです。ここで、ZEROMINUS_ONEは、それぞれデフォルトのETYPE値と-1を表すETYPE値をレプリケートするベクトルです。

      APIのノート:
      静的型チェックのために、ユーザーは結果のベクトルを予想される積分レーン型(複数可)または種と照合してチェックする場合があります。 マスクが浮動小数点種用の場合、結果のベクトルは同じシェイプとレーン・サイズを持ちますが、整数型になります。 マスクが積分種の場合、結果のベクトルは正確にその種のものになります。
      戻り値:
      このマスクのベクトル表現
      関連項目:
    • laneIsSet

      public abstract boolean laneIsSet(int i)
      索引iのレーンが設定されているかどうかをテスト
      パラメータ:
      i - レーンのインデックス
      戻り値:
      インデックスiのレーンが設定されている場合はtrue、そうでない場合はfalse
      例外:
      IndexOutOfBoundsException - 索引が(< 0 || >= length())の範囲外であるかどうか
    • check

      public abstract <F> VectorMask<F> check(Class<F> elementType)
      このマスクが指定された要素型のベクトルに適用されることを確認し、このマスクをそのまま返します。 効果は次の疑似コードのようになります : elementType == vectorSpecies().elementType() ? this : throw new ClassCastException()
      型パラメータ:
      F - 必要なレーン型のボックス化された要素型
      パラメータ:
      elementType - 必要なレーン・タイプ
      戻り値:
      同じマスク
      例外:
      ClassCastException - 要素タイプが間違っている場合
      関連項目:
    • check

      public abstract <F> VectorMask<F> check(VectorSpecies<F> species)
      このマスクが指定された種を持っていることを確認し、このマスクをそのまま返します。 効果は次の疑似コードのようになります : species == vectorSpecies() ? this : throw new ClassCastException()
      型パラメータ:
      F - 必要な種のボックス化された要素型
      パラメータ:
      species - このマスクにはベクトル種が必要です
      戻り値:
      同じマスク
      例外:
      ClassCastException - 種が間違っている場合
      関連項目:
    • toString

      public final String toString()
      このマスクの文字列表現を"Mask[T.TT...]"形式で返し、マスク・ビット設定('T'または'.'文字として)をレーン順に報告します。
      オーバーライド:
      toString 、クラス:  Object
      戻り値:
      "Mask[T.TT...]"形式の文字列
    • equals

      public final boolean equals(Object obj)
      このマスクが他のオブジェクトと同一かどうかを示します。 2つのマスクは、同じ種と同じソース・インデックスを同じ順序で持つ場合にのみ同一です。
      オーバーライド:
      equals 、クラス:  Object
      パラメータ:
      obj - 比較対象の参照オブジェクト。
      戻り値:
      このベクトルがほかのオブジェクトと同一かどうか
      関連項目:
    • hashCode

      public final int hashCode()
      マスク・ビット設定およびベクトル種に基づいて、マスクのハッシュ・コード値を返します。
      オーバーライド:
      hashCode 、クラス:  Object
      戻り値:
      このマスクのハッシュ・コード値
      関連項目: