yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #12212
[Bug 1475844] Re: Swap problem in InteractionLoop
@Vaclav
>I removed this functor caching, since it does not seem to bring any benefit performance-wise.
IIRC the change [1] gave a significant (clearly measurable) speedup.
Before the change it was like this:
if (noIGfuntor || noIPfunctor) assignIGfunctor();
if (!IGfunctor.go()) continue;
assignIPfunctor();
For virtual interactions (large majority, typically) it was assigning IGfunctor again and again, at each iteration.
I don't know in which circumstances you made the comparison but it could be that the gain from caching was hidden by this small bug.
Ultimately, I guess queuing separately the interactions which have or do not have functor would be better, since it would remove a "if".
It reminds me a discussion with Colin Thornton when he said: "they invented vector processing, the BIG thing, then they realized that our programs contain "if" statements, F##@!!"
B
[1]
https://github.com/yade/trunk/commit/15182aca8473be86c74b139731dbb88b0007f759
#diff-726aef96982e392072499e825cf634b4L106
--
You received this bug notification because you are a member of Yade
developers, which is subscribed to Yade.
https://bugs.launchpad.net/bugs/1475844
Title:
Swap problem in InteractionLoop
Status in Yade:
New
Bug description:
When you use two different materials, it might happen that
IntreactionLoop ends with error [1]. It is because of IPhys stage (see
also the comment in [1], but in reality Ip2 can by non-symmetric).
Possible solutions:
1) define both Ip2_Mat1_Mat2 and Ip2_Mat2_Mat1 (according to [2] maybe does not work..)
2) replace assert [1] (something like if (swap) { I->functorCase.phys=physDispatcher->getFunctor2D(b2->material,b1->material,swap); swap=false }). Is the assert necessary at all?
3) make option 1) somehow automatic (using some macro?)
Pros and cons:
1) would mess the source code and documentation a bit, but otherwise I think it is ok
2) would it have some side effects? Is it ok for Law2 stage? etc etc?
3) maybe the best option if the solution is reasonable
cheers
Jan
[1] http://bazaar.launchpad.net/~yade-pkg/yade/git-trunk/view/head:/pkg/common/InteractionLoop.cpp#L116
[2] https://answers.launchpad.net/yade/+question/269315
To manage notifications about this bug go to:
https://bugs.launchpad.net/yade/+bug/1475844/+subscriptions
References