Ядро OpenCL молча не запускается - PullRequest
0 голосов
/ 01 октября 2018

Я пробовал этот код на двух разных системах:

using System;
using System.Collections.Generic;
using System.Linq;
using Cloo;

namespace MinimalExample
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = Enumerable.Range(0, 10).ToArray();
            var output = new int[input.Length];
            var platform = ComputePlatform.Platforms.First();
            var context = new ComputeContext(
                platform.Devices,
                new ComputeContextPropertyList(platform), 
                null,
                IntPtr.Zero
            );
            var queue = new ComputeCommandQueue(
                context,
                platform.Devices.First(),
                ComputeCommandQueueFlags.None
            );
            var program = new ComputeProgram(
                context,
                "void kernel some_test(constant int* a, global int* b) { " + 
                     int i = get_global_id(0);
                     b[i] = a[i];
                 }");
            program.Build(null, string.Empty, null, IntPtr.Zero);
            using (var kernel = program.CreateKernel("some_test"))
            using (var inBuff = new ComputeBuffer<int>(context, ComputeMemoryFlags.ReadOnly | ComputeMemoryFlags.UseHostPointer, input))
            using (var outBuff = new ComputeBuffer<int>(context, ComputeMemoryFlags.WriteOnly | ComputeMemoryFlags.UseHostPointer, output))
            {
                kernel.SetMemoryArgument(0, inBuff);
                kernel.SetMemoryArgument(1, outBuff);
                var events = new List<ComputeEventBase>();
                queue.Execute(kernel, null, new long[] { input.Length }, null, events);
                queue.Finish();
            }
            if (output.All(x => x == 0)) throw new Exception("Output buffer not written.");
        }
    }
}
  • В моей настольной системе эта программа не выдает (output имеет значения, которые вы ожидаете от чтениякод ядра).Эта система имеет графический процессор AMD с поддержкой OpenCL 2.1.

  • На моем ноутбуке эта программа выбрасывает последнюю строку.Это означает, что ядро ​​работает не так, как я планировал, или вообще не работает.Эта система оснащена процессором Intel с поддержкой OpenCL 2.1 и графическим процессором Nvidia с поддержкой OpenCL 1.2, все они демонстрируют одинаковое поведение.Образцы OpenCL, загруженные из Nvidia, похоже, проходят самопроверку и проходят нормально.

Cloo проверяет коды ошибок, не имеющие успеха, и выдает их, если в любом случае возвращается ошибка.Но на всякий случай я непосредственно проверял коды, возвращаемые Cloo OpenCL, и все они действительно указывают на «успех».

Кажется, не имеет значения, пробую ли я разные комбинации флагов и адресных пространств - одинсистема никогда не выбрасывает, одна система всегда выбрасывает.

Чего мне здесь не хватает?

...