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

Need a way to implicitly pass the size of the input data to the kernel #125

Open dpanfilyonok opened 2 years ago

dpanfilyonok commented 2 years ago

Is your feature request related to a problem? Please describe. There are 2 ways to pass the length of input array to the kernel now: 1) By capturing from the closure (leads to extra compilation)

let length = array.Length
let kernel =
    <@
        fun (range: Range1D) (array: int[]) ->
            let gid = range.GlobalID0
            if gid < length then
                array.[gid] <- 1
    @>

2) By passing as explicit kernel parameter (less convenient)

let kernel =
    <@
        fun (range: Range1D) (array: int[]) (length: int) ->
            let gid = range.GlobalID0
            if gid < length then
                array.[gid] <- 1
    @>

Describe the solution you'd like Make it possible to use .Length property of arrays. So

let kernel =
    <@
        fun (range: Range1D) (array: int[]) ->
            let gid = range.GlobalID0
            if gid < array.Length then
                array.[gid] <- 1
    @>

will be transformed to

let kernel =
    <@
        fun (range: Range1D) (array: int[]) (arrayLength: int) ->
            let gid = range.GlobalID0
            if gid < arrayLength then
                array.[gid] <- 1
    @>