
Hi everybody Im a quite new boost user and I wonder, why C++ Program is so slow. I wrote a program, and I have the same program in Matlab, I expected that my C++ version is much faster, but its not. I use matrices, vectors, matrix- and vector proxies. Do some solving and compute calculations with prod, element_div, etc.. Is boost in general slower than matlab, should I use something else? Id be real happy about any help. Regards Nisha K _________________________________________________________________ Explore the seven wonders of the world http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE

On Tue, 20 Nov 2007 15:24:42 +0000, nisha kannookadan wrote:
Hi everybody
Im a quite new boost user and I wonder, why C++ Program is so slow.
I wrote a program, and I have the same program in Matlab, I expected that my C++ version is much faster, but its not.
I use matrices, vectors, matrix- and vector proxies. Do some solving and compute calculations with prod, element_div, etc..
Is boost in general slower than matlab, should I use something else?
Id be real happy about any help.
Matlab uses some highly optimized matrix operations libraries (BLAS/ LAPACK for example.) I assume you use Boost uBLAS which is quite a good library but it has nowhere near the amount of investment put into it as does Matlab. That being said, you should post the code. You might be doing something silly like copying vectors in a loop. -- Sohail Somani http://uint32t.blogspot.com

Sohail Somani wrote:
On Tue, 20 Nov 2007 15:24:42 +0000, nisha kannookadan wrote:
Hi everybody
Im a quite new boost user and I wonder, why C++ Program is so slow.
I wrote a program, and I have the same program in Matlab, I expected that my C++ version is much faster, but its not.
I use matrices, vectors, matrix- and vector proxies. Do some solving and compute calculations with prod, element_div, etc..
Is boost in general slower than matlab, should I use something else?
Id be real happy about any help.
Matlab uses some highly optimized matrix operations libraries (BLAS/ LAPACK for example.) I assume you use Boost uBLAS which is quite a good library but it has nowhere near the amount of investment put into it as does Matlab.
uBlas has bindings for various BLAS libraries in the sandbox which speed things up quite a bit. Also if your program has debug settings turned on then uBlas will be *very* slow, it's only when you turn on all your compiler's optimisations (and maybe define NDEBUG) that uBlas gets up to speed. There is also a dedicated mailing for uBlas users will will likely be more helpful than this one :-) HTH, John.

"John Maddock" <john@johnmaddock.co.uk> writes: | uBlas has bindings for various BLAS libraries in the sandbox which speed | things up quite a bit. Also if your program has debug settings turned on | then uBlas will be *very* slow, it's only when you turn on all your | compiler's optimisations (and maybe define NDEBUG) that uBlas gets up to | speed. You have to define NDEBUG to get anything close to decent performance out of ublas. We have in some tests seen something close to an order of three magnitudes improvement with NDEBUG defined. Which brings be to a nother point: It is _very_ bad of a library to require of the application to define NDEBUG to work properly. (The application should be able to decide for itself how NDEBUG/assert should be used.) Ublas should stop using NDEBUG and create their own BOOST_UBLAS_DEBUG or similar and use that instead. And I should probably go pester the ublas guys as well... -- Lgb

Lars Gullik Bjønnes wrote:
Which brings be to a nother point: It is _very_ bad of a library to require of the application to define NDEBUG to work properly. (The application should be able to decide for itself how NDEBUG/assert should be used.) Ublas should stop using NDEBUG and create their own BOOST_UBLAS_DEBUG or similar and use that instead.
Are you saying library code may not use the standard 'assert' macro, then, at least not in headers ? I don't quite agree with your statement. In fact, whenever you are using libraries that are mostly implemented in headers, it becomes very hard to encapsulate behavior the way you seem to request. Regards, Stefan -- ...ich hab' noch einen Koffer in Berlin...

Stefan Seefeld <seefeld@sympatico.ca> writes: | Lars Gullik Bjønnes wrote:
Which brings be to a nother point: It is _very_ bad of a library to require of the application to define NDEBUG to work properly. (The application should be able to decide for itself how NDEBUG/assert should be used.) Ublas should stop using NDEBUG and create their own BOOST_UBLAS_DEBUG or similar and use that instead.
| Are you saying library code may not use the standard 'assert' macro, | then, at least not in headers ?
| I don't quite agree with your statement. In fact, whenever you are using | libraries that are mostly implemented in headers, it becomes very hard | to encapsulate behavior the way you seem to request. Still, forcing the application to not be able to use standard assert as it'd like is not really acceptable. And if I am not mistaken something similar to my imagined BOOST_UBLAS_DEBUG is used for almost all other boost libraries. (At the very least the do not use NDEBUG as a switch for anything) (I see that other libs also use NDEBUG/ASSERT, and think that too is bad. But for ublas the implications are a lot worse. 3 magnitudes of performace is not to shrug at.) -- Lgb

On 11/25/07, Lars Gullik Bjønnes <larsbj@gullik.net> wrote:
Stefan Seefeld <seefeld@sympatico.ca> writes:
| Lars Gullik Bjønnes wrote:
Which brings be to a nother point: It is _very_ bad of a library to require of the application to define NDEBUG to work properly. (The application should be able to decide for itself how NDEBUG/assert should be used.) Ublas should stop using NDEBUG and create their own BOOST_UBLAS_DEBUG or similar and use that instead.
| Are you saying library code may not use the standard 'assert' macro, | then, at least not in headers ?
| I don't quite agree with your statement. In fact, whenever you are using | libraries that are mostly implemented in headers, it becomes very hard | to encapsulate behavior the way you seem to request.
Still, forcing the application to not be able to use standard assert as it'd like is not really acceptable.
Amen to that! We are using using ublas in some important production code and we have to compile the entire application with NDEBUG, even if we (and external libraries) have important assert code that we would like to keep even on a running system. Unfortunately the sparse vector functionality in ublas in 1.32 doesn't even compile with NDEBUG not defined (and even if it did it would have abissimal performance). I think that NDEBUG should only be used for checks that are meant for production use (i.e. they won't slow down your program more than 5%). I like a lot that boost::shared_ptr and boost optional assert when deferencing in debug builds, and the cost is so small that I like to keep it even for production builds. For example the standard libary I use doesn't force you to use the checked iterators variant if you build with assert on: you have to use another explicit preprocessor define.
And if I am not mistaken something similar to my imagined BOOST_UBLAS_DEBUG is used for almost all other boost libraries. (At the very least the do not use NDEBUG as a switch for anything) (I see that other libs also use NDEBUG/ASSERT, and think that too is bad. But for ublas the implications are a lot worse. 3 magnitudes of performace is not to shrug at.)
In my experience the use of assert (or BOOST_ASSERT) in all other boost libraries has been very well thought out. I never felt the need to explicitly disable asserting for a specific library for performance reasons. The only offender so far has been ublas. -- gpd

Giovanni Piero Deretta wrote:
Amen to that! We are using using ublas in some important production code and we have to compile the entire application with NDEBUG, even if we (and external libraries) have important assert code that we would like to keep even on a running system. Unfortunately the sparse vector functionality in ublas in 1.32 doesn't even compile with NDEBUG not defined (and even if it did it would have abissimal performance).
Indeed, you might want to incorporate this changeset: http://svn.boost.org/trac/boost/changeset?new=trunk%2Fboost%2Fboost%2Fnumeric%2Fublas%2Fdetail%2Fconfig.hpp%4037392&old=trunk%2Fboost%2Fboost%2Fnumeric%2Fublas%2Fdetail%2Fconfig.hpp%4037027 in your uBlas version so you can use BOOST_UBLAS_NDEBUG rather than NDEBUG. HTH, John.

On 11/26/07, John Maddock <john@johnmaddock.co.uk> wrote:
Giovanni Piero Deretta wrote:
Amen to that! We are using using ublas in some important production code and we have to compile the entire application with NDEBUG, even if we (and external libraries) have important assert code that we would like to keep even on a running system. Unfortunately the sparse vector functionality in ublas in 1.32 doesn't even compile with NDEBUG not defined (and even if it did it would have abissimal performance).
Indeed, you might want to incorporate this changeset: http://svn.boost.org/trac/boost/changeset?new=trunk%2Fboost%2Fboost%2Fnumeric%2Fublas%2Fdetail%2Fconfig.hpp%4037392&old=trunk%2Fboost%2Fboost%2Fnumeric%2Fublas%2Fdetail%2Fconfig.hpp%4037027
in your uBlas version so you can use BOOST_UBLAS_NDEBUG rather than NDEBUG.
HTH,
Definitely! thanks. -- gpd

Am Sonntag 25 November 2007 18:28:47 schrieb Lars Gullik Bjønnes:
Which brings be to a nother point: It is _very_ bad of a library to require of the application to define NDEBUG to work properly. (The application should be able to decide for itself how NDEBUG/assert should be used.) Ublas should stop using NDEBUG and create their own BOOST_UBLAS_DEBUG or similar and use that instead.
And I should probably go pester the ublas guys as well...
I'm don't know if I got you wrong, but doesn't BOOST_UBLAS_NDEBUG provide what you looking for? <boost/boost/numeric/ublas/detail/config.hpp> ... // Enable performance options in RELEASE mode #if defined (NDEBUG) || defined (BOOST_UBLAS_NDEBUG) ... </boost/boost/numeric/ublas/detail/config.hpp> Best, -- Maik

Maik Beckmann <maikbeckmann@gmx.de> writes: | Am Sonntag 25 November 2007 18:28:47 schrieb Lars Gullik Bjønnes:
Which brings be to a nother point: It is _very_ bad of a library to require of the application to define NDEBUG to work properly. (The application should be able to decide for itself how NDEBUG/assert should be used.) Ublas should stop using NDEBUG and create their own BOOST_UBLAS_DEBUG or similar and use that instead.
And I should probably go pester the ublas guys as well...
| I'm don't know if I got you wrong, but doesn't BOOST_UBLAS_NDEBUG provide what | you looking for? | <boost/boost/numeric/ublas/detail/config.hpp> | ... | // Enable performance options in RELEASE mode | #if defined (NDEBUG) || defined (BOOST_UBLAS_NDEBUG) | ... | </boost/boost/numeric/ublas/detail/config.hpp> That seems to be unreleased code? Hmm, or am I trying to beat up something does not exist. At lest in 1.33.1 BOOST_UBLAS_NDEBUG is not there. (same in 1.34 it seems) But yes, that seems to provide what I am looking for. Now the rest of the NDEBUG's must be looked at :-) -- Lgb

IMHO this kind of posts doesn't belong to the developer list. I forward it to the users list: - boost-users <at>lists<dot>boost<dot>org Best, Maik

Wow, Im very impressed, I already got so much answers. Thanks a lot. I didnt realize, that there are different lists, sorry. The Code is quite huge. But I post here, a part, which takes quite a lot of time: These are two methods for wavelet transformations: matrix Wavelet::ttrans(matrix At, int level) { matrix cfe1, cfe2, cfo, cfe, c, d; int N,s2; N = (At.size1()+1)/2; s2 = At.size2(); zero_matrix zer(N,s2); for (int ii = 1; ii <= level; ii++) { cfo.resize(N,s2,false); cfe.resize(N-1,s2,false); c.resize(N-1,s2,false); d.resize(N,s2,false); cfo.assign(subslice(At, 0,2,N, 0,1,s2)); cfe.assign(subslice(At, 1,2,N-1, 0,1,s2)); c.assign(cfe + (subrange(cfo, 0,N-1, 0,s2)+subrange(cfo, 1,N, 0,s2))*0.5); zer.resize(N,s2,true); cfe1.resize(N,s2,false); cfe2.resize(N,s2,false); cfe1.assign(zer); cfe2.assign(zer); (subrange(cfe1, 0,N-1, 0,s2)).assign(cfe); (subrange(cfe2, 1,N, 0,s2)).assign(cfe); d.assign(cfo-(cfe1+cfe2)*0.5); (subrange(At, 0,N-1, 0,At.size2())).assign(c); (subrange(At, N-1,2*N-1, 0,At.size2())).assign(d); N = N/2; } cfe1.clear(); cfe2.clear(); cfo.clear(); cfe.clear(); c.clear(); d.clear(); return At; } matrix Wavelet::itrans(matrix At,int level) { matrix inv_M,tmp; vector f1,f2; int N,m; N = (At.size1()+1)/2; scalar_vector e(2*N-1,1); scalar_vector f(2*N-2,0.5); m = At.size2(); for (int ii=1; ii<=level; ii++) { e.resize(2*N-1,true); f.resize(2*N-2,true); f1 = f; f2 = f; for(int jj = 0; jj < 2*N-3; jj = jj+2) { f2(jj) = -0.5; f1(jj+1) = -0.5; } inv_M.resize(2*N-1,2*N-1,false); inv_M = MVHF::tri_inverse(e,f1,f2); tmp.resize(2*N-1,m); tmp.assign(prod(inv_M,subrange(At, 0,2*N-1, 0,m))); (subrange(At, 0,N-1, 0,At.size2())).assign(subslice(tmp, 1,2,N-1, 0,1,tmp.size2())); (subrange(At, N-1,2*N-1, 0,At.size2())).assign(subslice(tmp, 0,2,N, 0,1,tmp.size2())); N = N/2; } inv_M.clear(); tmp.clear(); f1.clear(); f2.clear(); return At; } I did it like that, bcuz I realized that using 'assign' does it make a bit faster,though a lot of resize is needed. I use Eclipse, so is it possible to adapt the Debugging stuff there? Or does it need to be in a makefile...yeah, I know, I dont know the basic stuff :). I read about the library binding, but I actually dont need things like svd, lu..all I need is prod,solve,element_div and the methods above. So not to freaky things, so I probabaly dont need the bindings, right? Anyways, I thank you all very much..I never got answers so fast in a forum..I appreciate it. _________________________________________________________________ Discover the new Windows Vista http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE

On Tue, 20 Nov 2007 19:36:20 +0000, nisha kannookadan wrote:
The Code is quite huge. But I post here, a part, which takes quite a lot of time: These are two methods for wavelet transformations:
Oh boy, that is a lot of copying going on before you even enter the loop! And then in the loop, there is a bunch of resizing! You should use a profiler. -- Sohail Somani http://uint32t.blogspot.com

Hi I know, the code aint real fine. To ur comments..
Oh boy, that is a lot of copying going on before you even enter the loop!
Really, where? I dont realize that. Im really a newbie.
And then in the loop, there is a bunch of resizing!
Yes, I know. I only did that to be able to use the assign function. It makes the whole thing bit faster. But I know its ugly. I did it before without resize and aassign and just with =. Thank you Nisha K _________________________________________________________________ Explore the seven wonders of the world http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE

Oh boy, that is a lot of copying going on before you even enter the loop!
Really, where? I dont realize that. Im really a newbie.
Can anyone experienced provide a proper replacement for the code that nisha pasted here? Later or soon? That would serve as a good example how to program in C++ (boost) a good counterpart to a matlab(mathX) solution. I'm assuming that wavelets are quite popular. Regards, Elviin

Nisha, please repost your message at the ublas mailing list. Here is the list of mailing lists related to boost: - http://lists.boost.org/mailman/listinfo.cgi Best, -- Maik

Hi MAik Im back again. Thanks for your great advises, I will check it out. Im gonna involve now makefile via matlab, since I compile the programms from matlab (with mex). And Ill repost the question in the user forum. Thank you so much Nisha K _________________________________________________________________ Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy! http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us

Objects are getting copied over and over again, that is a big part of the problem. That is not the right way to do C++ if you want to get top performing code. With that said, you say you are a newbie so IMHO your options are: (A) Learn some more about C++ and use techniques (such as expresion templates) to aviod all the copying around. (B) Stick to basic C++ but change the way your code works (more on this later) (C) Stick to MATLAB As far as option (B), try creating your objects once and then passing them by reference to the actual operations. So, instead of having an itrans() function that returns a new matrix, make it write the result to an output parameter and return nothing. Not very pretty, I know, but if you want pretty go for option (A) or (C). I've used option (A) for something similar. I have some Matrix/Vector classes that support intuitive syntax (X = Y * W) yet they avoid the memory copies using expression templates. I also wrapped Intel's MKL Library. As far as performance goes, Intel MKL library gives me an edge when the matrixes are not tiny. For tiny matrixes my own hand written code performs faster (because it avoids calling their library which has some little overhead). But honestly, there's nothing wrong with using output parameters and keeping things simple. Regards, Steven "nisha kannookadan" <nishak44@hotmail.com> wrote in message news:BAY122-W16E24F4B48411F2554E94FD97F0@phx.gbl...
Wow, Im very impressed, I already got so much answers. Thanks a lot. I didnt realize, that there are different lists, sorry.
The Code is quite huge. But I post here, a part, which takes quite a lot of time: These are two methods for wavelet transformations:
matrix Wavelet::ttrans(matrix At, int level) { matrix cfe1, cfe2, cfo, cfe, c, d; int N,s2;
N = (At.size1()+1)/2; s2 = At.size2(); zero_matrix zer(N,s2);
for (int ii = 1; ii <= level; ii++) { cfo.resize(N,s2,false); cfe.resize(N-1,s2,false); c.resize(N-1,s2,false); d.resize(N,s2,false); cfo.assign(subslice(At, 0,2,N, 0,1,s2)); cfe.assign(subslice(At, 1,2,N-1, 0,1,s2));
c.assign(cfe + (subrange(cfo, 0,N-1, 0,s2)+subrange(cfo, 1,N, 0,s2))*0.5);
zer.resize(N,s2,true); cfe1.resize(N,s2,false); cfe2.resize(N,s2,false); cfe1.assign(zer); cfe2.assign(zer);
(subrange(cfe1, 0,N-1, 0,s2)).assign(cfe); (subrange(cfe2, 1,N, 0,s2)).assign(cfe); d.assign(cfo-(cfe1+cfe2)*0.5);
(subrange(At, 0,N-1, 0,At.size2())).assign(c); (subrange(At, N-1,2*N-1, 0,At.size2())).assign(d);
N = N/2; }
cfe1.clear(); cfe2.clear(); cfo.clear(); cfe.clear(); c.clear(); d.clear();
return At;
}
matrix Wavelet::itrans(matrix At,int level) { matrix inv_M,tmp; vector f1,f2; int N,m;
N = (At.size1()+1)/2; scalar_vector e(2*N-1,1); scalar_vector f(2*N-2,0.5); m = At.size2();
for (int ii=1; ii<=level; ii++) {
e.resize(2*N-1,true); f.resize(2*N-2,true); f1 = f; f2 = f; for(int jj = 0; jj < 2*N-3; jj = jj+2) { f2(jj) = -0.5; f1(jj+1) = -0.5; }
inv_M.resize(2*N-1,2*N-1,false); inv_M = MVHF::tri_inverse(e,f1,f2); tmp.resize(2*N-1,m); tmp.assign(prod(inv_M,subrange(At, 0,2*N-1, 0,m)));
(subrange(At, 0,N-1, 0,At.size2())).assign(subslice(tmp, 1,2,N-1, 0,1,tmp.size2())); (subrange(At, N-1,2*N-1, 0,At.size2())).assign(subslice(tmp, 0,2,N, 0,1,tmp.size2()));
N = N/2; }
inv_M.clear(); tmp.clear(); f1.clear(); f2.clear();
return At; }
I did it like that, bcuz I realized that using 'assign' does it make a bit faster,though a lot of resize is needed. I use Eclipse, so is it possible to adapt the Debugging stuff there? Or does it need to be in a makefile...yeah, I know, I dont know the basic stuff :). I read about the library binding, but I actually dont need things like svd, lu..all I need is prod,solve,element_div and the methods above. So not to freaky things, so I probabaly dont need the bindings, right?
Anyways, I thank you all very much..I never got answers so fast in a forum..I appreciate it.
_________________________________________________________________ Discover the new Windows Vista http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Hey Steven Thanks for ur advices. I already had posted an updated code, which doesnt return a matrix and where I use pass by reference. I bought also a c++ book, hope to find some help there too. But thanks a lot. Nisha K
To: boost@lists.boost.org> From: royalstream@hotmail.com> Date: Mon, 3 Dec 2007 17:09:22 -0600> Subject: Re: [boost] C++ Performance> > Objects are getting copied over and over again, that is a big part of the > problem.> That is not the right way to do C++ if you want to get top performing code.> > With that said, you say you are a newbie so IMHO your options are:> > (A) Learn some more about C++ and use techniques (such as expresion > templates) to aviod all the copying around.> (B) Stick to basic C++ but change the way your code works (more on this > later)> (C) Stick to MATLAB> > As far as option (B), try creating your objects once and then passing them > by reference to the actual operations.> So, instead of having an itrans() function that returns a new matrix, make > it write the result to an output parameter and return nothing.> Not very pretty, I know, but if you want pretty go for option (A) or (C).> > I've used option (A) for something similar.> I have some Matrix/Vector classes that support intuitive syntax (X = Y * W) > yet they avoid the memory copies using expression templates. I also wrapped > Intel's MKL Library. As far as performance goes, Intel MKL library gives me > an edge when the matrixes are not tiny. For tiny matrixes my own hand > written code performs faster (because it avoids calling their library which > has some little overhead).> > But honestly, there's nothing wrong with using output parameters and keeping > things simple.> > Regards,> > Steven> > > > "nisha kannookadan" <nishak44@hotmail.com> wrote in message > news:BAY122-W16E24F4B48411F2554E94FD97F0@phx.gbl...> >> > Wow, Im very impressed, I already got so much answers. Thanks a lot.> > I didnt realize, that there are different lists, sorry.> >> > The Code is quite huge. But I post here, a part, which takes quite a lot > > of time: These are two methods for wavelet transformations:> >> >> > matrix Wavelet::ttrans(matrix At, int level)> > {> > matrix cfe1, cfe2, cfo, cfe, c, d;> > int N,s2;> >> > N = (At.size1()+1)/2;> > s2 = At.size2();> > zero_matrix zer(N,s2);> >> > for (int ii = 1; ii <= level; ii++)> > {> > cfo.resize(N,s2,false);> > cfe.resize(N-1,s2,false);> > c.resize(N-1,s2,false);> > d.resize(N,s2,false);> > cfo.assign(subslice(At, 0,2,N, 0,1,s2));> > cfe.assign(subslice(At, 1,2,N-1, 0,1,s2));> >> > c.assign(cfe + (subrange(cfo, 0,N-1, 0,s2)+subrange(cfo, 1,N, 0,s2))*0.5);> >> > zer.resize(N,s2,true);> > cfe1.resize(N,s2,false);> > cfe2.resize(N,s2,false);> > cfe1.assign(zer);> > cfe2.assign(zer);> >> > (subrange(cfe1, 0,N-1, 0,s2)).assign(cfe);> > (subrange(cfe2, 1,N, 0,s2)).assign(cfe);> > d.assign(cfo-(cfe1+cfe2)*0.5);> >> > (subrange(At, 0,N-1, 0,At.size2())).assign(c);> > (subrange(At, N-1,2*N-1, 0,At.size2())).assign(d);> >> > N = N/2;> > }> >> > cfe1.clear();> > cfe2.clear();> > cfo.clear();> > cfe.clear();> > c.clear();> > d.clear();> >> > return At;> >> > }> >> > matrix Wavelet::itrans(matrix At,int level)> > {> > matrix inv_M,tmp;> > vector f1,f2;> > int N,m;> >> > N = (At.size1()+1)/2;> > scalar_vector e(2*N-1,1);> > scalar_vector f(2*N-2,0.5);> > m = At.size2();> >> > for (int ii=1; ii<=level; ii++)> > {> >> > e.resize(2*N-1,true);> > f.resize(2*N-2,true);> > f1 = f;> > f2 = f;> > for(int jj = 0; jj < 2*N-3; jj = jj+2)> > {> > f2(jj) = -0.5;> > f1(jj+1) = -0.5;> > }> >> > inv_M.resize(2*N-1,2*N-1,false);> > inv_M = MVHF::tri_inverse(e,f1,f2);> > tmp.resize(2*N-1,m);> > tmp.assign(prod(inv_M,subrange(At, 0,2*N-1, 0,m)));> >> > (subrange(At, 0,N-1, 0,At.size2())).assign(subslice(tmp, 1,2,N-1, > > 0,1,tmp.size2()));> > (subrange(At, N-1,2*N-1, 0,At.size2())).assign(subslice(tmp, 0,2,N, > > 0,1,tmp.size2()));> >> > N = N/2;> > }> >> > inv_M.clear();> > tmp.clear();> > f1.clear();> > f2.clear();> >> > return At;> > }> >> > I did it like that, bcuz I realized that using 'assign' does it make a bit > > faster,though a lot of resize is needed. I use Eclipse, so is it possible > > to adapt the Debugging stuff there? Or does it need to be in a > > makefile...yeah, I know, I dont know the basic stuff :). I read about the > > library binding, but I actually dont need things like svd, lu..all I need > > is prod,solve,element_div and the methods above. So not to freaky things, > > so I probabaly dont need the bindings, right?> >> > Anyways, I thank you all very much..I never got answers so fast in a > > forum..I appreciate it.> >> >> >> >> >> > _________________________________________________________________> > Discover the new Windows Vista> > http://search.msn.com/results.aspx?q=windows+vista&mkt=en-US&form=QBRE> > _______________________________________________> > Unsubscribe & other changes: > > http://lists.boost.org/mailman/listinfo.cgi/boost> > > > > > _______________________________________________> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Connect to the next generation of MSN Messenger http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline
participants (9)
-
elviin
-
Giovanni Piero Deretta
-
John Maddock
-
larsbj@gullik.net
-
Maik Beckmann
-
nisha kannookadan
-
Sohail Somani
-
Stefan Seefeld
-
Steven Burns