向 Alea GPU 内核传递一个函数
Pass Alea GPU kernel a function
在 F# 中使用 Alea GPU 这可能吗?
声明一个函数:
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
我在 Alea GPU sample gallery. The simplest example I could see of this is the F# Generic Transform sample. It uses code quotations 中找到了一个解决方案,可以根据某些指定类型的任何给定函数(例如 int -> int -> int)编译内核
在 F# 中使用 Alea GPU 这可能吗?
声明一个函数:
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
我在 Alea GPU sample gallery. The simplest example I could see of this is the F# Generic Transform sample. It uses code quotations 中找到了一个解决方案,可以根据某些指定类型的任何给定函数(例如 int -> int -> int)编译内核