YaccConstructor / Brahma.FSharp

F# quotation to OpenCL translator and respective runtime to utilize GPGPUs in F# applications.
http://yaccconstructor.github.io/Brahma.FSharp
Eclipse Public License 1.0
74 stars 17 forks source link

Local memory not only at the outermost level. #149

Open IgorErin opened 1 year ago

IgorErin commented 1 year ago

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:

gsvgit commented 1 year ago

We can

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

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?