On Friday, 20 February 2015 at 12:23:49 UTC, Vlad Levenfeld wrote:
Slicing and in-place transformations are pretty much the only
things that will preserve contiguity. Piping ac through map or
something will take us back to manually propagating the
sampling rate. In general, deciding how and when to preserve
what information under which transformations is tough. Lazily
mapping, say, to increase the volume could meaningfully
preserve sampling rate, but under filtering, zipping or
striding it doesn't make sense.
The sensible thing to do is to have ranges of contiguous ranges:
1. to get better cache locality
2. to iterate over btrees (which are popular now due to memory
bus issues)
3. to do intermediate buffering for higher speed (SIMD)
In the worst case the contiguous range will degrade to 1 element,
which is OK for prototyping. Then you can insert an intermediate
buffer where needed after profiling performance.