Итак, я пытаюсь выполнить какую-то операцию внутри ядра OpenCL.У меня есть этот буфер с именем filter, который представляет собой матрицу 3x3, инициализированную значением 1.
Я передаю это в качестве аргумента ядру OpenCL со стороны хоста.Проблема в том, когда я пытаюсь получить этот буфер на стороне устройства как вектор float3.Для ex -
__kernel void(constant float3* restrict filter)
{
float3 temp1 = filter[0];
float3 temp2 = filter[1];
float3 temp3 = filter[2];
}
Первые две временные переменные ведут себя, как и ожидалось, и все их значения равны 1. Но третья временная переменная (temp3) имеет только компонент x как 1, а остальные из y иКомпоненты z равны 0. Когда я выбираю буфер как только вектор с плавающей точкой, все ведет себя как ожидалось.Я делаю что-то неправильно?Я не хочу использовать инструкции vload, поскольку они дают служебные данные.