Массив динамического размера Optix в полезной нагрузке

Есть ли способ объявить полезную нагрузку массива с динамическим размером в optix? Я погуглил и прочитал документацию Optix, но обнаружил, что Optix не позволяет использовать malloc. Есть ли способ сделать что-то вроде следующего?

struct PerRayData_radiance
{
 float3 result;
 float  importance;
 int depth;
 float stuff[N];
};

Был ли я размером массива до размера N в зависимости от некоторых пользовательских параметров.

Я пытался искать на форумах NVIDIA предыдущие вопросы, но похоже, что он был закрыт из-за некоторых проблем с безопасностью.


person icebreeze    schedule 30.08.2012    source источник


Ответы (1)


Вы не можете. Я задал именно этот вопрос на форумах NVIDIA OptiX, когда они были рядом, поскольку я хотел сделать это для своего приложения (хотел бы я дать вам http-указатель). К сожалению, одним из ограничений сгенерированных файлов ptx, используемых OptiX, является то, что вы не можете иметь такого рода динамическое распределение в лучах излучения, которые вы проходите.

Вместо этого для нашего приложения мы должны использовать массив с максимальным размером и uint, указывающий длину для текущего запуска. Я знаю, что память расточительна, но я не вижу никакого способа обойти это.

Вы захотите поиграть с максимальными размерами для вашего приложения и оборудования, потому что в этой ситуации размер стека, скорее всего, будет увеличен.

person Stephen Johnson    schedule 31.08.2012
comment
Спасибо, я предчувствовал, что так и будет. - person icebreeze; 10.09.2012
comment
Кстати, сейчас мы работаем над этим, используя возможность совместного использования контекста CUDA в 3.0. По сути, мы нашли способ позволить OptiX выполнять трассировку лучей, а CUDA выполнять вычисления, требующие динамического распределения, с большей гибкостью и без такого ограниченного стека. ЮММВ, конечно. - person Stephen Johnson; 20.11.2012