Class VectorOperators

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

public abstract class VectorOperators extends Object
该类仅包含描述按通道进行向量操作的静态常量,以及对其进行分类的嵌套接口。静态常量用作在向量表达式中表示特定请求的通道操作的令牌,例如在w = v0.lanewise(ADD, v1)中的ADD令牌。

每个单独操作令牌的文档非常简要,给出了令牌请求的操作的符号Java表达式。这些符号表达式使用以下传统元素:

  • abc — 通道值的名称
  • Java操作符如+?:等 — 表达式操作符
  • Java方法名称如maxsin等 — 标准类(如MathDouble等)中的方法。未经限定的方法名称应当被视为在静态导入的上下文中,并解析重载。
  • bits(x) — 一个函数调用,产生值x的基础位。如果x是浮点值,则为doubleToLongBits(x)floatToIntBits(x)。否则,该值就是x
  • ESIZE — 操作数类型的字节大小
  • EMASK — 操作数类型的位掩码,其中EMASK=(1<<(ESIZE*8))-1
  • intValbyteVal等 — 转换的操作数,带有指定类型

浮点向量操作

  • 适用于浮点向量的通道操作遵循等效Java操作或方法的准确性和单调性规范,除非另有规定。如果向量元素类型为float,而Java操作或方法仅接受和返回double值,则每个通道上的标量操作将被调整以转换操作数和结果,具体地将float操作数扩展为double操作数,并将double结果缩小为float
  • 适用于浮点向量的某些关联操作在浮点通道值上并非真正关联。具体来说,当与跨通道缩减操作一起使用时,例如与ADDMUL一起使用,如FloatVector.reduceLanes(Associative)。这种操作的结果既取决于输入值(向量和掩码)也取决于应用于组合通道值的标量操作的顺序。在这种情况下,故意不定义顺序。这允许JVM在运行时为底层平台生成最佳机器代码。如果平台支持向量指令来添加或乘以向量中的所有值,或者存在其他有效的机器代码序列,则JVM可以选择生成此机器代码。否则,将应用默认实现,从头到尾顺序添加向量元素。因此,对于相同的输入值,此类操作的结果可能会有所不同。

请注意,特定操作令牌可能适用于多种不同的通道类型。因此,这些令牌的行为类似于重载的操作符或方法,而不是特定于类型的方法句柄或lambda。与方法句柄或lambda不同,这些操作符没有操作语义;它们仅用于从向量对象请求通道操作,并且不能(单独)对单个通道值执行操作。