VREDUCEPH

Transformación de reducción de rendimiento en los valores de FP16 empaquetados

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
EVEX.128.NP.0F3A.W0 56 /r /ibVREDUCEPH xmm1{k1}{z}, xmm2/m128/m16bcst, imm8AValidoValidoTransformación de reducción de rendimiento en los valores de AND AVX512VL empaquetados) FP16 en xmm2/m128/m16bcst por OR AVX10.1 restando un número de bits de fracción especificados por el campo imm8. Almacene el resultado en xmm1 sujeto a máscara de escritura k1.
EVEX.256.NP.0F3A.W0 56 /r /ibVREDUCEPH ymm1{k1}{z}, ymm2/m256/m16bcst, imm8AValidoValidoTransformación de reducción de rendimiento en los valores de AND AVX512VL empaquetados) FP16 en ymm2/m256/m16bcst por OR AVX10.1 restando un número de bits de fracción especificados por el campo imm8. Almacene el resultado en ymm1 sujeto a máscara de escritura k1.
EVEX.512.NP.0F3A.W0 56 /r /ibVREDUCEPH zmm1{k1}{z}, zmm2/m512/m16bcst {sae}, imm8AValidoValidoRealizar la transformación de la reducción en valores de AVX10.1 FP16 en zmm2/m512/m16bcst restando una serie de bits de fracción especificados por el campo imm8. Almacene el resultado en zmm1 sujeto a máscara de escritura k1.

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

A

  1. modrm.reg escriturabyte ModRM, campo reg (bits 5-3)
  2. modrm.rm lecturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  3. imm8 lecturabyte inmediato que sigue a la instruccion

Tupla: Full

Coste medido

Cargando las mediciones de arch-data...

Descripción

Esta instrucción realiza una transformación de reducción de los valores binarios codificados FP16 en el operando de origen (el segundo operando) y almacena los resultados reducidos en formato FP binario al operando de destino (el primer operando) bajo la máscara de escritura k1.

La transformación de la reducción resta la parte entero y los bits fraccionales principales M del valor binario fuente FP, donde M es un entero sin firma especificado por imm8[7:4]. Específicamente, la transformación de la reducción se puede expresar como: dest = src - (ROUND(2M src) 2-M donde ROUND() trata src, 2M, y su producto como números binarios de FP con exponentes de significado normalizado y parcial. La magnitud del resultado reducido se puede expresar considerando src = 2p * man2, where man2' is the normalized significand and p' is the unbiased exponent. Entonces, si RC=RNE: 0 SilencioResultado sometido 2-M-1.

Then if RC RNE: 0 |ReducedResult| < 2-M.

Esta instrucción podría terminar con una excepción de precisión set. Sin embargo, en caso de SPE set (es decir, Suppress excepción de precisión, que es imm8[3]=1), no se reporta excepción de precisión.

Esta instrucción puede generar un pequeño resultado no cero. Si lo hace, no reporta la excepción de la subida, incluso si las excepciones de la subida son desenmascaradas (la bandera U en el registro MXCSR es 0).

Para casos especiales, véase el cuadro 5-28.

Casos especiales de VREDUCEPH/VREDUCESH

|Src1| < 2-MRU, Src10Src1
RD, Src10Src1
RD, Src1 <0Round(Src1 + 2-M)
Src1 = +/-0 orNOT RD+0.0
Dest = +/-0 (Src1 )RD-0.0
Src1 = +/-Cualquier+0.0
Src1 = +/-NANCualquierQNaN (Src1)

Operación

def reduce_fp16(src, imm8):
    nan := (src.exp = 0x1F) and (src.fraction != 0)
    if nan:
          return QNAN(src)
    m := imm8[7:4]
    rc := imm8[1:0]
    rc_source := imm8[2]
    spe := imm[3] // suppress precision exception
    tmp := 2^(-m) * ROUND(2^m * src, spe, rc_source, rc)
    tmp := src - tmp // using same RC, SPE controls
    return tmp

VREDUCEPH dest{k1}, src, imm8
VL = 128, 256 or 512
KL := VL/16

FOR i := 0 to KL-1:
    IF k1[i] or *no writemask*:
          IF SRC is memory and (EVEX.b = 1):
                tsrc := src.fp16[0]
          ELSE:
                tsrc := src.fp16[i]
          DEST.fp16[i] := reduce_fp16(tsrc, imm8)
    ELSE IF *zeroing*:
          DEST.fp16[i] := 0
    //else DEST.fp16[i] remains unchanged

DEST[MAXVL-1:VL] := 0

Intel C/C++ compilador intrínseco

VREDUCEPH __m128h _mm_mask_reduce_ph (__m128h src, __mmask8 k, __m128h a, int imm8);
VREDUCEPH __m128h _mm_maskz_reduce_ph (__mmask8 k, __m128h a, int imm8);
VREDUCEPH __m128h _mm_reduce_ph (__m128h a, int imm8);
VREDUCEPH __m256h _mm256_mask_reduce_ph (__m256h src, __mmask16 k, __m256h a, int imm8);
VREDUCEPH __m256h _mm256_maskz_reduce_ph (__mmask16 k, __m256h a, int imm8);
VREDUCEPH __m256h _mm256_reduce_ph (__m256h a, int imm8);
VREDUCEPH __m512h _mm512_mask_reduce_ph (__m512h src, __mmask32 k, __m512h a, int imm8);
VREDUCEPH __m512h _mm512_maskz_reduce_ph (__mmask32 k, __m512h a, int imm8);
VREDUCEPH __m512h _mm512_reduce_ph (__m512h a, int imm8);
VREDUCEPH __m512h _mm512_mask_reduce_round_ph (__m512h src, __mmask32 k, __m512h a, int imm8, const int sae);
VREDUCEPH __m512h _mm512_maskz_reduce_round_ph (__mmask32 k, __m512h a, int imm8, const int sae);
VREDUCEPH __m512h _mm512_reduce_round_ph (__m512h a, int imm8, const int sae);

SIMD coma flotante Excepciones

Invalid, Precision.

Si SPE está habilitado, excepción de precisión no se reporta (sin importar la máscara de excepción MXCSR).

Otras excepciones

Instrucciones codificadas por EVEX, ver Tabla 2-48, "Tipo E2 Clase Condiciones de Excepción."

Fuentes