-
Notifications
You must be signed in to change notification settings - Fork 46
Open
Description
See opt result of test/Integration/Dialect/XeGPU/vector_insert_1.mlir.
when main() calls test() and both functions access GPU shared memory, IMEX will geenerate code like
func test(...) -> memref<...> {
s1 = gpuStreamCreate(...)
ret = gpuMemAlloc(s1, ...)
gpuLaunchKernel(ret, ...)
gpuWait()
gpuStreamDestroy(s1)
return ret
}
func main() {
s2 = gpuStreamCreate(...)
v = test(...)
gpuMemFree(s2, v)
gpuStreamDestroy(s2)
}
Note that it creates 2 streams s1 and s2. Also note that, the result of test is allocated from s1, which is already destroyed at the end of test. And we are using s2 to free the memory of the result.
This happens to work in L0 and Sycl runtime, but I guess it is not actually legal in them to create memory in one stream and free it in another. This will cause an error in opencl runtime, BTW.
Metadata
Metadata
Assignees
Labels
No labels