43 votes

Implémentations complètes .NET OpenCL

J'ai cherché partout, mais ont eu peu de chance. Sont-il bien documenté .NET de liaison des implémentations pour OpenCL? (Je voudrais prendre quelque chose pour CUDA si je devais). J'ai couru dans une variété de mises en œuvre, CUDA.NET, OpenCL.NET, OpenTK / Cloo (je sais, ils sont souvent mentionnés de stackoverflow), mais ils semblent tous être en phase alpha ou n'ont absolument pas d'exemples disponibles. CUDA.NET a certains fichiers d'aide, mais c'est juste une référence à la bibliothèque, qui n'a pas vraiment vous aider à obtenir commencé.

Ce que je suis l'espoir de trouver une mature de la bibliothèque pour la programmation sur GPU dans .NET. Finalement, j'ai besoin d'être capable d'écrire le code en F#, mais je prendrais tout .NET conforme langue que je pouvais toujours le convertir plus tard, et utilisez ce que les exemples sont inclus pour se lever et courir.

Probablement un long coup depuis que je l'ai cherché partout, mais je suis en espérant que c'est juste un de ces cas où, je ne sais pas la bonne chose à rechercher.

Toute aide serait grandement appréciée.

32voto

Lu4 Points 2774

Eh bien, toutes les bibliothèques que vous avez indiqués sont simples emballages pour opencl bibliothèques natives. Ils posent relativement petite quantité supplémentaire d'abstractions et sont très proches général opencl fonctions. Donc, si vous êtes familier avec prise en charge d'opencl en général, vous vous familiariserez avec ces bibliothèques en un rien de temps.

Je pense que les OpenCL.NET' la mise en œuvre est terminée, il est libre de tout ce qui n'est pas prise en charge d'OpenCL. Mais après l'avoir utilisé plusieurs fois, je l'ai trouvé trop bas niveau.

J'ai créé mon propre wrapper il me sert du bon travail en simplifiant la partie hôte de façon spectaculaire voici la partie hôte de l'un de mes projets (si vous êtes intéressé, je peux publier mes OpenCl wrapper dans github ou de tout autre svn service):

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<Single>());
            }
        }
    }
}

14voto

olegz Points 660

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

Ils la positionnent comme suit: "Elle fournit une API OpenCL beaucoup plus propre par rapport aux 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 cadre OpenCL. "

Les échantillons semblent très prometteurs.

8voto

ananthonline Points 7431

J'ai aussi un ensemble de liaisons OpenCL open source pour. NET. Je l'ai écrit pour moi principalement afin de refléter fidèlement l'API OpenCL tout en étant convivial .NET. Il n’y aura jamais d’abstractions POO pour cette bibliothèque, et elle est très performante.

http://openclnet.codeplex.com

J'espère que cela t'aides.

1voto

Attila Bujáki Points 1221

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

Cela a bien fonctionné pour moi. Je suggère que vous devriez vérifier Cloo aussi.

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