|
Boost Users : |
From: Hicham Mouline (hicham_at_[hidden])
Date: 2008-07-04 07:36:26
The solution to this one is provided by Joaquin, in his reply below:
I tried compiling your code with MSVC++ 8.0 and it is indeed incredibly slow. After playing a little with the code I realized that MPL views are the culprit here: for some reason it is much faster to fold on a vector-based computation rather than a view:
template<typename Sequence1,typename Sequence2>
struct sequence_product :
boost::mpl::fold<
Sequence1,
boost::mpl::vector0<>,
boost::mpl::copy<
boost::mpl::transform<
Sequence2,
pair_with<boost::mpl::_2>
>,
boost::mpl::back_inserter<boost::mpl::_1>
>
>
{};
This transformation on sequence_product and seq_seqpair_product alone improved the performance tremendously. Additionally I've tried a small optimization: in seq_seqpair_product it is preumable better to fold on Sequence rather than SequencePair, since on average the first is expected to be shorter. Truth be said, I haven't detected any improvement with this, anyway.
> Shouldn't there be a dot-product or cross-product of mpl sequences as
> a general algorithm? and not just 2 sequences but N.
I guess it is the O(n^2) behavior that deterred the author from including the algorithm (much as STL usually does not contain quadratic algorithms).
It might be a worthy addition, nonetheless
Joaquin
---------
Interesting why a joint_view slower than the alternative.
This result confirmed then on MSVC8 , gcc4.1, Intel10...
regards,
/Hicham
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net