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

クラスVectorOperators

java.lang.Object
jdk.incubator.vector.VectorOperators

public abstract class VectorOperators extends Object
このクラスは、レーンワイズ・ベクトル演算を記述するstatic定数と、それらを分類する入れ子のインタフェースだけで構成されます。 静的定数は、w = v0. lanewise(ADD, v1)のトークンADDなど、ベクトル式で特にリクエストされたレーン演算を表すトークンとして機能します。

個々の演算子トークンのドキュメントは非常に簡潔で、トークンがリクエストする演算のシンボリックJava式を提供します。 これらのシンボリック式では、次の従来型の要素が使用されます:

  • a, b, c - レーン値の名前
  • +?:などのJava演算子。 - 式演算子
  • maxsinなどのJavaメソッド名。 - MathDoubleなどの標準クラスのメソッド。修飾されていないメソッド名は、静的インポートの場合と同様に、オーバーロードの解決とともに読み取る必要があります。
  • bits(x) - 値xのベースとなるビットを生成する関数呼出し。 xが浮動小数点値の場合、これはdoubleToLongBits(x)またはfloatToIntBits(x)のいずれかです。 それ以外の場合、値はxのみです。
  • ESIZE - オペランド型のバイト単位のサイズ
  • EMASK - オペランド・タイプのビット・マスク(EMASK=(1<<(ESIZE*8))-1)
  • intVal, byteVal, etc. - 指定された型を持つ変換のオペランド

浮動小数点ベクトルに対する演算

  • 浮動小数点ベクトルに適用されるレーンワイズのベクトル操作は、特に指定しないかぎり、ドキュメントに記載されている同等のJava操作またはメソッドの精度および単調性の指定に従います。 ベクトル要素の型がfloatで、Java演算またはメソッドがdouble値のみを受け入れて戻す場合、各レーンのスカラー演算は、オペランドと結果をキャストするように調整されます。具体的には、floatオペランドがdoubleオペランドに拡張され、doubleの結果がfloatに絞り込まれます。
  • 浮動小数点ベクトルに適用される特定の連想演算子は、浮動小数点レーン値に対して実際には連想的ではありません。 具体的には、ADDおよびMULは、FloatVector.reduceLanes(Associative)などのクロス・レーン削減演算で使用されます。 このような演算の結果は、入力値(ベクトルとマスク)とレーン値を結合するために適用されるスカラー演算の順序の両方の関数になります。 このような場合、順序は意図的に定義されません。 これにより、JVMは実行時に基礎となるプラットフォームに最適なマシン・コードを生成できます。 プラットフォームでベクトル内のすべての値を加算または乗算するベクトル命令がサポートされている場合、または他の効率的なマシン・コード・シーケンスがある場合、JVMにはこのマシン・コードを生成するオプションがあります。 それ以外の場合は、デフォルトの実装が適用され、ベクトル要素が最初から最後まで順番に追加されます。 このため、このような演算の結果は同じ入力値に対して異なる場合があります。

特定のオペレータ・トークンが複数の異なるレーン・タイプに適用される場合があることに注意してください。 したがって、これらのトークンは、型固有のメソッド・ハンドルやラムダとは異なり、オーバーロードされた演算子またはメソッドのように動作します。 また、メソッド・ハンドルやラムダとは異なり、これらの演算子には演算セマンティクスはなく、applyまたはinvokeメソッドはありません。 これらは、ベクトル・オブジェクトからレーン演算をリクエストするためにのみ使用され、個々のレーン値に対して(単独で)で演算を実行することはできません。