Skip to content

Instantly share code, notes, and snippets.

@kunalspathak
kunalspathak / HardwareIntrinsics_Arm_r.md
Last active June 22, 2024 16:03
GatherVector test failure
D:\kpathak\Core_Root_callee_Save\Core_Root\corerun.exe -p "System.Reflection.Metadata.MetadataUpdater.IsSupported=false" -p "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true"  D:\kpathak\tests\caller-save\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_GatherVector_Bases_double_ulong
09:01:49.183 Running test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_GatherVector_Bases_double_ulong()
Supported ISAs:
  AdvSimd:   True
  Aes:       True
  ArmBase:   True
  Crc32:     True
  Dp:        True
  Rdm:       False
; Assembly listing for method System.Text.Unicode.Utf16Utility:GetPointerToFirstInvalidChar(ulong,int,byref,byref):ulong (FullOpts)
; Emitting BLENDED_CODE for generic ARM64 - Windows
; FullOpts code
; optimized code
; optimized using Static PGO
; fp based frame
; fully interruptible
; with Static PGO: fgCalledCount is 100
; PGO data available, but IL did not match
@kunalspathak
kunalspathak / sve_r.txt
Created June 18, 2024 04:26
absolutecompare
Starting test: D:\kpathak\Core_Root_absolutecompare\Core_Root\corerun.exe -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true D:\kpathak\tests\absoluteCompare\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_AbsoluteCompare
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteCompareGreaterThan_float() : 21
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteCompareGreaterThan_double() : 21
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteCompareGreaterThanOrEqual_float() : 21
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteCompareGreaterThanOrEqual_double() : 21
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteCompareLessThan_float() : 21
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm
@kunalspathak
kunalspathak / sve_r.txt
Created June 12, 2024 14:47
CreateTrue
Starting test: D:\kpathak\Core_Root_createtrue\Core_Root\corerun.exe -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true D:\kpathak\tests\createtrue\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_CreateTrue
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_CreateTrueMaskByte() : 3
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_CreateTrueMaskDouble() : 3
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_CreateTrueMaskInt16() : 3
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_CreateTrueMaskInt32() : 3
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_CreateTrueMaskInt64() : 3
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_CreateTrueMaskSByte() : 3
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.P
@kunalspathak
kunalspathak / sve_r.txt
Created June 5, 2024 17:54
Compute*BitAddresses
Starting test: D:\kpathak\Core_Root_computeAddress\Core_Root\corerun.exe -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true D:\kpathak\tests\computeaddress\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_Compute
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_Compute16BitAddresses_uint_int() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_Compute16BitAddresses_uint() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_Compute16BitAddresses_ulong_long() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_Compute16BitAddresses_ulong() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_Compute32BitAddresses_uint_int() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_Compute32BitAddresse

Problem Statement

In https://github.com/dotnet/performance, we have seen lot of MicroBenchmarks regress that often is the case of Intel's JCC erratum. As such, we wanted to see if we can mitigate it or add a switch in codegen to mitigate it for experimental purpose and performance comparison.

Observation

@kunalspathak
kunalspathak / sve_r.txt
Created May 30, 2024 23:26
loadvector_nonfaulting
Starting test: D:\kpathak\Core_Root_loadnonfaulting\Core_Root\corerun.exe -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true D:\kpathak\tests\loadnonfaulting\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_LoadVector
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVector_float() : 1
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVector_double() : 1
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVector_sbyte() : 1
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVector_short() : 1
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVector_int() : 1
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_LoadVector_long() : 1
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve
Starting test: D:\kpathak\Core_Root_math8\Core_Root\corerun.exe -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true D:\kpathak\tests\math8\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_DotProduct
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_DotProduct_int() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_DotProduct_long() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_DotProduct_uint() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_DotProduct_ulong() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_DotProductBySelectedScalar_int() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_DotProductBySelectedScalar_long() : 16
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sv
Starting test: D:\kpathak\Core_Root_math7\Core_Root\corerun.exe -p System.Reflection.Metadata.MetadataUpdater.IsSupported=false -p System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization=true D:\kpathak\tests\math7\HardwareIntrinsics\HardwareIntrinsics_Arm_r\HardwareIntrinsics_Arm_r.dll Sve_AbsoluteDifference_
===================Running default===================
------------------- {} -------------------
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteDifference_float() : 19
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteDifference_double() : 19
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteDifference_sbyte() : 19
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteDifference_short() : 19
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteDifference_int() : 19
Passed test: _Sve_r::JIT.HardwareIntrinsics.Arm._Sve.Program.Sve_AbsoluteDifference_long() : 19
Passed test: _Sve_r::
@kunalspathak
kunalspathak / all_results.md
Last active May 13, 2024 16:17
Loop performance comparison
Method Duration (in ms) Code size (in bytes)
sum_scalar 12253 64
sum_vector128 4865 128
sum_advsimd 4867 128
sum_sve (128-bits) 4890 84
sum_sve (256-bits) 2576 84