C++ exceptions are zero cost only when *not* thrown; keeping them out of
critical paths can make a significant difference in performance.

Throwing exceptions is currently a routine part of the process of
identifying concrete types for dispatching. When runtime is dominated by
code strictly inside C++ this is not an issue, but for algorithms that must
repeatedly cross the C++/Python boundary it can become a real performance
problem. In particular, the search algorithms and their Visitors do this; I
have found that using a non-throwing approach makes a dramatic speed
improvement - over 2X for a maze router benchmark based on an implicit A*
search.

I'm offering this patch
<https://git.skewed.de/count0/graph-tool/-/merge_requests/24> as an
implementation; I think it may be worth investigating if similar
optimizations are available elsewhere in the code.

Best,
Jeff
_______________________________________________
graph-tool mailing list
[email protected]
https://lists.skewed.de/mailman/listinfo/graph-tool

Reply via email to