Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[mono] Tracking: Implement System.Runtime.Intrinsics.Vector{512,128,256,64} #42350

Open
Tracked by #43051
imhameed opened this issue Sep 16, 2020 · 8 comments
Open
Tracked by #43051
Labels
area-Codegen-LLVM-mono runtime-mono specific to the Mono runtime tracking This issue is tracking the completion of other related issues.
Milestone

Comments

@imhameed
Copy link
Contributor

imhameed commented Sep 16, 2020

.NET 6

System.Runtime.Intrinsics.Vector128:

  • AsByte
    • amd64
    • arm64
  • AsDouble
    • amd64
    • arm64
  • AsInt16
    • amd64
    • arm64
  • AsInt32
    • amd64
    • arm64
  • AsInt64
    • amd64
    • arm64
  • AsSByte
    • amd64
    • arm64
  • AsSingle
    • amd64
    • arm64
  • AsUInt16
    • amd64
    • arm64
  • AsUInt32
    • amd64
    • arm64
  • AsUInt64
    • amd64
    • arm64
  • AsVector128
    • amd64
    • arm64
  • AsVector4
    • amd64 - Blocked on improved support for System.Numerics.Vector
    • arm64 - Blocked on improved support for System.Numerics.Vector
  • AsVector
    • amd64 - Blocked on improved support for System.Numerics.Vector
    • arm64 - Blocked on improved support for System.Numerics.Vector
  • As
    • amd64
    • arm64
  • Create
    • amd64
    • arm64
  • CreateScalarUnsafe
    • amd64
    • arm64
  • GetElement
    • amd64
    • arm64
  • WithElement
    • amd64 - This is intrinsified in Mono but not CoreCLR; revise this decision if cross-assembly AOT inlining works
    • arm64 - This is intrinsified in Mono but not CoreCLR; revise this decision if cross-assembly AOT inlining works
  • GetLower
    • amd64
    • arm64
  • GetUpper
    • amd64
    • arm64
  • ToScalar
    • amd64
    • arm64
  • ToVector256
    • amd64 - Blocked on 256-bit vector support
    • arm64 - Blocked on 256-bit vector support
  • ToVector256Unsafe
    • amd64 - Blocked on 256-bit vector support
    • arm64 - Blocked on 256-bit vector support
  • WithLower
    • amd64
    • arm64
  • WithUpper
    • amd64
    • arm64

System.Runtime.Intrinsics.Vector128<T>:

  • AllBitsSet
    • amd64
    • arm64
  • Count
    • amd64
    • arm64
  • Zero
    • amd64
    • arm64

System.Runtime.Intrinsics.Vector64:

  • As
    • amd64
    • arm64
  • AsByte
    • amd64
    • arm64
  • AsDouble
    • amd64
    • arm64
  • AsInt16
    • amd64
    • arm64
  • AsInt32
    • amd64
    • arm64
  • AsInt64
    • amd64
    • arm64
  • AsSByte
    • amd64
    • arm64
  • AsSingle
    • amd64
    • arm64
  • AsUInt16
    • amd64
    • arm64
  • AsUInt32
    • amd64
    • arm64
  • Create
    • amd64
    • arm64
  • CreateScalarUnsafe
    • amd64
    • arm64
  • GetElement
    • amd64
    • arm64
  • WithElement
    • amd64 - This is intrinsified in Mono but not CoreCLR; revise this decision if cross-assembly AOT inlining works
    • arm64 - This is intrinsified in Mono but not CoreCLR; revise this decision if cross-assembly AOT inlining works
  • ToScalar
    • amd64
    • arm64
  • ToVector128
    • amd64
    • arm64
  • ToVector128Unsafe
    • amd64
    • arm64

System.Runtime.Intrinsics.Vector64<T>:

  • Count
    • amd64
    • arm64
  • Zero
    • amd64
    • arm64
  • AllBitsSet
    • amd64
    • arm64

Future

System.Runtime.Intrinsics.Vector256:

  • As
    • amd64
    • arm64
  • AsByte
    • amd64
    • arm64
  • AsDouble
    • amd64
    • arm64
  • AsInt16
    • amd64
    • arm64
  • AsInt32
    • amd64
    • arm64
  • AsInt64
    • amd64
    • arm64
  • AsSByte
    • amd64
    • arm64
  • AsSingle
    • amd64
    • arm64
  • AsUInt16
    • amd64
    • arm64
  • AsUInt32
    • amd64
    • arm64
  • AsVector256
    • amd64
    • arm64
  • AsVector
    • amd64
    • arm64
  • Create
    • amd64
    • arm64
  • CreateScalarUnsafe
    • amd64
    • arm64
  • GetElement
    • amd64
    • arm64
  • WithElement
    • amd64
    • arm64
  • GetLower
    • amd64
    • arm64
  • ToScalar
    • amd64
    • arm64

System.Runtime.Intrinsics.Vector256<T>:

  • Count
    • amd64
    • arm64
  • Zero
    • amd64
    • arm64
  • AllBitsSet
    • amd64
    • arm64

System.Runtime.Intrinsics.Vector512:

  • As
    • amd64
    • arm64
  • AsByte
    • amd64
    • arm64
  • AsDouble
    • amd64
    • arm64
  • AsInt16
    • amd64
    • arm64
  • AsInt32
    • amd64
    • arm64
  • AsInt64
    • amd64
    • arm64
  • AsSByte
    • amd64
    • arm64
  • AsSingle
    • amd64
    • arm64
  • AsUInt16
    • amd64
    • arm64
  • AsUInt32
    • amd64
    • arm64
  • AsVector256
    • amd64
    • arm64
  • AsVector
    • amd64
    • arm64
  • Create
    • amd64
    • arm64
  • CreateScalarUnsafe
    • amd64
    • arm64
  • GetElement
    • amd64
    • arm64
  • WithElement
    • amd64
    • arm64
  • GetLower
    • amd64
    • arm64
  • ToScalar
    • amd64
    • arm64

System.Runtime.Intrinsics.Vector512<T>:

  • Count
    • amd64
    • arm64
  • Zero
    • amd64
    • arm64
  • AllBitsSet
    • amd64
    • arm64
@imhameed imhameed added runtime-mono specific to the Mono runtime area-Codegen-LLVM-mono labels Sep 16, 2020
@imhameed imhameed added this to the 6.0.0 milestone Sep 16, 2020
@Dotnet-GitSync-Bot Dotnet-GitSync-Bot added the untriaged New issue has not been triaged by the area owner label Sep 16, 2020
@ghost
Copy link

ghost commented Sep 16, 2020

Tagging subscribers to this area:
See info in area-owners.md if you want to be subscribed.

@imhameed imhameed removed the untriaged New issue has not been triaged by the area owner label Sep 16, 2020
@imhameed imhameed added the tracking This issue is tracking the completion of other related issues. label Oct 28, 2020
@imhameed imhameed self-assigned this Jan 12, 2021
@imhameed
Copy link
Contributor Author

Some work towards completing this is done in: #47028

monojenkins pushed a commit to monojenkins/mono that referenced this issue Jan 29, 2021
Contributes to dotnet/runtime#42350

This PR added support for the following API's:
- As*
- Create(*)
- CreateScalar(*)
- CreateScalarUnsafe(*)
imhameed added a commit that referenced this issue Feb 17, 2021
Contributes to #42350

This change:

- Conditionally marks Vector64<T> as a SIMD type. Vector64<T> is treated as a
SIMD type on amd64 and arm64 only when the LLVM backend is in use. Vector128<T>
continues to be supported with both LLVM and mini on amd64, as before; on arm64,
it continues to only be supported with LLVM.

- Checks vector widths for compatibility when bitcasting.

- Slightly cleans up return value handling for SIMD value types--conversion
from an aggregate to an LLVM vector-typed value now happens in one location.

- Removes a 128-bit SIMD assumption in the lowering code for OP_SETRET.

- Renames `emit_vector128` to `emit_sri_vector` and makes it width-agnostic.

- Improves the generated IR for non-broadcasting Vector64/Vector128.Create; the
resulting code works entirely in registers and does not depend on temporary
stack storage for writing values into individual vector lanes.

Co-authored-by: Imran Hameed <imhameed@microsoft.com>
@imhameed
Copy link
Contributor Author

imhameed commented Jul 1, 2021

The non-System.Numerics.Vector and non-256-bit-SIMD parts were finished in: #54924

@imhameed imhameed modified the milestones: 6.0.0, 7.0.0 Jul 12, 2021
@kasperk81
Copy link
Contributor

were there some disabled tests and that should be enabled after #54924 work or is there no way to confirm in tests whether underlying runtime used software fallback or the real thing?

@fanyang-mono
Copy link
Member

Didn't have bandwidth to work on Vector256 in .NET7. Moving to milestone 8.0.0

@fanyang-mono
Copy link
Member

Moving tracking issue to 9.0.0

@fanyang-mono fanyang-mono modified the milestones: 8.0.0, 9.0.0 Jul 12, 2023
@kasperk81
Copy link
Contributor

vec 512 is missing from the list. would be nice to have #87037 fixed in 8.0 so software fallback work on mono

@fanyang-mono fanyang-mono changed the title [mono] Tracking: Implement System.Runtime.Intrinsics.Vector{128,256,64} [mono] Tracking: Implement System.Runtime.Intrinsics.Vector{512,128,256,64} Jul 13, 2023
@fanyang-mono
Copy link
Member

Moving tracking issue to 10.0.0

@fanyang-mono fanyang-mono modified the milestones: 9.0.0, 10.0.0 Jul 26, 2024
@fanyang-mono fanyang-mono removed their assignment Jul 26, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-Codegen-LLVM-mono runtime-mono specific to the Mono runtime tracking This issue is tracking the completion of other related issues.
Projects
None yet
Development

No branches or pull requests

4 participants