c# - Completar las implementaciones de.NET OpenCL
opencl.net (7)
Bueno, todas las bibliotecas que ha declarado son simples envoltorios para bibliotecas nativas opencl. Presentan una cantidad relativamente pequeña de abstracciones adicionales y están muy cerca de las funciones generales de apertura. Por lo tanto, si está familiarizado con Opencl en general, se familiarizará con estas bibliotecas en poco tiempo.
Creo que la implementación de ''OpenCL.NET'' está completa, está libre de cualquier cosa que no sea OpenCL. Pero después de usarlo varias veces lo he encontrado en un nivel demasiado bajo.
He creado mi propio contenedor que me sirve bien al simplificar la parte del host dramáticamente aquí está la parte del host de uno de mis proyectos (si está interesado, puedo publicar mi contenedor OpenCl en github o cualquier otro servicio svn):
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>());
}
}
}
}
He estado buscando por todas partes pero he tenido poca suerte. ¿Hay implementaciones de enlace .NET bien documentadas para OpenCL? (Tomaría algo para CUDA si tuviera que hacerlo). Me he encontrado con una variedad de implementaciones, CUDA.NET, OpenCL.NET, OpenTK / Cloo (lo sé, se mencionan a menudo de stackoverflow), pero todas parecen estar en fase alfa o no tienen absolutamente ningún ejemplo disponible. CUDA.NET tiene algunos archivos de ayuda, pero es solo una referencia de la biblioteca, lo que realmente no le ayuda a comenzar.
Lo que espero encontrar es una biblioteca madura para la programación de GPU en .NET. Eventualmente, necesito poder escribir el código en F #, pero tomaría cualquier lenguaje compatible con .NET, ya que siempre podría convertirlo más tarde y usar los ejemplos incluidos para comenzar a usar.
Probablemente sea una posibilidad muy remota ya que he buscado por todas partes, pero espero que este sea solo uno de esos casos en los que no sé qué es lo correcto que debo buscar.
Cualquier ayuda sería muy apreciada.
Estoy de acuerdo con la respuesta de Olegz. Solo comencé a usar OpenCL, pero Cloo parece ser una muy buena opción. Me parece bastante sencillo de usar y, desde muchas fuentes, escucho que también es muy rico en funcionalidad.
Echa un vistazo al siguiente sitio, que también incluye algunos ejemplos para Cloo: http://www.cmsoft.com.br/
Hay otra biblioteca de enlaces de OpenTK http://sourceforge.net/projects/cloo/ .
Lo posicionan como "Proporciona una API OpenCL mucho más limpia en comparación con los enlaces en bruto (que también están disponibles en caso de que los necesite)" y "Cloo es una biblioteca de código abierto, fácil de usar y administrada que permite a las aplicaciones .NET / Mono aprovechar al máximo el marco de OpenCL ".
Las muestras parecen muy prometedoras.
He estado utilizando OpenCLTemplate.
Puede encontrar un excelente tutorial aquí: cmsoft.com.br/…
Funcionó bien para mí. Le sugiero que también eche un vistazo a Cloo.
He usado algunos envoltorios de OpenCL de C # diferentes a lo largo de los años y ahora estoy usando NOpenCL. Está bien escrito y está bajo la licencia MIT.
También tengo un conjunto de enlaces OpenCL de código abierto para. RED. Escribí esto para mí principalmente, de modo que reflejara fielmente la API de OpenCL y fuera compatible con .NET. Nunca habrá abstracciones OOP para esta biblioteca, y es bastante eficaz.
Espero que esto ayude.
para F # encontré este: https://github.com/GabrieleCocco/FSCL.Compiler (FSharp al compilador de OpenCL)