reduce interrupt frequency in ray_shade #18
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I'm working on a response to Wolf Vollprecht's Next Journal article, and I noticed when running benchmarks that
ray_trace
runs substantially slower than the Julia version. I didn't think this should be the case, so I dug into it and noticed thatRcpp::checkUserInterrupt()
is called in the innermost for loop. This is a somewhat expensive operation and can be just as effective if we check every few thousand loops.Making the change increases performance by 5x (see below). Presumably we could make a similar change to the multi core version, and to other places were interrupts are used, but I haven't checked that. I figure you might have opinions about how to do this, so I didn't want to spend too much time changing things before getting a sense for what you want.
I did also make a change to NEWS, but only because I've been asked to that in pull requests into other projects. Feel free to edit as you see fit (obviously).
Before changes:
After changes: