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

クラスVectorShuffle<E>

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

public abstract class VectorShuffle<E> extends Object
VectorShuffleは、「ソース索引」と呼ばれる、順序付けされた不変の一連のint値を表します。各ソース索引は、互換性のあるVectorからソース・レーンを数値で選択します。

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

シャッフルは、rearrangeメソッドを使用して(compatible)ソース・ベクトルに適用されます。

シャッフルにはベクトル種から導出されたレーン構造がありますが、レーン索引はレーン値ではなくintとして格納されます。

このメソッドは、ソース・ベクトルへのランダム・アクセスによってレーン値を収集し、ソース索引を参照してレーンを選択します。 ソース索引がシャッフルに複数回出現する場合は、選択したレーン値が結果に複数回コピーされます。 特定のレーンがソース索引によって選択されない場合、そのレーン値は無視されます。 結果のベクトルには、シャッフルのソース・インデックスによって選択されたすべてのソース・レーン値が含まれます。 結果のレーン値は、元のベクトル・レーンの順序ではなく、シャッフル・ソース索引に従って順序付けされます。

各シャッフルには、シャッフルが演算するベクトルの互換性を決定するvectorSpecies()プロパティがあります。 これにより、シャッフルのlength()は常に、それが演算するベクトルのVLENGTHと等しくなります。 要素種とシャッフル種のシェイプは、シャッフルの動作とは直接関係ありません。 レーン数が一定であるかぎり、シャッフルは他のレーン・タイプへのconvertedにすることが容易です。

その内部状態では、シャッフルは常に[-VLENGTH..VLENGTH-1]からの狭い範囲の整数値を保持します。 正の数は自己説明的で、任意のソース・ベクトルに適用されるレーン番号です。 負の数(存在する場合)は、シャッフルが有効なレーン索引ではないraw整数値から作成されたことを示す符号です。

シャッフルに負の数で表される無効なソース索引は、「例外索引」と呼ばれます。

例外的な索引は様々な方法で処理されます:

  • 特に明記されていないかぎり、レーンが例外的なインデックスによって処理されると、シャッフル使用メソッドはArrayIndexOutOfBoundsExceptionをスローします。
  • 無効なソース索引(負であるかどうか)が最初にシャッフルにロードされると、wrapIndex()による場合と同様に、[-VLENGTH..-1]の負の範囲に部分的に正規化されます。 この例外的な索引の処理は、正の数と正でない数の隣接する範囲にラップしながら、通常の索引と例外的な索引の区別を保持するため、「部分ラッピング」と呼ばれます。 部分的にラップされた索引は、VLENGTHの最終オフセットを追加することで、後で完全に正の範囲にラップできます。
  • 一部のアプリケーションでは、別のソース・ベクトルへの"steer"アクセスに使用される例外的な索引。 そのような場合、[-VLENGTH..-1]の範囲内にある例外索引値は、有効な範囲である[0..VLENGTH-1]まで循環され、2番目のソース・ベクトルで使用されます。
  • VLENGTHが小さい別のシャッフル種からシャッフルがキャストされると、すべての索引が新しいVLENGTHに対して再検証され、一部の索引が例外索引に変換される可能性があります。 いずれの場合も、シャッフル・キャスティングは例外的なインデックスを通常のインデックスに変換しません。

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

VectorShuffleは、Vectorとともにvalue-basedクラスです。 ==などのアイデンティティ依存の演算では、予期しない結果が発生したり、パフォーマンスが低下する可能性があります。 また、ベクトル・シャッフル・オブジェクトは、ローカルおよびパラメータにstatic final定数として格納できますが、セマンティクスが有効な場合でも、他のJavaフィールドまたは配列要素に格納すると、パフォーマンスが低下する可能性があります。 最後に、可能な場合、ベクトル・シャッフルはループ内で計算されず、かわりにループ不変ローカルまたはstatic final定数として格納される必要があります。