Я пытаюсь написать 2-мерный cudaArray через surface<void, 2>
. Массив имеет формат канала {32, 32, 0, 0, cudaChannelFormatKindFloat}
или, проще говоря, содержит vector2
s.Написание поверхности CUDA, поддерживаемой массивом векторов
Я пытаюсь написать vector2
на поверхность в позиции, обозначенной целыми координатами (x, y)
. Следующие работы также:
// write the float2 vector d to outSurf
surf2Dwrite(d.x, outSurf, x * sizeof(float2), y);
surf2Dwrite(d.y, outSurf, x * sizeof(float2) + sizeof(float), y);
Однако, если я
surf2Dwrite(d, outSurf, x * sizeof(float2), y);
только x
компонент вектора записывается. В чем причина этого слегка неинтуитивного поведения?
В этом была проблема. Хотя мне интересно, почему позволить Type = vector2 не выводить из аргументов компилятора. –
В разделе 3.2.10.2.2 Руководства по программированию CUDA C (4.0) указано, что поверхности используют байтовую адресацию для координаты x, поэтому умножение 'x' на' sizeof (float2) 'по-прежнему необходимо. –