【问题标题】:Pass Alea GPU kernel a function通过 Alea GPU 内核函数
【发布时间】:2018-05-21 03:45:35
【问题描述】:

这在带有 Alea GPU 的 F# 中是否可行?

声明一个函数:

let my_function = fun a b -> a + b

将该函数传递给内核,并在内核中使用它:

let result = my_function 5 9

我知道另一种方法是简单地静态声明函数,例如:

[<ReflectedDefinition>]
let my_function a b =
    a + b

但我希望能够根据程序的参数更改my_function

例如:

[<ReflectedDefinition>]
let kernel (a:int) (adder:int->int) =
    let result <- adder a

let transformKernel = <@ kernel @> |> Compiler.makeKernel

let add_num b =
    fun (a:int) ->
        a + b

let run num1 num2 =
    let adder = add_num num2
    let gpu = Gpu.Default
    let num1Gpu = gpu.Allocate(num1)
    let adderGpu = gpu.Allocate(adder)
    let lp = LaunchParam(1, 1)
    gpu.Launch transformKernel lp num1Gpu adderGpu
    // return result


let my_result = run 3 7
// my_result should be 10

【问题讨论】:

    标签: f# aleagpu


    【解决方案1】:

    我在Alea GPU sample gallery 中找到了解决方案。我能看到的最简单的例子是 F# Generic Transform 示例。它使用code quotations 来编译基于任何指定类型(例如 int -> int -> int)的任何给定函数的内核

    【讨论】:

      猜你喜欢
      • 2018-11-19
      • 2019-03-03
      • 2019-03-05
      • 1970-01-01
      • 2017-05-22
      • 1970-01-01
      • 2014-08-23
      • 2016-07-28
      • 1970-01-01
      相关资源
      最近更新 更多