2011-07-15 4 views
2

Я пытаюсь написать 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 компонент вектора записывается. В чем причина этого слегка неинтуитивного поведения?

ответ

2

Мне трудно поверить, что любой из этих вызовов surf2Dwrite фактически делает то, что, по вашему мнению, они делают. Для того, чтобы написать float2 Я хотел бы использовать это:

surf2Dwrite<float2>(d, outSurf, x, y); 

х и у аргументов координаты на поверхности вы пишете и параметр шаблона указывает вызов размер типа осуществляется доступ.

+0

В этом была проблема. Хотя мне интересно, почему позволить Type = vector2 не выводить из аргументов компилятора. –

+1

В разделе 3.2.10.2.2 Руководства по программированию CUDA C (4.0) указано, что поверхности используют байтовую адресацию для координаты x, поэтому умножение 'x' на' sizeof (float2) 'по-прежнему необходимо. –

 Смежные вопросы

  • Нет связанных вопросов^_^