-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Performance benchmark for hpp-fcl #318
Comments
Dear @OxDuke, Thanks a lot for your feedback. It is pretty helpful for us in order to improve hpp-fcl. From a first perspective, your benchmark is really simple. Maybe a bit too much to really mean something. From a benchmark perspective, one should decouple the algorithm and their implementations. To move forward, could you share your entire code? Thanks in advance, |
Hello @OxDuke, Thank you for taking the time to make these comparisons!
Regarding the performance of HPPFCL compared to libccd, could you share with us which libccd function you used to compare to HPPFCL? For example, libccd only does the boolean collision check when Best, |
Another remark regarding the convergence criterion of GJK. On the other hand, to compute distances between shapes, OpenGJK is using the Frank-Wolfe duality gap as a convergence criterion which is different than the FW duality-gap; this criterion is mentioned in the paper and used for the experiments. The convergence criterions impact the running time as they give different guarantees of optimality. The advantage of the absolute duality-gap criterion is that if a tolerance of |
Hi @OxDuke,
I tested this code on a machine with an
In conclusion, I obtain the same results as in the paper: when the shapes are in close-proximity or shallowly overlapping, the Nesterov acceleration of GJK significantly improves over GJK. When the shapes are distant (1 meter) or have a large overlap (10 cm overlap), GJK is competitive or better than the Nesterov acceleration. Regarding the absolute execution time, I find that, for boolean collision checks, HPPFCL is very much below 2.5 microsec for when the shapes are distant of 1 meter (I suppose this distance corresponds to the translation in the code snippet you provided aboce). In fact, I find that the mean running time is actually Here is the code for the quick benchmark:
Best, |
Here are the results I get for the
|
Thank you very much for your timely response. I am still cleaning up my code so it might take a while to upload. Since Louis has showcased his benchmarks, I am now trying to reproduce his results. |
Conclusion: hpp-fcl is indeed very fast.Hi guys, I have redone my benchmarks. My latest results do match with what was claimed in the RSS 2022 paper. Thank you for your support! Here is my benchmark:I compared four solvers:
For simplicity, benchmarks were done on two convex shapes, which have 532 and 341 vertices, respectively. Since I also want to measure the complexity against number of vertices, a series of mesh simplifications were applied on each one of the two shapes. Shape1 with five levels of simplification: Shape2 with five levels of simplification: There are 6 sets of benchmarks, each with a different separating distance between two shapes. Hardware I used was a PC with Intel® Core™ i7-8700K CPU @ 3.70GHz × 12, and 32GB of memory. The system is Ubuntu20.04.3 LTS The results are shown in the figure below: There are four big columns in the figure above. Each big column shows the result from one of the four solvers. The name of the solver is printed on the first row of each big column. In each big column, there are 6 tables showing timing results (in microseconds) for each pair of distance test. The header of each table is of format:
The ID does not matter, it's for my own use only. Distance stands for the separation distance between two shapes. I am willing to do more explanation if I have not explained my method & results clear enough. |
@OxDuke Thanks for the nice report. Could you share your code in such a way we can make enhance and push forward for better performances in the near future? |
No problem, please give me a few days to clean up my code. |
@OxDuke Your raw code should be already enough I would say. It seems unnecessary you waste your time. Is it fine for you? |
I am sorry that I am not able to upload my raw code. Part of my code is running on my company's codebase, so for commerical reasons, I have to rewrite that part in my spare time. Thanks for your understanding. |
OK. No problem. We totally understand. |
@OxDuke Any update on the code sharing? |
Background
I come from the RSS 2022 paper, and I think your work is interesting. However, my preliminary benchmark results showed that hpp-fcl is not as fast as OpenGJK and libccd. I was computing the separating distance between two convex polytopes, one has over 500 vertices, the other has around 350 vertices.
OpenGJK took around 1us, using linear time support function (so it can potentially be much faster if we were to use log time support function), libccd (which uses MPR) took around 1.5us. hpp-fcl's default GJK took 2.5us, GJK-nesterov took 3us.
I used Google's benchmark library to record time mentioned above.
My result contradicts to what was claimed in #313 and the performance benchmark in the paper:
Possible Reasons
Hardware issues.
The RSS paper did not give any details on the hardware used, I wish they can be disclosed here.
What I am using is a PC with Intel® Core™ i7-8700K CPU @ 3.70GHz × 12, and 32GB of memory. The system is Ubuntu20.04.3 LTS
My Implementation is wrong
I paste a simplified version of my code here for reference. My implementation largely follows the test files. If needed, I can provide all my source files.
I would be most grateful if someone is able to help me achieve the performance claimed in the paper.
The text was updated successfully, but these errors were encountered: