ArrayFire v3.6.2 Release

Stefan YurkevitchArrayFire Leave a Comment

We are excited to announce ArrayFire v3.6.2! In this release we have fixed a number of bugs, improved documentation, and added a few features while improving performance as always. We highlight some of the exciting changes below.

New features and improvements

Several features added in v3.6.2 are concerned with batching and broadcasting.

In v3.6 we introduced batched matmul() allowing you to multiply several matrices at the same time. You could only batch arrays that were the same shape and size on the left hand side and the right hand size. In cases when you wanted to multiply one matrix with multiple matrices, you had to tile the inputs so that they were the same shape before you performed the multiplication. We have removed this restriction in v3.6.2. You can now multiply a 2D matrix with a 3D matrix and ArrayFire will automatically and efficiently perform the calculation without intermediate allocations.

The select() function can now batch the conditional array in addition to the left hand side and right hand side arrays. The new rules can be found in our documentation page.

The NearestNeighbour() function can now return multiple nearest neighbors. Previously, it was limited to one nearest neighbor. 

Significant speedups have been implemented in the Morphological functions by pre-computing offsets internally. Thank you Vardan Akopian for this improvement!

We have improved the documentation of several functions in this release. Among the functions that were improved are wrap(), unwrap(), accum(), tile(), approx{1,2}(), select(), lookup(), set operations and more! If you have questions, or have ideas to improve the docs please let us know by opening a GitHub issue.

Added support for CUDA 10 and Turing (compute 7.5) cards.

Bug fixes

A number of bugs have been reported and fixed in v3.6.2.

  • An overflow was caught and removed fromdim4::ndims.
  • Fixed truncation issues with integral types in the pow() function.
  • Fixed issues with indexing draw histogram functions.
  • In some cases when indexing with an af::array, the correct strides would not be used.
  • CLBlast errors on exit on Windows have been fixed.

Testing

In addition to improving documentation, we have been working on making  tests easier to write while making our error messages more clear than ever. 

New assertions have been added which allow for simpler comparisons of af::arrays with different testing data types. Among these assertions are:

  • ASSERT_SUCCESS ( CALL )
  • ASSERT_ARRAYS_EQ ( EXPECTED, ACTUAL )
  • ASSERT_ARRAYS_NEAR ( EXPECTED, ACTUAL, MAX_ABSDIFF )
  • ASSERT_VEC_ARRAY_EQ ( EXPECTED_VEC, EXPECTED_ARR_DIMS, ACTUAL_ARR )
  • ASSERT_VEC_ARRAY_NEAR ( EXPECTED_VEC, EXPECTED_ARR_DIMS, ACTUAL_ARR, MAX_ABSDIFF )

The assertions provide additional functionality by comparing expected types and dimensions, comparing elements for equality or closeness, and displaying the surrounding values in case of errors.

Check out our wiki on how to write tests for ArrayFire.

Download

ArrayFire v3.6.2 can be downloaded from these locations:

Future Releases

As always, we are working on improving the performance of all of our functions. This has been another exciting update to ArrayFire and we have great plans for the next release. Stay tuned!

Dedicated Support and Coding Services

ArrayFire is open source and always will be. For those who want dedicated support or custom function development, we offer a variety of support packages.

ArrayFire also serves many clients through consulting and coding services, algorithm development, porting code, and training courses for developers. Contact us at sales@arrayfire.com or schedule a free technical consultation to learn more about our consulting and coding services.

Leave a Reply

Your email address will not be published. Required fields are marked *