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

Support for loop with step #114

Closed dpanfilyonok closed 2 years ago

dpanfilyonok commented 3 years ago

Is your feature request related to a problem? Please describe.

Unhandled exception. System.Exception: Unsupported call: op_rangestep
   at Microsoft.FSharp.Core.PrintfModule.PrintFormatToStringThenFail@1645.Invoke(String message)
   at Brahma.FSharp.OpenCL.Translator.Body.Translate(FSharpExpr expr, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.TranslateAsExpr(FSharpExpr expr, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.translateCond(FSharpExpr cond, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.translateBinding(FSharpVar var, String newName, FSharpExpr expr, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.translateLet(FSharpVar var, FSharpExpr expr, FSharpExpr inExpr, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.Translate(FSharpExpr expr, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.translateLet(FSharpVar var, FSharpExpr expr, FSharpExpr inExpr, TargetContext`2 targetContext)
   at Brahma.FSharp.OpenCL.Translator.Body.Translate(FSharpExpr expr, TargetContext`2 targetContext)
   at <StartupCode$Brahma-FSharp-OpenCL-Translator>.$Translator.go$cont@153(IEnumerable`1 translatorOptions, TargetContext`2 context, FSharpExpr expr, FSharpList`1 vars, Unit unitVar)
   at <StartupCode$Brahma-FSharp-OpenCL-Translator>.$Translator.go@148-13(IEnumerable`1 translatorOptions, TargetContext`2 context, FSharpExpr expr, FSharpList`1 vars)
   at Brahma.FSharp.OpenCL.Translator.FSQuotationToOpenCLTranslator.translate(FSharpExpr qExpr, IEnumerable`1 translatorOptions)
   at <StartupCode$Brahma-FSharp-OpenCL-Translator>.$Translator.action@1(FSQuotationToOpenCLTranslator this, FSharpExpr qExpr, IEnumerable`1 translatorOptions, Unit _arg1)
   at Brahma.FSharp.OpenCL.Translator.FSQuotationToOpenCLTranslator.Translate(FSharpExpr qExpr, IEnumerable`1 translatorOptions)
   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)

when

let kernel =
    <@
        fun (range: _1D) ->
            let mutable mut = range.GlobalID0
            for i in 0 .. 2 .. 10 do
                mut <- 0
    @>

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

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