2 votes

Passer le noyau du GPU d'Alea à une fonction

Est-ce possible en F# avec Alea GPU ?

Déclarer une fonction :

let my_function = fun a b -> a + b

Passez au noyau cette fonction, et utilisez-la dans le noyau :

let result = my_function 5 9

Je comprends qu'une alternative est de simplement déclarer statiquement la fonction comme :

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

Mais je veux être capable de changer my_function en fonction des paramètres du programme.

Par exemple :

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

0voto

benjennen Points 30

J'ai trouvé une solution à ce problème dans le Galerie d'échantillons de GPU Alea . L'exemple le plus simple que j'ai pu voir est l'échantillon F# Generic Transform. Il utilise citations de codes pour compiler des noyaux basés sur une fonction donnée d'un certain type spécifié (par exemple int -> int -> int)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X