Implémentations complètes .NET OpenCL

J’ai regardé partout mais j’ai eu peu de chance. Existe-t-il des implémentations de liaison .NET bien documentées pour OpenCL? (Je prendrais quelque chose pour CUDA si je devais). J’ai rencontré diverses implémentations, CUDA.NET, OpenCL.NET, OpenTK / Cloo (je sais, elles sont souvent mentionnées dans stackoverflow), mais elles semblent toutes être en phase alpha ou ne pas avoir d’exemples disponibles. CUDA.NET a des fichiers d’aide, mais c’est juste une référence à la bibliothèque, ce qui ne vous aide pas vraiment à démarrer.

Ce que j’espère trouver, c’est une bibliothèque mature pour la programmation GPU en .NET. Finalement, je dois pouvoir écrire le code en F #, mais je prendrais n’importe quel langage compatible .NET car je pourrais toujours le convertir plus tard et utiliser tous les exemples inclus pour être opérationnel.

Probablement un long coup depuis que j’ai cherché partout, mais j’espère que ce n’est que l’un de ces cas où je ne sais pas quoi faire.

Toute aide serait grandement appréciée.

Eh bien, toutes les bibliothèques que vous avez indiquées sont de simples wrappers pour les bibliothèques natives opencl. Ils posent relativement peu d’abstractions supplémentaires et sont très proches des fonctions opencl générales. Donc, si vous êtes familier avec opencl en général, vous vous familiariserez avec ces bibliothèques en un rien de temps.

Je pense que l’implémentation ‘OpenCL.NET’ est terminée, elle est libre de tout ce qui n’est pas OpenCL. Mais après l’avoir utilisé plusieurs fois, je l’ai trouvé trop bas.

J’ai créé mon propre wrapper qui me sert bien en simplifiant considérablement la partie hôte.

using System; using System.Net; using System.Collections.Generic; using System.IO; using Shared; using Shared.IO; using Shared.OpenCL; namespace Testing { public class ApplicationClass { static Random rand = new Random(); static Single[] RandomArray(Int32 length) { Single[] result = new Single[length]; for (int i = 0; i < result.Length; i++) { result[i] = (Single)rand.NextDouble(); } return result; } static void Main(string[] args) { DeviceGlobalMemory output = new Byte[4096]; DeviceGlobalMemory indeces = RandomArray(102400); DeviceGlobalMemory ops = new Byte[3072]; DeviceGlobalMemory data = RandomArray(1048576); Console.Write("Creating kernel..."); Kernel kernel = Kernel.Create("Kernel", File.ReadAllText("Test.c"), data, indeces, ops, output); Console.Write("Executing kernel..."); Event e = kernel.Execute(256, 256); kernel.CommandQueue.Finish(); Console.WriteLine("done, operation took {0}", Profiler.DurationSeconds(e)); UnmanagedReader reader = new UnmanagedReader(new DeviceBufferStream(output)); for (int i = 0; i < 256; i++) { if (i % 4 == 0) Console.WriteLine(); if (i % 16 == 0) Console.WriteLine(); Console.Write("{0}\t", reader.Read()); } } } } 

Il existe une autre bibliothèque de liens depuis OpenTK http://sourceforge.net/projects/cloo/ .

Ils le positionnent comme “Il fournit une API OpenCL beaucoup plus propre que les liaisons brutes (qui sont également disponibles au cas où vous en auriez besoin)” et “Cloo est une bibliothèque ouverte, facile à utiliser et gérée qui permet aux applications .NET / Mono de tirer pleinement parti du framework OpenCL. ”

Les échantillons semblent très prometteurs.

J’ai aussi un ensemble de liaisons OpenCL Open Source pour. NET. Je l’ai écrit pour moi principalement afin qu’il reflète fidèlement l’API OpenCL tout en étant .NET friendly. Il n’y aura jamais d’abstraction de la POO pour cette bibliothèque, et elle est assez performante.

http://openclnet.codeplex.com

J’espère que cela t’aides.

Je suis d’accord avec olegz répondre. J’ai seulement commencé à utiliser OpenCL mais Cloo semble être un très bon choix. Je trouve cela assez simple à utiliser et de nombreuses sources me disent que c’est aussi très riche en fonctionnalités.

Consultez le site suivant qui comprend également des exemples pour Cloo: http://www.cmsoft.com.br/

J’ai utilisé OpenCLTemplate.

Vous pouvez trouver un excellent tutoriel ici: http://www.cmsoft.com.br/index.php?option=com_content&view=category&layout=blog&id=41&Itemid=75

Ça a bien marché pour moi. Je vous suggère de vérifier Cloo aussi.

J’ai utilisé différents wrappers C # OpenCL au fil des ans et j’utilise maintenant NOpenCL. Il est bien écrit et est sous licence MIT.

https://github.com/tunnelvisionlabs/NOpenCL

pour F # j’ai trouvé celui-ci: https://github.com/GabrieleCocco/FSCL.Comstackr (FSharp à OpenCL Comstackr)