[fusion] segmented sequences and algorithms

The idea of segmented fusion sequences and algorithms has been discussed here several times, and Joel has made some reference to some earlier work I did in this area. I had done some tests at the time that suggested that a segmented sequences and algorithms could significantly outperform nonsegmented variants Fusion currently uses. Per Joel's suggestion, I went ahead and checked my code into CVS HEAD. All segmented-specific code is quarantined in separate ext_ directories. What I've just checked in: - fusion/algorithm/iteration/ext_/for_each_s.hpp for_each_s algorithm that works with segmented sequences - fusion/algorithm/query/ext_/find_if_s.hpp find_if_s algorithm that works with segmented sequences, and returns segmented iterators - fusion/sequence/container/ext_/tree.hpp Experimental segmented fusion tree - fusion/sequence/intrinsic/ext_/segments.hpp The segments() intrinsic for getting a segmented sequences' segments. - fusion/sequence/view/ext_/multiple_view.hpp Makes a value v appear as a tuple<V,V,V...>(v,v,v...) - fusion/sequence/view/ext_/segmented_iterator.hpp A generic segmented iterator that remembers its place in the traversal of any segmented sequence. - fusion/sequence/view/ext_/segmented_iterator_range.hpp Makes iterator_range of segmented_iterators a segmented range. - fusion/support/ext_/is_segmented.hpp The is_segmented trait. I've also checked in some basic tests for this stuff, and marked them "explicit" in the test Jamfile so they won't interfere with regular regression testing. I have not changed *any* standard Fusion files. If we decide to rip this out, it's as simple as nuking all the ext_ directories. Caveat: this stuff is half-baked. Use at your own risk. The hope is that by checking this in, others will take an interest and help flesh the implementation out, so dig in! -- Eric Niebler Boost Consulting www.boost-consulting.com

Hi, This sounds cool. These seems similar to having iteration on rows of an image. Is it possible to iterate from segment to segment at the same position of each segment. Chris On 10/5/06, Eric Niebler <eric@boost-consulting.com> wrote:
The idea of segmented fusion sequences and algorithms has been discussed here several times, and Joel has made some reference to some earlier work I did in this area. I had done some tests at the time that suggested that a segmented sequences and algorithms could significantly outperform nonsegmented variants Fusion currently uses. Per Joel's suggestion, I went ahead and checked my code into CVS HEAD. All segmented-specific code is quarantined in separate ext_ directories.
What I've just checked in:
- fusion/algorithm/iteration/ext_/for_each_s.hpp for_each_s algorithm that works with segmented sequences
- fusion/algorithm/query/ext_/find_if_s.hpp find_if_s algorithm that works with segmented sequences, and returns segmented iterators
- fusion/sequence/container/ext_/tree.hpp Experimental segmented fusion tree
- fusion/sequence/intrinsic/ext_/segments.hpp The segments() intrinsic for getting a segmented sequences' segments.
- fusion/sequence/view/ext_/multiple_view.hpp Makes a value v appear as a tuple<V,V,V...>(v,v,v...)
- fusion/sequence/view/ext_/segmented_iterator.hpp A generic segmented iterator that remembers its place in the traversal of any segmented sequence.
- fusion/sequence/view/ext_/segmented_iterator_range.hpp Makes iterator_range of segmented_iterators a segmented range.
- fusion/support/ext_/is_segmented.hpp The is_segmented trait.
I've also checked in some basic tests for this stuff, and marked them "explicit" in the test Jamfile so they won't interfere with regular regression testing.
I have not changed *any* standard Fusion files. If we decide to rip this out, it's as simple as nuking all the ext_ directories.
Caveat: this stuff is half-baked. Use at your own risk. The hope is that by checking this in, others will take an interest and help flesh the implementation out, so dig in!
-- Eric Niebler Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Chris Weed wrote:
On 10/5/06, Eric Niebler <eric@boost-consulting.com> wrote:
The idea of segmented fusion sequences and algorithms has been discussed here several times, and Joel has made some reference to some earlier work I did in this area. I had done some tests at the time that suggested that a segmented sequences and algorithms could significantly outperform nonsegmented variants Fusion currently uses. Per Joel's suggestion, I went ahead and checked my code into CVS HEAD. All segmented-specific code is quarantined in separate ext_ directories.
<snip>
Hi, This sounds cool. These seems similar to having iteration on rows of an image. Is it possible to iterate from segment to segment at the same position of each segment. Chris
Not in general. Not all the segments of a sequence necessarily have the same number of elements. Some, in fact, may be empty. -- Eric Niebler Boost Consulting www.boost-consulting.com

Eric Niebler wrote:
Chris Weed wrote:
On 10/5/06, Eric Niebler <eric@boost-consulting.com> wrote:
The idea of segmented fusion sequences and algorithms has been discussed here several times, and Joel has made some reference to some earlier work I did in this area. I had done some tests at the time that suggested that a segmented sequences and algorithms could significantly outperform nonsegmented variants Fusion currently uses. Per Joel's suggestion, I went ahead and checked my code into CVS HEAD. All segmented-specific code is quarantined in separate ext_ directories.
<snip>
Hi, This sounds cool. These seems similar to having iteration on rows of an image. Is it possible to iterate from segment to segment at the same position of each segment. Chris
Not in general. Not all the segments of a sequence necessarily have the same number of elements. Some, in fact, may be empty.
However, since we can also detect at compile time the sizes of sequences, we can enforce that requirement. I think the zip_view does that already. Regards, -- Joel de Guzman http://www.boost-consulting.com http://spirit.sf.net

Joel de Guzman <joel@boost-consulting.com> writes:
However, since we can also detect at compile time the sizes of sequences, we can enforce that requirement. I think the zip_view does that already.
IMO a zip_view should have the same length as the shortest component. -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (4)
-
Chris Weed
-
David Abrahams
-
Eric Niebler
-
Joel de Guzman