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

V0.9.0 #22

Merged
merged 71 commits into from
Aug 19, 2018
Merged

V0.9.0 #22

merged 71 commits into from
Aug 19, 2018

Conversation

chewxy
Copy link
Member

@chewxy chewxy commented Feb 13, 2018

v0.9.0

The changes made in this PR is aimed at better supporting v0.9.0 of Gorgonia itself. Along the way there are some new features and optimizations, as well as some bug fixes.

The majority of the work in supporting v0.9.0 of Gorgonia is to shore up the underlying architecture to support CUDA related engines. This means moving more things to rely on Engine while keeping the engine interface overheads low. Additionally this also means better support for column major data layouts.

  • Heavier reliance on Engine for most functions. This allows for extensibility on the data structure.
  • Long standing bugbear - concepts of RowVec and ColVec has been removed (thanks to @matdodgson)
    • Touch points: ap.go, iterator.go, iterator_mult.go.shape.go, and the tests that were correct prior to this change have semantic meaning changes too.
    • POTENTIAL TECH DEBT: iterator_mult.go - the solution of filling with ones is a little too dodgy for my liking. The alternative would be to change BroadcastStrides which will change even more things (Concat, Stack etc)
  • Optimization:
    • AP has been depointerized in *Dense (thanks to @docmerlin). This reduces some amount of GC pointer chasing, but not all
    • allocation is slightly improved. ((array).fromSliceOrArrayer, (array).fix() and (array).forcefix() are part of the improvement around the logic of allocating data.
  • Bug fixes:
    • Fixes subtle errors in linear algebra functions. The result is a slightly longer function but easier to reason with.
    • Fixes some subtle bugs in Concat - see also Node.Value() panics without any error infomation gorgonia#218
    • Fixed some small bugs with regards to SampleIndex that only show up when the slices have extreme lengths. This API should have been deprecated 2 years ago, but eh... it touched a lot of external projects.
  • API changes:
    • Diag is made available. Relies heavily on an Engine's implementation
    • NewFlatIterator is unexported.
    • NewAP is unexported.
    • MakeAP is used instead.
    • (Tensor).DataOrder() is added to the definiiton of what a Tensor is.
    • (Shape).IsScalarEquiv() is a new method. This corresponds to the change of semantics of what a Shape should be.
    • (Shape).CalcStrides() is exported now. This enables users to correctly calculate strides that are consistent to what the package expects.
    • (Shape).CalcStridesColMajor() is exported as the method to calculate the strides of a Col-Major *Dense.
  • New Interfaces:
    • NonStdEngine is an Engine that does not allocate using the default allocator. This allows for both embedding a DefaultEngine` while overriding the allocation behaviour.
    • Diager - any engine that can return a tensor that only contains the diagonal values of the input
    • NaNChecker and InfChecker - engines that can check a tensor for NaN and Inf
  • New Features:
  • New Subpackages:
    • native is a subpackage that essentially gives users a native, Go-based iterator. Basically the ability to go from a *Dense to a [][]T or [][][]T without extra allocations (for the data). This was pulled into master earlier, but as of v0.9.0, the generic version is available too.
  • Semantic Changes:
    • Shape has semantic changes regarding whether or not a shape is scalar. A scalar shape is defined to be Shape{} or Shape{1} only. Formerly, Shape{1,1} was also considered to be scalar. Now they're considered to be ScalarEquivalent (along with Shape{1, 1, .... , 1})
    • A Dtype that is is orderable is also now comparable for equality. If RegisterOrd is called with a new Dtype, it is also automatically registered as Eq.
  • Cosmetic Changes:
    • README has been updated to point to correct doc pages

@coveralls
Copy link

Coverage Status

Coverage decreased (-0.1%) to 70.587% when pulling 29aeec7 on v0.9.0-working into 2ab2564 on master.

@coveralls
Copy link

coveralls commented Feb 13, 2018

Coverage Status

Coverage increased (+1.9%) to 72.507% when pulling 6b785f4 on v0.9.0-working into 1ad4131 on master.

Mat Dodgson and others added 29 commits May 26, 2018 14:53
…dimensions with 1 element).

- included automated tests
Added a Transposed flag to DataOrder
Added a new way to distinguish non-standard allocating engines
fixed up Outer for colmajor
Concat doesn't work on cases where the inner dimensions are 1 yet though (example: (2,3,2) with (2,1,2)) - this is due to slices squeezing out the extra ones
@chewxy chewxy merged commit 8eeece3 into master Aug 19, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Col major tensor support
3 participants