it-swarm.com.de

Schließen Sie die .NET OpenCL-Implementierungen ab

Ich habe überall gesucht, habe aber wenig Glück gehabt. Gibt es gut dokumentierte .NET-Bindungsimplementierungen für OpenCL? (Ich würde etwas für CUDA nehmen, wenn ich müsste.) Ich habe eine Vielzahl von Implementierungen durchlaufen, CUDA.NET, OpenCL.NET, OpenTK/Cloo (ich weiß, dass sie oft von stackoverflow genannt werden). Sie scheinen jedoch alle entweder im Alpha-Stadium zu sein oder haben absolut keine verfügbaren Beispiele. CUDA.NET enthält einige Hilfedateien, aber es handelt sich lediglich um eine Bibliotheksreferenz, die Ihnen nicht wirklich beim Einstieg hilft.

Was ich hoffte zu finden, ist eine mature - Bibliothek für die GPU-Programmierung in .NET . Eventuell muss ich den Code in F # schreiben können, aber ich würde jede .NET-kompatible Sprache nehmen, wie ich könnte Konvertieren Sie es immer erst später und verwenden Sie die mitgelieferten Beispiele, um loszulegen.

Wahrscheinlich ein langer Weg, seit ich alles gesucht habe, aber ich hoffe, dass dies nur einer der Fälle ist, in denen ich nicht das Richtige weiß, wonach ich suchen kann.

Jede Hilfe wäre sehr dankbar.

42
Adam Haile

Nun, alle Bibliotheken, die Sie angegeben haben, sind einfache Wrapper für native Opencl-Bibliotheken. Sie stellen relativ wenig zusätzliche Abstraktionen dar und sind den allgemeinen opencl-Funktionen sehr nahe. Wenn Sie sich mit opencl im Allgemeinen auskennen, werden Sie sich in kürzester Zeit mit diesen Bibliotheken vertraut machen.

Ich denke, die Implementierung von 'OpenCL.NET' ist abgeschlossen, sie ist frei von allem, was nicht OpenCL ist. Aber nachdem ich es mehrmals verwendet habe, fand ich es zu niedrig.

Ich habe meinen eigenen Wrapper erstellt, der mir gute Arbeit leistet, indem ich den Host-Teil dramatisch vereinfacht. Hier ist der Host-Teil eines meiner Projekte (bei Interesse kann ich meinen OpenCl-Wrapper in Github oder einem anderen svn-Service veröffentlichen)

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

Es gibt eine weitere Bindungsbibliothek von OpenTK http://sourceforge.net/projects/cloo/ .

Sie positionieren es als "Es bietet eine viel sauberere OpenCL-API im Vergleich zu rohen Bindungen (die auch verfügbar sind, falls Sie sie benötigen)" und "Cloo ist eine einfach zu bedienende Open Source-Bibliothek, die .NET/Mono-Anwendungen ermöglicht Nutzen Sie das OpenCL-Framework voll aus. "

Die Muster sehen vielversprechend aus.

12
olegz

Ich habe auch eine Reihe von Open-Source-OpenCL-Bindungen für. NETZ. Ich habe dies hauptsächlich für mich geschrieben, damit es die OpenCL-API getreu widerspiegelt und gleichzeitig .NET-freundlich ist. Es wird niemals OOP Abstraktionen für diese Bibliothek geben, und es ist ziemlich performant.

http://openclnet.codeplex.com

Hoffe das hilft.

8
Ani

Ich habe im Laufe der Jahre einige verschiedene C # OpenCL-Wrapper verwendet und benutze jetzt NOpenCL. Es ist gut geschrieben und steht unter der MIT Lizenz. 

https://github.com/tunnelvisionlabs/NOpenCL

1
Sunsetquest

Ich habe OpenCLTemplate verwendet.

Ein großartiges Tutorial finden Sie hier: http://www.cmsoft.com.br/index.php?option=com_content&view=category&layout=blog&id=41&Itemid=75

Es hat gut für mich funktioniert. Ich schlage vor, du solltest auch Cloo ausprobieren.

1
Attila

Ich stimme der Antwort von Olegz zu. Ich habe erst mit OpenCL angefangen, aber Cloo scheint eine sehr gute Wahl zu sein. Ich finde es ziemlich einfach zu benutzen und aus vielen Quellen höre ich, dass es auch sehr reich an Funktionalität ist.

Besuchen Sie die folgende Website, die auch einige Beispiele für Cloo enthält: http://www.cmsoft.com.br/

1
user417181

für F # habe ich dieses gefunden: https://github.com/GabrieleCocco/FSCL.Compiler (FSharp to OpenCL Compiler)

0
iBoy