intel / mlir-extensions

Intel® Extension for MLIR. A staging ground for MLIR dialects and tools for Intel devices using the MLIR toolchain.
Other
120 stars 44 forks source link

multiple gpu streams created when lowering gpu to gpux #797

Open Menooker opened 3 months ago

Menooker commented 3 months ago

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.

Jianhui-Li commented 3 months ago

@silee2 could you please take a look? Is the behavior expected, or is it a bug?