3D shift_sticky and shift_page_sticky incorrect results

Problem : Shift_sticky and shift_page_sticky are producing incorrect results when shifting pages in 3D dense containers. Specifically, shift_sticky does not produce the correct output when shifting pages (the same as shift_page_sticky and any of the reverse variants).


Environment : ArBB Beta 5, Windows and Linux


Root Cause : Here is a reproducer

void shifty(dense<u16, 3>& in, dense<u16, 3>& out)
{
out = shift_sticky(in, 0, 0, 1);
}

Resolution : There are two possible workarounds for this problem. Know that they are of lesser performance, but in the course of fixing this problem with the API functionality we will be increasing performance for this type of operation across the board.

1) A map emulating shift_page_sticky
2) Flattening the 3d dense container into a 1d dense container and emulate the shift_page_sticky with shift_sticky.

At the current time, there is no recommendation for one workaround over the other. It really depends on your dataset size and desired operations. We very much welcome your feedback on both the future API functionality and performance of this critical operation used in a variety of 3D domains.
For more complete information about compiler optimizations, see our Optimization Notice.