Здравствуйте! Начал изучать OpenCl. Использую OpenCL.Net. Видеокарта RTX 3060 c 12 Гб памяти. При использовании буферов данных небольшого объема (4 буфера по 3200 байт каждый) программа работает, если увеличить объем (например до 128000 байт) при вызове EnqueueWriteBuffer возникает ошибка: "попытка чтения или записи в защищённую память". При этом параметр MaxMemAllocSize - 1 073 905 664 байт (максимальный размер одного буфера) значительно превосходит объемы данных, которые я использовал. Кто-нибудь сталкивался с такой проблемой? Если делаю что-то неправильно прошу простить, я только начал изучать OpenCL.
Скорее всего проблема кроется тут Cl.CreateBuffer<float> Cl.EnqueueWriteBuffer<float> А именно в шаблоне параметра. Убедитесь что там размер передается в байтах а не в элементах. иначе получается что исходный массив будет меньшего размера
Большое Вам спасибо за ответ. Решение нашел. При вызове функции создания буфера, размер буфера - Siz_Mas соответствует размеру в байтах. bufferForInputVx = Cl.CreateBuffer<float>(_context, MemFlags.ReadWrite, Siz_Mas, out error); При копировании в память видеокарты: error = Cl.EnqueueWriteBuffer<float>(OpenCl_CommandQueue, bufferForInputVx, OpenCL.Net.Bool.True, 0, (Siz_Mas + 1), V_x, 0, null, out eventWriteBufferVx); размер нужно увеличить на 1 байт (Siz_Mas + 1) в этом случае ошибка не возникает. С чем это связано я не разобрался, нужно хорошо изучить документацию, но такой вариант работает при работе с большим объемом данных.