Мне нужно использовать массив структур в постоянной памяти для моего ядра, где фактический размер массива неизвестен до времени выполнения. Как ответили в Правильный способ использования памяти __constant__ на CUDA? , я понял, что постоянная память выделяется во время компиляции, поэтому массив должен быть объявлен как:
__constant__ SKY_GRID_TYPE const_patch_grid_lat[5];
, где размер уже определено. Но поскольку фактический размер, который мне нужен, зависит от других вычислений, выполненных во время выполнения, кажется, что я не могу использовать постоянную память.
Этот ответ выше предлагает вместо этого использовать текстурную память, которая говорит, что «может быть установлена динамически и кэширована». Однако тип данных, который мне нужен в моей памяти, является массивом struct и в соответствии с Структура в памяти текстур на CUDA , кажется, что память текстур поддерживает только встроенные типы CUDA.
Так есть ли обходной путь? Постоянная память была бы идеальной для моего массива структуры, но размер определяется динамически, поэтому он не работает. Память текстур работала бы, но она не допускает ничего, кроме встроенных типов CUDA. Могу ли я использовать что-нибудь еще или какой-нибудь умный способ обойти это?