On Sunday, 6 December 2020 at 17:30:13 UTC, data pulverizer wrote:
On Saturday, 5 December 2020 at 07:44:33 UTC, 9il wrote:

sweep_ndslice uses (2*N - 1) arrays to index U, this allows LDC to unroll the loop.

For example, for 2D case, withNeighboursSum [2] will store the pointer to the result, and the pointer at rows above and below.

matrix:
--------------
------a------- above iterator
------r------- the result
------b------- below iterator
--------------

Also, for AVX-512 targets it allows vectorizing the loop [1]. The benchmark has been run on the AVX2 CPU.

[1] https://github.com/typohnebild/numpy-vs-mir/issues/4
[2] http://mir-algorithm.libmir.org/mir_ndslice_topology.html#.withNeighboursSum

Very interesting, thank you for the explanations. Are there journal/book other implementation references for these approaches to implementing tensor-like multidimensional arrays?

I don't know. Tensors aren't so complex. The complex part is a design that allows Mir to construct and iterate various kinds of lazy tensors of any complexity and have quite a universal API, and all of these are boosted by the fact that the user-provided kernel(lambda) function is optimized by the compiler without the overhead.


Reply via email to