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

Returning unit from kernel throws exception #112

Closed dpanfilyonok closed 2 years ago

dpanfilyonok commented 3 years ago

Describe the bug

Unhandled exception. System.Exception: Printer. Unsupported statement: Brahma.FSharp.OpenCL.AST.Const`1[Brahma.FSharp.OpenCL.AST.Lang]
   at Microsoft.FSharp.Core.PrintfModule.PrintFormatToStringThenFail@1645.Invoke(String message)
   at Brahma.FSharp.OpenCL.Printer.Statements.Print[lang](Boolean isToplevel, Statement`1 stmt)
   at Brahma.FSharp.OpenCL.Printer.Statements.printStmtBlock@47.Invoke(Statement`1 stmt)
   at FSharpx.Collections.ResizeArray.map[T,U](FSharpFunc`2 f, List`1 arr)
   at Brahma.FSharp.OpenCL.Printer.Statements.printStmtBlock[lang](StatementBlock`1 sb)
   at Brahma.FSharp.OpenCL.Printer.Statements.Print[lang](Boolean isToplevel, Statement`1 stmt)
   at Brahma.FSharp.OpenCL.Printer.FunDecl.Print[lang](FunDecl`1 funDecl)
   at Microsoft.FSharp.Primitives.Basics.List.map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 x)
   at Microsoft.FSharp.Collections.ListModule.Map[T,TResult](FSharpFunc`2 mapping, FSharpList`1 list)
   at Brahma.FSharp.OpenCL.Printer.AST.Print[lang](AST`1 ast)
   at Brahma.FSharp.OpenCL.Core.CLCodeGenerator.GenerateKernel(FSharpExpr lambda, ComputeProvider provider, ICLKernel kernel, IEnumerable`1 translatorOptions)
   at Brahma.FSharp.OpenCL.Core.ComputeProvider.CompileQuery[T](ComputeProvider this, FSharpExpr lambda, IEnumerable`1 translatorOptions, FSharpList`1 additionalSources)
   at Brahma.FSharp.OpenCL.Core.ComputeProvider.Compile[TRange,a](ComputeProvider this, FSharpExpr`1 query, FSharpOption`1 _options, FSharpOption`1 translatorOptions, FSharpOption`1 _outCode, FSharpOption`1 kernelName, FSharpOption`1 _additionalSources)

To Reproduce

let kernel =
    <@
        fun (range: _1D) ->
            let i = range.GlobalID0
            ()
    @>

opencl {
    do! RunCommand kernel (fun kernelPrepare -> kernelPrepare <| _1D(10))
}
|> OpenCLEvaluationContext().RunSync

Additional context Version: 2.0.0-alpha6.1 Framework: netcoreapp3.1