public void RunStructFldScenario(SimpleBinaryOpTest__CompareOrderedDouble testClass) { var result = Avx.CompareOrdered(_fld1, _fld2); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr); }
public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); var result = Avx.CompareOrdered(_fld1, _fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr); }
public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); var test = TestStruct.Create(); var result = Avx.CompareOrdered(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr); }
public void RunClassLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); var test = new SimpleBinaryOpTest__CompareOrderedDouble(); var result = Avx.CompareOrdered(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr); }
public void RunLclVarScenario_LoadAligned() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_LoadAligned)); var op1 = Avx.LoadAlignedVector256((Double *)(_dataTable.inArray1Ptr)); var op2 = Avx.LoadAlignedVector256((Double *)(_dataTable.inArray2Ptr)); var result = Avx.CompareOrdered(op1, op2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(op1, op2, _dataTable.outArrayPtr); }
public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); var op1 = Unsafe.Read <Vector256 <Double> >(_dataTable.inArray1Ptr); var op2 = Unsafe.Read <Vector256 <Double> >(_dataTable.inArray2Ptr); var result = Avx.CompareOrdered(op1, op2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(op1, op2, _dataTable.outArrayPtr); }
public void RunBasicScenario_Load() { TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_Load)); var result = Avx.CompareOrdered( Avx.LoadVector256((Double *)(_dataTable.inArray1Ptr)), Avx.LoadVector256((Double *)(_dataTable.inArray2Ptr)) ); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, _dataTable.outArrayPtr); }
public void RunBasicScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunBasicScenario_UnsafeRead)); var result = Avx.CompareOrdered( Unsafe.Read <Vector256 <Single> >(_dataTable.inArray1Ptr), Unsafe.Read <Vector256 <Single> >(_dataTable.inArray2Ptr) ); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.inArray1Ptr, _dataTable.inArray2Ptr, _dataTable.outArrayPtr); }
public void RunStructLclFldScenario_Load() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); var test = TestStruct.Create(); var result = Avx.CompareOrdered( Avx.LoadVector256((Single *)(&test._fld1)), Avx.LoadVector256((Single *)(&test._fld2)) ); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr); }
public void RunStructFldScenario_Load(SimpleBinaryOpTest__CompareOrderedDouble testClass) { fixed(Vector256 <Double> *pFld1 = &_fld1) fixed(Vector256 <Double> *pFld2 = &_fld2) { var result = Avx.CompareOrdered( Avx.LoadVector256((Double *)(pFld1)), Avx.LoadVector256((Double *)(pFld2)) ); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr); } }
public void RunClassFldScenario_Load() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); fixed(Vector256 <Double> *pFld1 = &_fld1) fixed(Vector256 <Double> *pFld2 = &_fld2) { var result = Avx.CompareOrdered( Avx.LoadVector256((Double *)(pFld1)), Avx.LoadVector256((Double *)(pFld2)) ); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr); } }
public void RunClsVarScenario_Load() { TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); fixed(Vector256 <Single> *pClsVar1 = &_clsVar1) fixed(Vector256 <Single> *pClsVar2 = &_clsVar2) { var result = Avx.CompareOrdered( Avx.LoadVector256((Single *)(pClsVar1)), Avx.LoadVector256((Single *)(pClsVar2)) ); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_clsVar1, _clsVar2, _dataTable.outArrayPtr); } }
public void RunClassLclFldScenario_Load() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); var test = new SimpleBinaryOpTest__CompareOrderedSingle(); fixed(Vector256 <Single> *pFld1 = &test._fld1) fixed(Vector256 <Single> *pFld2 = &test._fld2) { var result = Avx.CompareOrdered( Avx.LoadVector256((Single *)(pFld1)), Avx.LoadVector256((Single *)(pFld2)) ); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr); } }
public unsafe static Vector128 <float> Exp2(Vector128 <float> power) { Debug.Assert(Avx.MoveMask(Avx.And(Avx.CompareGreaterThan(power, AvxExtensions.BroadcastScalarToVector128(MathV.FloatMaximumPower)), Avx.CompareOrdered(power, power))) == 0); byte zeroMask = (byte)Avx.MoveMask(Avx.CompareLessThan(power, AvxExtensions.BroadcastScalarToVector128(-MathV.FloatMaximumPower))); Vector128 <float> integerPart = Avx.RoundToNearestInteger(power); Vector128 <float> integerExponent = Avx.ShiftLeftLogical(Avx.Add(Avx.ConvertToVector128Int32(integerPart), MathV.FloatMantissaZero128), MathV.FloatMantissaBits).AsSingle(); // evaluate polynomial Vector128 <float> beta1 = AvxExtensions.BroadcastScalarToVector128(MathV.Exp2Beta1); Vector128 <float> beta2 = AvxExtensions.BroadcastScalarToVector128(MathV.Exp2Beta2); Vector128 <float> beta3 = AvxExtensions.BroadcastScalarToVector128(MathV.Exp2Beta3); Vector128 <float> beta4 = AvxExtensions.BroadcastScalarToVector128(MathV.Exp2Beta4); Vector128 <float> x = Avx.Subtract(power, integerPart); // fractional part Vector128 <float> fractionalExponent = AvxExtensions.BroadcastScalarToVector128(MathV.One); fractionalExponent = Avx.Add(fractionalExponent, Avx.Multiply(beta1, x)); Vector128 <float> x2 = Avx.Multiply(x, x); fractionalExponent = Avx.Add(fractionalExponent, Avx.Multiply(beta2, x2)); Vector128 <float> x3 = Avx.Multiply(x2, x); fractionalExponent = Avx.Add(fractionalExponent, Avx.Multiply(beta3, x3)); Vector128 <float> x4 = Avx.Multiply(x3, x); fractionalExponent = Avx.Add(fractionalExponent, Avx.Multiply(beta4, x4)); // form exponent Vector128 <float> exponent = Avx.Multiply(integerExponent, fractionalExponent); // suppress exponent overflows by truncating values less than 2^-127 to zero if (zeroMask != 0) { exponent = Avx.Blend(exponent, Vector128 <float> .Zero, zeroMask); } return(exponent); }