2017-12-07 11 views
2

Fle #에서 Alea GPU로 가능합니까? 기능을 커널에 전달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 b 프로그램의 매개 변수에 따라 달라집니다. 예를 들어

는 :

[<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 

답변

0

나는 Alea GPU sample gallery이에 대한 해결책을 발견했다. 가장 간단한 예제는 F # Generic Transform 샘플입니다. code quotations을 사용하여 특정 유형의 특정 함수 (예 : int -> int -> int)를 기반으로 커널을 컴파일합니다.