Полные реализации .NET OpenCL
Я искал все, но не повезло. Есть ли хорошо документированные реализации привязки .NET для OpenCL? (Я бы взял что-то для CUDA, если бы мне пришлось).
Я столкнулся с различными реализациями: CUDA.NET, OpenCL.NET, OpenTK/Cloo (я знаю, они часто упоминаются в stackoverflow), но все они кажутся либо в альфа-стадии, либо не имеют абсолютно никаких доступных примеров. CUDA.NET имеет некоторые файлы справки, но это просто ссылка на библиотеку, которая на самом деле не помогает вам начать работу.
То, что я надеюсь найти, - это зрелая библиотека для программирования графических процессоров в .NET.
В конце концов мне нужно будет написать код в F #, но я бы взял любой совместимый с .NET язык, поскольку я всегда мог просто его преобразовать позже и использовать все примеры, которые включены для запуска и запуска.
Вероятно, длинный снимок с тех пор, как я обыскал все, но я надеюсь, что это всего лишь один из тех случаев, когда я не знаю, что нужно искать.
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Ну, все библиотеки, которые вы указали, являются простыми оболочками для собственных библиотек opencl. Они представляют собой относительно небольшое количество дополнительных абстракций и очень близки к общим функциям opencl. Поэтому, если вы знакомы с opencl, вы в кратчайшие сроки познакомитесь с этими библиотеками.
Я думаю, что реализация OpenCL.NET завершена, она свободна от всего, что не является OpenCL. Но после использования его несколько раз я нашел его слишком низким.
Я создал свой собственный обертку, он служит мне хорошей работой, значительно упростив хост-часть здесь главной частью одного из моих проектов (если вам интересно, я могу опубликовать мою оболочку OpenCl в github или любой другой службе 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>());
}
}
}
}
Ответ 2
Там есть другая библиотека привязок из OpenTK http://sourceforge.net/projects/cloo/.
Они позиционируют его как "Он обеспечивает намного более чистый OpenCL API по сравнению с необработанными привязками (которые также доступны в случае необходимости)" и "Cloo - это простая в использовании, управляемая библиотека с открытым исходным кодом, которая позволяет .NET/Моно приложения, чтобы в полной мере использовать инфраструктуру OpenCL."
Образцы выглядят очень многообещающими.
Ответ 3
У меня также есть набор открытых ссылок OpenCL для. СЕТЬ. Я написал это для себя в первую очередь, так что он будет зеркально отображать API OpenCL, будучи дружественным .NET. Для этой библиотеки никогда не будет абстракций ООП, и это будет довольно результативно.
http://openclnet.codeplex.com
Надеюсь, что это поможет.
Ответ 4
Я согласен с ответом olegz.
Я только начал использовать OpenCL, но Cloo, кажется, очень хороший выбор. Я считаю это довольно простым в использовании, и из многих источников я слышал, что он также очень богат функциональностью.
Ознакомьтесь со следующим сайтом, который также содержит некоторые примеры для Cloo:
http://www.cmsoft.com.br/
Ответ 5
Я использую OpenCLTemplate.
Здесь вы можете найти отличный учебник:
http://www.cmsoft.com.br/index.php?option=com_content&view=category&layout=blog&id=41&Itemid=75
Это сработало для меня. Я предлагаю вам также проверить Клоо.
Ответ 6
для F # я нашел это: https://github.com/GabrieleCocco/FSCL.Compiler (FSharp для компилятора OpenCL)
Ответ 7
Я использовал несколько разных оболочек С# OpenCL на протяжении многих лет, и теперь я использую NOpenCL. Он хорошо написан и находится под лицензией MIT.
https://github.com/tunnelvisionlabs/NOpenCL