Brahma.FSharp icon indicating copy to clipboard operation
Brahma.FSharp copied to clipboard

Local memory not only at the outermost level.

Open IgorErin opened this issue 2 years ago • 2 comments

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

IgorErin avatar Feb 25 '23 18:02 IgorErin

We can

  1. Automatically lift local varialbles up
  2. Pass --cl-std=CL1.2 to compiler
  3. Manualy lift local variable up

gsvgit avatar Feb 26 '23 07:02 gsvgit

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?

IgorErin avatar Feb 26 '23 08:02 IgorErin