[parameter] "Infinite" compile times with EDG based compilers?

Dave, Daniel, I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends. MSVC, gcc and even Borland(!) have no such problems BTW. Is this a known problem or anything that can be fixed inside Boost.Parameter? Otherwise I have an alternative fix I can try - basically not using BOOST_PARAMETER_FUNCTION - as this is the cause of the problem. Thanks, John.

John Maddock wrote:
Dave, Daniel,
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends. MSVC, gcc and even Borland(!) have no such problems BTW. Is this a known problem or anything that can be fixed inside Boost.Parameter? Otherwise I have an alternative fix I can try - basically not using BOOST_PARAMETER_FUNCTION - as this is the cause of the problem.
Oops, forgot to attatch the header, simply #including it is enough to trigger the problem. John.

on Fri Jun 15 2007, "John Maddock" <john-AT-johnmaddock.co.uk> wrote:
Dave, Daniel,
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends. MSVC, gcc and even Borland(!) have no such problems BTW. Is this a known problem or anything that can be fixed inside Boost.Parameter? Otherwise I have an alternative fix I can try - basically not using BOOST_PARAMETER_FUNCTION - as this is the cause of the problem.
A. Can you make a ticket for this and assign it to daniel wallin (danielw)? B. Can you determine whether it's a preprocessing problem or something else? -- Dave Abrahams Boost Consulting http://www.boost-consulting.com The Astoria Seminar ==> http://www.astoriaseminar.com

David Abrahams wrote:
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends. MSVC, gcc and even Borland(!) have no such problems BTW. Is this a known problem or anything that can be fixed inside Boost.Parameter? Otherwise I have an alternative fix I can try - basically not using BOOST_PARAMETER_FUNCTION - as this is the cause of the problem.
A. Can you make a ticket for this and assign it to daniel wallin (danielw)?
It's here: http://svn.boost.org/trac/boost/ticket/1054 and also reported to Intel. The ticket is assigned to you 'cos danielw doesn't exist in the tracker at present?
B. Can you determine whether it's a preprocessing problem or something else?
Yep, the problem occurs when: typedef typename boost::parameter::binding< args, tag::domain_error_name, domain_error<BOOST_MATH_DOMAIN_ERROR_POLICY> >::type domain_error_type; is instantiated, and there are a large number of deduced parameters. Thanks for the fast response on this, John.

John Maddock wrote:
David Abrahams wrote:
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends.
There used to be a problem in EDG frontend with macro expansions taking forever. It was reported years ago by a customer using Boost on Tru64. We've reported it to EDG and it has been fixed. aCC6 on HP-UX compiles testcase in http://svn.boost.org/trac/boost/ticket/1054 in 7 seconds. This compiler is using EDG Version 3.08. cxx on Tru64 compiles it in ~20 sec. This compiler is using EDG Version 3.04. Perhaps, Intel compiler you are using is using some old version of EDG fronend. bash-2.03$ date ; aCC -c -Iboost x.cpp ; date Fri Jun 15 09:48:58 PDT 2007 Fri Jun 15 09:49:02 PDT 2007 bash-2.03$ cxxosf.zko.hp.com> date; cxx -c -Iboost x.cpp ; date Fri Jun 15 12:49:32 EDT 2007 Fri Jun 15 12:50:03 EDT 2007 cxxosf.zko.hp.com> Thanks, Boris ----- Original Message ----- From: "John Maddock" <john@johnmaddock.co.uk> To: "David Abrahams" <dave@boost-consulting.com> Cc: "Boost mailing list" <boost@lists.boost.org>; <daniel@boost-consulting.com> Sent: Friday, June 15, 2007 11:47 AM Subject: Re: [boost] [parameter] "Infinite" compile times with EDG basedcompilers?
David Abrahams wrote:
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends. MSVC, gcc and even Borland(!) have no such problems BTW. Is this a known problem or anything that can be fixed inside Boost.Parameter? Otherwise I have an alternative fix I can try - basically not using BOOST_PARAMETER_FUNCTION - as this is the cause of the problem.
A. Can you make a ticket for this and assign it to daniel wallin (danielw)?
It's here: http://svn.boost.org/trac/boost/ticket/1054 and also reported to Intel. The ticket is assigned to you 'cos danielw doesn't exist in the tracker at present?
B. Can you determine whether it's a preprocessing problem or something else?
Yep, the problem occurs when:
typedef typename boost::parameter::binding< args, tag::domain_error_name, domain_error<BOOST_MATH_DOMAIN_ERROR_POLICY> >::type domain_error_type;
is instantiated, and there are a large number of deduced parameters.
Thanks for the fast response on this, John.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Boris Gubenko wrote:
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends.
There used to be a problem in EDG frontend with macro expansions taking forever. It was reported years ago by a customer using Boost on Tru64. We've reported it to EDG and it has been fixed.
Yep, I've tracked it down to the meta-programming rather than the preprocessing though.
aCC6 on HP-UX compiles testcase in http://svn.boost.org/trac/boost/ticket/1054 in 7 seconds. This compiler is using EDG Version 3.08.
Slow, but OK.
cxx on Tru64 compiles it in ~20 sec. This compiler is using EDG Version 3.04.
Well at least it gets there in the end :-)
Perhaps, Intel compiler you are using is using some old version of EDG fronend.
No it's EDG version 3.06. Strange. When I get a chance I'll try the latest Intel-10 compiler (EDG 3.08) and see how that copes. Either way, I think I now have a workaround that doesn't use Boost.Parameter at all, and will *hopefully* be faster to build with all compilers! Thanks for trying this out, John.

John Maddock wrote:
Yep, I've tracked it down to the meta-programming rather than the preprocessing though.
It is a different problem then.
No it's EDG version 3.06. Strange. When I get a chance I'll try the latest Intel-10 compiler (EDG 3.08) and see how that copes.
The problem may have nothing to do with EDG frontend and may have everything to do with Intel's code generator. With icc 9.0 on Linux/ia64, it takes 13 secs. to compile. Long, but "at least it gets there in the end :-)" On HP-UX/ia64, both aCC A.06.15 and gcc 3.4.3 compile this testcase in 5 secs. Thanks, Boris ----- Original Message ----- From: "John Maddock" <john@johnmaddock.co.uk> To: <boost@lists.boost.org> Sent: Friday, June 15, 2007 1:49 PM Subject: Re: [boost] [parameter] "Infinite" compile times withEDGbasedcompilers?
Boris Gubenko wrote:
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends.
There used to be a problem in EDG frontend with macro expansions taking forever. It was reported years ago by a customer using Boost on Tru64. We've reported it to EDG and it has been fixed.
Yep, I've tracked it down to the meta-programming rather than the preprocessing though.
aCC6 on HP-UX compiles testcase in http://svn.boost.org/trac/boost/ticket/1054 in 7 seconds. This compiler is using EDG Version 3.08.
Slow, but OK.
cxx on Tru64 compiles it in ~20 sec. This compiler is using EDG Version 3.04.
Well at least it gets there in the end :-)
Perhaps, Intel compiler you are using is using some old version of EDG fronend.
No it's EDG version 3.06. Strange. When I get a chance I'll try the latest Intel-10 compiler (EDG 3.08) and see how that copes. Either way, I think I now have a workaround that doesn't use Boost.Parameter at all, and will *hopefully* be faster to build with all compilers!
Thanks for trying this out, John.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Boris Gubenko wrote:
The problem may have nothing to do with EDG frontend and may have everything to do with Intel's code generator. With icc 9.0 on Linux/ia64, it takes 13 secs. to compile. Long, but "at least it gets there in the end :-)"
On HP-UX/ia64, both aCC A.06.15 and gcc 3.4.3 compile this testcase in 5 secs.
Yuk, that's way too long for something that's supposed to be included ubiquitously :-( Looks like I'm going to have to drop down to mpl and use that instead! John.

on Fri Jun 15 2007, "Boris Gubenko" <Boris.Gubenko-AT-hp.com> wrote:
Yep, I've tracked it down to the meta-programming rather than the preprocessing though.
It is a different problem then.
Yeah, if you look at the graphs in the back of "C++ Template Metaprogramming" you can see that EDG's template instantiation speeds are not stellar, to say the least. -- Dave Abrahams Boost Consulting http://www.boost-consulting.com The Astoria Seminar ==> http://www.astoriaseminar.com

on Fri Jun 15 2007, "John Maddock" <john-AT-johnmaddock.co.uk> wrote:
David Abrahams wrote:
I have a header that makes use of Boost.Parameter that basically takes forever to compile with the Intel compiler, and therefore presumably all EDG based front ends. MSVC, gcc and even Borland(!) have no such problems BTW. Is this a known problem or anything that can be fixed inside Boost.Parameter? Otherwise I have an alternative fix I can try - basically not using BOOST_PARAMETER_FUNCTION - as this is the cause of the problem.
A. Can you make a ticket for this and assign it to daniel wallin (danielw)?
It's here: http://svn.boost.org/trac/boost/ticket/1054 and also reported to Intel. The ticket is assigned to you 'cos danielw doesn't exist in the tracker at present?
B. Can you determine whether it's a preprocessing problem or something else?
Yep, the problem occurs when:
typedef typename boost::parameter::binding< args, tag::domain_error_name, domain_error<BOOST_MATH_DOMAIN_ERROR_POLICY> >::type domain_error_type;
is instantiated, and there are a large number of deduced parameters.
Do you *have* to use binding<>? There is almost always a better way, and binding<> is usually more expensive than the alternatives. Maybe you could show me the context. -- Dave Abrahams Boost Consulting http://www.boost-consulting.com The Astoria Seminar ==> http://www.astoriaseminar.com

on Fri Jun 15 2007, David Abrahams <dave-AT-boost-consulting.com> wrote:
Yep, the problem occurs when:
typedef typename boost::parameter::binding< args, tag::domain_error_name, domain_error<BOOST_MATH_DOMAIN_ERROR_POLICY> >::type domain_error_type;
is instantiated, and there are a large number of deduced parameters.
Do you *have* to use binding<>? There is almost always a better way, and binding<> is usually more expensive than the alternatives. Maybe you could show me the context.
Oh, I see your example; it's a class template so of course you have no choice but to use binding<> :(. I'll give this a look, but I can't promise positive results. EDG's template instantiation is pig-slow. -- Dave Abrahams Boost Consulting http://www.boost-consulting.com The Astoria Seminar ==> http://www.astoriaseminar.com
participants (3)
-
Boris Gubenko
-
David Abrahams
-
John Maddock