Arraymancer v0.3.0 Dec. 14 2017 Finally after much struggles, here is Arraymancer new version. Available now on Nimble. It comes with a new shiny doc (thanks @flyx and NimYAML doc): [https://mratsim.github.io/Arraymancer](https://mratsim.github.io/Arraymancer)
Changes: * **Very** Breaking > * Tensors uses reference semantics now: `let a = b` will share data by > default and copies must be made explicitly. > > >> * There is no need to use `unsafe` proc to avoid copies especially for >> slices. >> * Unsafe procs are deprecated and will be removed leading to a smaller and >> simpler codebase and API/documentation. >> * Tensors and CudaTensors now works the same way. >> * Use `clone` to do copies. >> * Arraymancer now works like Numpy and Julia, making it easier to port >> code. >> * Unfortunately it makes it harder to debug unexpected data sharing. >> * Breaking (?) > * The max number of dimensions supported has been reduced from 8 to 7 to > reduce cache misses. Note, in deep learning the max number of dimensions > needed is 6 for 3D videos: [batch, time, color/feature channels, Depth, > Height, Width] > * Documentation > * Documentation has been completely revamped and is available here: > [https://mratsim.github.io/Arraymancer](https://mratsim.github.io/Arraymancer)/ > * Huge performance improvements > * Use non-initialized seq > * shape and strides are now stored on the stack > * optimization via inlining all higher-order functions > >> * `apply_inline`, `map_inline`, `fold_inline` and `reduce_inline` >> templates are available. > > * all higher order functions are parallelized through OpenMP > * integer matrix multiplication uses SIMD, loop unrolling, restrict and > 64-bit alignment > * prevent false sharing/cache contention in OpenMP reduction > * remove temporary copies in several proc > * runtime checks/exception are now behind `unlikely` > * `A*B + C` and `C+=A*B` are automatically fused in one operation > * do not initialize result tensors > * Neural network: > * Added `linear`, `sigmoid_cross_entropy`, > `softmax_cross_entropy` layers > * Added Convolution layer > * Shapeshifting: > * Added `unsqueeze` and `stack` > * Math: > * Added `min`, `max`, `abs`, `reciprocal`, `negate` and in-place `mnegate` > and `mreciprocal` > * Statistics: > * Added variance and standard deviation > * Broadcasting > * Added `.^` (broadcasted exponentiation) > * Cuda: > * Support for convolution primitives: forward and backward > * Broadcasting ported to Cuda > * Examples > * Added perceptron learning `xor` function example > * Precision > * Arraymancer uses `ln1p` (`ln(1 + x)`) and `exp1m` procs (`exp(1 - x)`) > where appropriate to avoid catastrophic cancellation > * Deprecated > * Version 0.3.1 with the ALL deprecated proc removed will be released in a > week. Due to issue > [https://github.com/nim-lang/Nim/issues/6436](https://github.com/nim-lang/Nim/issues/6436), > even using non-deprecated proc like `zeros`, `ones`, `newTensor` you will > get a deprecated warning. > * `newTensor`, `zeros`, `ones` arguments have been changed from `zeros([5, > 5], int)` to `zeros[int]([5, 5])` > * All `unsafe` proc are now default and deprecated. >