GPUCompiler.jl
GPUCompiler.jl copied to clipboard
Reusable compiler infrastructure for Julia GPU backends.
Using Preferences.jl instead of environment variables and split the cache on a user defined key, GPUCompiler version, and Julia version.
For now it's just a simple rebase + actually turning on imaging mode. There are still some issues such as const globals being turned into null pointers instead of the...
Requires https://github.com/JuliaLang/julia/pull/38642 We can tell Julia that we want it to emit symbols instead of session-specific pointers, making our code (potentially) relocatable. I'm not locked in on this API, but...
Trying out the integration from https://github.com/JuliaGPU/GPUCompiler.jl/pull/311 to at least validate lowered IR and, e.g., find references to non-const globals.
``` julia> f() = (X;nothing) f (generic function with 1 method) julia> @code_lowered f() CodeInfo( 1 ─ Main.X └── return Main.nothing ) julia> native_code_typed(f, Tuple{}) static_eval(stmt) = Some([1, 2, 3])...
https://github.com/JuliaGPU/GPUCompiler.jl/blob/466278387961d1994b3d14b6f54c473c08b26ed8/src/cache.jl#L18= ``` julia> @cuda identity(1,2) ERROR: MethodError: no method matching typeof(identity)(::Int64, ::Int64) ```
``` julia-debug: /home/tim/Julia/src/julia/deps/srccache/llvm-julia-13.0.1-0/llvm/lib/IR/Value.cpp:493: void llvm::Value::doRAUW(llvm::Value*, llvm::Value::ReplaceMetadataUses): Assertion `New->getType() == getType() && "replaceAllUses of value with new value of different type!"' failed. ``` ``` #0 0x00007ffff7e1c34c in __pthread_kill_implementation () from /usr/lib/libc.so.6...
``` LazyCodegen: Test Failed at /Users/tim/Julia/pkg/GPUCompiler/test/native.jl:341 Expression: call_delayed(complex, 1.0, 2.0) == 1.0 + 2.0im Evaluated: 5.0e-324 + 5.3532846314e-314im == 1.0 + 2.0im ``` Even though the LLVM IR looks identical:...