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

Optimize System.Collections.BitArray using arm64 intrinsics #33309

Closed
BruceForstall opened this issue Mar 6, 2020 · 6 comments · Fixed by #33749
Closed

Optimize System.Collections.BitArray using arm64 intrinsics #33309

BruceForstall opened this issue Mar 6, 2020 · 6 comments · Fixed by #33749

Comments

@BruceForstall
Copy link
Member

This item tracks the conversion of the System.Collections.BitArray class to use arm64 intrinsics.

Related: #33308

@Gnbrkm41
Copy link
Contributor

I think I can put up a PR for this, but we seem to be lacking a couple instructions that would be nice to have:

  1. Unloading values of single SIMD register where the vector contains a single element (e.g. Vector64 returned from AddAcross) to non-vector registers - vduph_laneq_s16 etc?
  2. Unloading values of single SIMD register to a memory location ("Store") - vst1q_s16 etc?

@echesakov
Copy link
Contributor

@Gnbrkm41

Unloading values of single SIMD register where the vector contains a single element (e.g. Vector64 returned from AddAcross) to non-vector registers - vduph_laneq_s16 etc?

I believe this should be supported via ToScalar() method. cc @tannergooding to confirm

Unloading values of single SIMD register to a memory location ("Store") - vst1q_s16 etc?

I am working on these #33461 #33535

@Gnbrkm41
Copy link
Contributor

Ah, did not notice ToScalar extension method 🙂. I did manage to work around using a different approach which probably is better.

It still would be nice to have those exposed as intrinsics for feature parity, though.

@tannergooding
Copy link
Member

It still would be nice to have those exposed as intrinsics for feature parity, though.

For some cases, there isn't a corresponding intrinsic on the native side. Where there is, we also expose it there (for example int Sse2.ConvertToInt32(Vector128<int> value) on the x86 side, which corresponds to MOVD reg/m32, xmm).

@echesakov
Copy link
Contributor

It still would be nice to have those exposed as intrinsics for feature parity, though.

The similar functionality will be exposed as a part of #24588 - I am working on this at the moment

@echesakov
Copy link
Contributor

@Gnbrkm41 FYI, I just merged Store intrinsics implementation (#33535), so you should be unblocked now.

Let me know if you need some help with running you pr on an arm64 device/collecting jit disasm for this issue.

@tannergooding tannergooding removed the untriaged New issue has not been triaged by the area owner label Mar 30, 2020
@ghost ghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants