Gorgonia v0.9.10 Release Notes
Release Date: 2020-04-10 // about 4 years ago-
In the previous version, the
repeatOp
was a compound operation. It had this function signature effectively:func repeat(a, nTimes *Node, axes ...int)
. So you could do something likerepeat(a, 300, 1, 2, 3)
in whicha
gets repeated 300 times across axes 1, 2 and 3.⚡️ This has been deoptimized such that it's effectively
func repeat(a, repeat *Node, axis int)
. The reason for this deoptimization is because upon further analyses of what the function actually does, it simply callstensor.Repeat
many times. This causes many new tensors to be allocated. But the whole point of symbolic operations is so that we may preallocate ahead of time.🐎 This deoptimization allows for the
repeatOp
to calltensor.RepeatReuse
which allows for a repeat operation to reuse preallocated values, leading to less allocations, improving performance