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

[release/8.0] Numerics and Tensors backport #92245

Merged
merged 9 commits into from
Sep 19, 2023

Conversation

michaelgsharp
Copy link
Member

@michaelgsharp michaelgsharp commented Sep 18, 2023

Backporting the new BCL.Numerics and Tensors packages.

Customer Impact

Adds in MathF support for older frameworks so people don't have to roll their own. This allows for us and for 3rd parties to remove duplicated code in places where we are doing this ourselves.

The Tensors code adds in some missing math features that will be able to be hardware accelerated increasing the performance.

Testing

All new API's have automated testing.

Risk

Risk should be minimal to none. the BCL package is a new package adding in MathF support to older frameworks. The Tensors package hasn't been shipped for many releases, so these changes shouldn't affect anyone. And since we aren't changing existing API's, new automated testing should be enough to mitigated any risks.

michaelgsharp and others added 6 commits September 18, 2023 14:18
…otnet#91228)

* Adding a naive implementation of various primitive tensor operations

* Adding tests covering the new tensor primitives APIs

* Adding tensor primitives APIs to the ref assembly

* Allow .NET Framework to build/run

* Sync TFMs between ref and src, csproj simplication and clean-up

* Apply suggestions from code review

Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>

* Don't use var

* Fix the S.N.Tensors readme and remove the file marking it as non-shipping

---------

Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>
Co-authored-by: Michael Sharp <51342856+michaelgsharp@users.noreply.github.com>
* Start vectorizing TensorPrimitives

Just does two functions to establish the files into which the rest of the implementations can be moved.
* 6 more naive methods

* updates from pr comments
* Add remaining set of TensorPrimitives APIs for .NET 8

Adds non-vectorized implementations of:
- Max
- Min
- MaxMagnitude
- MinMagnitude
- IndexOfMax
- IndexOfMin
- IndexOfMaxMagnitude
- ConvertToHalf (only on .NET Core)
- ConvertToSingle (only on .NET Core)
- IndexOfMinMagnitude

Adds vectorized implementations of:
- Sum
- SumOfSquares
- SumOfMagnitudes
- Product
- ProductOfSums
- ProductOfDifferences

Also includes the helpers that'll make it trivial to vectorize Dot.

Beyond vectorizing the non-vectorized ones, the vectorized implementations should be improved further, including:
- Handling alignment better
- Vectorizing the remainder that doesn't fit in a vector rather than falling back to scalar

* Cleanup after previous PR, vectorize CosineSimilarity/Dot/L2Normalize/Distance, add tests

* Address PR feedback, and fix a few other issues
@ghost ghost assigned michaelgsharp Sep 18, 2023
@dotnet-issue-labeler dotnet-issue-labeler bot added needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners new-api-needs-documentation labels Sep 18, 2023
@dotnet-issue-labeler
Copy link

Note regarding the new-api-needs-documentation label:

This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change.

@ericstj ericstj changed the title Numerics and Tensors backport [release/8.0] Numerics and Tensors backport Sep 18, 2023
@ericstj
Copy link
Member

ericstj commented Sep 18, 2023

I think you are missing the following commits:
2dfee0f
91ac6b3

michaelgsharp and others added 2 commits September 18, 2023 15:04
* bcl numberics library added

* bcl done

* added explicit 2.1 target

* Minor doc updates

* Apply suggestions from code review

Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>

* fixes from PR comments

* minor csproj fixes

* fixed ref target frameworks

* minor ref csproj updates

* minor csproj updates

---------

Co-authored-by: Viktor Hofer <viktor.hofer@microsoft.com>
…mSource. (dotnet#91402)

* Microsoft.Bcl.Numerics.Tests: fix restore failure when DotNetBuildFromSource.

* Use NetCoreAppCurrent.

* Try fix CI test failures.
@michaelgsharp
Copy link
Member Author

Those commits have been added.

@ericstj ericstj added area-System.Numerics.Tensors Servicing-consider Issue for next servicing release review and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Sep 18, 2023
@ghost
Copy link

ghost commented Sep 18, 2023

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

Issue Details

Backporting the new BCL.Numerics and Tensors packages.

Customer Impact

Testing

Risk

Author: michaelgsharp
Assignees: michaelgsharp
Labels:

area-System.Numerics.Tensors, new-api-needs-documentation

Milestone: -

Copy link
Member

@ericstj ericstj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve of this feature for RC2. @artl93 please give it your ack.

Copy link
Contributor

@artl93 artl93 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

M2 approved.

@artl93 artl93 self-requested a review September 19, 2023 00:19
@artl93 artl93 added Servicing-approved Approved for servicing release and removed Servicing-consider Issue for next servicing release review labels Sep 19, 2023
@ericstj ericstj merged commit 4b7c754 into dotnet:release/8.0 Sep 19, 2023
165 of 180 checks passed
@carlossanlop
Copy link
Member

@michaelgsharp the CI failed in this PR: some Tensors types are not found. Can you please take a look tomorrow, since it's affecting the release/8.0 branch?

@stephentoub
Copy link
Member

@michaelgsharp the CI failed in this PR: some Tensors types are not found. Can you please take a look tomorrow, since it's affecting the release/8.0 branch?

#92269
#92270

@ericstj
Copy link
Member

ericstj commented Sep 19, 2023

I'll get this fixed ASAP. Looks like a couple ifdefs are missing. Must not be hit in main due to different target frameworks 🤔

@stephentoub
Copy link
Member

I'll get this fixed ASAP. Looks like a couple ifdefs are missing.

I already put up the prs for it.

@radical radical mentioned this pull request Sep 26, 2023
@ghost ghost locked as resolved and limited conversation to collaborators Oct 19, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants