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

Document when each of the vectorization approaches should be used #64409

Open
Tracked by #79005
stephentoub opened this issue Jan 27, 2022 · 2 comments
Open
Tracked by #79005

Document when each of the vectorization approaches should be used #64409

stephentoub opened this issue Jan 27, 2022 · 2 comments
Assignees
Labels
area-System.Runtime.Intrinsics documentation Documentation bug or enhancement, does not impact product or test code
Milestone

Comments

@stephentoub
Copy link
Member

We now have:

  • Vector<T>
  • Vector64<T>
  • Vector128<T>
  • Vector256<T>
  • Each of the low-level intrinsics namespaces, e.g. Avx2

As part of shipping .NET 7 which includes several of these systems a new, it will be important to provide clear guidance on which should be used when. Should a developer start with Vector<T> and only fall back to other things if there are operations required it can't support? If not, why not? If a developer is using Vector128<T>, when should they also add a "duplicated" path for Vector256<T>? When should they also add a "duplicated" path for Vector64<T>? What are the most likely cases where VectorN<T> are insufficient and a developer will want to target the individual instruction set namespaces directly? Are there situations where they might be used together, e.g. a Vector128<T> path and then separate paths for the individual instruction sets? Etc.

@stephentoub stephentoub added documentation Documentation bug or enhancement, does not impact product or test code area-System.Runtime.Intrinsics labels Jan 27, 2022
@stephentoub stephentoub added this to the 7.0.0 milestone Jan 27, 2022
@ghost
Copy link

ghost commented Jan 27, 2022

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics
See info in area-owners.md if you want to be subscribed.

Issue Details

We now have:

  • Vector<T>
  • Vector64<T>
  • Vector128<T>
  • Vector256<T>
  • Each of the low-level intrinsics namespaces, e.g. Avx2

As part of shipping .NET 7 which includes several of these systems a new, it will be important to provide clear guidance on which should be used when. Should a developer start with Vector<T> and only fall back to other things if there are operations required it can't support? If not, why not? If a developer is using Vector128<T>, when should they also add a "duplicated" path for Vector256<T>? When should they also add a "duplicated" path for Vector64<T>? What are the most likely cases where VectorN<T> are insufficient and a developer will want to target the individual instruction set namespaces directly? Are there situations where they might be used together, e.g. a Vector128<T> path and then separate paths for the individual instruction sets? Etc.

Author: stephentoub
Assignees: -
Labels:

documentation, area-System.Runtime.Intrinsics

Milestone: 7.0.0

@dotnet-issue-labeler dotnet-issue-labeler bot added the untriaged New issue has not been triaged by the area owner label Jan 27, 2022
@jeffschwMSFT jeffschwMSFT removed the untriaged New issue has not been triaged by the area owner label Jan 28, 2022
@jeffhandley jeffhandley modified the milestones: 7.0.0, 8.0.0 Sep 8, 2022
@tannergooding tannergooding modified the milestones: 8.0.0, Future Jul 24, 2023
@tannergooding
Copy link
Member

@adamsitnik started a doc on this topic, we can continue working on that in .NET 9+

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-System.Runtime.Intrinsics documentation Documentation bug or enhancement, does not impact product or test code
Projects
None yet
Development

No branches or pull requests

5 participants