Brahma.FSharp
Brahma.FSharp copied to clipboard
Local memory not only at the outermost level.
The ability to declare local memory in not only at the outermost level in the kernel.
In OpenCL 3.0: variables declared in the outermost compound statement inside the body of the kernel function can be qualified by the local or constant address spaces.
To Reproduce Steps to reproduce the behavior:
<@ fun someLength ->
let gid = ndRange.GlobalID0
let lid = ndRange.LocalID0
if gid <= someLength then
// Example of variable in __local address space but not
// declared at __kernel function scope.
let localPtr = localArray<int> localPointersArraySize // error @>
Expected behavior Successful compilation and execution.
Desktop:
- OpenCL 2.0, OpenCL 3.0
We can
- Automatically lift local varialbles up
- Pass
--cl-std=CL1.2to compiler - Manualy lift local variable up
I don't quite understand why the problem with allocating local memory should be solved at the translator level. Is it fair to implicitly move a potential user's code this way? Doesn't this change the semantics of the program too much?