Подтвердить что ты не робот

Полные реализации .NET OpenCL

Я искал все, но не повезло. Есть ли хорошо документированные реализации привязки .NET для OpenCL? (Я бы взял что-то для CUDA, если бы мне пришлось). Я столкнулся с различными реализациями: CUDA.NET, OpenCL.NET, OpenTK/Cloo (я знаю, они часто упоминаются в stackoverflow), но все они кажутся либо в альфа-стадии, либо не имеют абсолютно никаких доступных примеров. CUDA.NET имеет некоторые файлы справки, но это просто ссылка на библиотеку, которая на самом деле не помогает вам начать работу.

То, что я надеюсь найти, - это зрелая библиотека для программирования графических процессоров в .NET. В конце концов мне нужно будет написать код в F #, но я бы взял любой совместимый с .NET язык, поскольку я всегда мог просто его преобразовать позже и использовать все примеры, которые включены для запуска и запуска.

Вероятно, длинный снимок с тех пор, как я обыскал все, но я надеюсь, что это всего лишь один из тех случаев, когда я не знаю, что нужно искать.

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 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/

Ответ 7

Я использовал несколько разных оболочек С# OpenCL на протяжении многих лет, и теперь я использую NOpenCL. Он хорошо написан и находится под лицензией MIT.

https://github.com/tunnelvisionlabs/NOpenCL