Если я следующее:OpenCL: Объект не получает инициализируется со значением
this->bufferParams = cl::Buffer(context, CL_MEM_READ_ONLY, sizeof(Params), ¶ms, NULL);
Мой буфер не кажется, чтобы заселена с моим объектом Params. Однако, если я это сделаю
this->queue.enqueueWriteBuffer(this->bufferParams, CL_TRUE, 0, sizeof(Params), ¶ms, NULL);
Тогда это сработает. Есть ли способ в п :: синтаксис буфера для инициализации объекта в Титулы напрямую, а не делать команду Епдиеие
Хорошо, но изнутри ядро должен быть быстрый доступ? Я сделаю это только один раз – raaj
Если вы создаете буфер, он ведет себя как буфер, поэтому он является указателем в ядре и поэтому может быть записан. Так что он никоим образом не оптимизирован. Однако, если вы объявите его __constant, компилятор будет оптимизировать его, используя постоянную память. Но самый простой способ - просто использовать 'clSetKernelArgs()' напрямую. Это уже дает компилятору намек на то, что он никогда не будет написан, и позволяет вам обрабатывать создание буфера. – DarkZeros
Я бы рекомендовал использовать CL_MEM_USE_HOST_PTR для повышения производительности (нулевая копия, если поддерживается устройством). Существуют некоторые требования к Intel Gfx (буфер должен быть выровнен по 4K, а длина должна быть равна 64) – Elalfer