-
-
Notifications
You must be signed in to change notification settings - Fork 50
Conversation
|
Valentin pointed out we shouldn't need to set the edges here, and the fake call should suffice because unlike Cassette we actually call the child methods. (Conversely, shouldn't setting the edge explicitly on the outer method work too and not require a fake call?) Anyway, something fishy is happening, because not adding edges and only doing the call breaks our tests, or more succinctly: Maybe something's wrong with the fake call? Replacing it with the following (for the above example) makes invalidation work without the edge: However, starting to generalize that breaks as soon as I do something in the generated version of this method: Oh this also depends on the unsafe_store in the kernel methods, just doing a cuprintln correctly recompiles. What is going on ... |
|
Calling in the cavalry... @vtjnash or @Keno could you guys shed some light on this? In summary, I'm trying to get method invalidation working. This doesn't automatically work since we never call the kernel function, but take its IR and execute that. The compilation and invalidation is handled by CUDAnative.jl/src/execution.jl Lines 318 to 330 in b5aaeb6
CUDAnative.jl/src/execution.jl Line 453 in b5aaeb6
Either one of those doesn't suffice to get proper invalidation/recompilation, but the behavior is weird and depends in strange ways on the kernel function and on the code in |
dbf5646 to
178ce3f
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Everything Just Works"(tm)
Fixes #459 by setting
ci.edges(from JuliaLang/julia#32237) AND adding a fake call, both seem required to fool Julia.This regresses launch performance, which I plan to look into soon.