CUDA глобальная статическая альтернатива данных? - PullRequest
2 голосов
/ 09 февраля 2011

Я создаю инструментарий, который предлагает различные алгоритмы в CUDA.Однако многие из этих алгоритмов используют глобальные статические константы, которые будут использоваться всеми потоками, объявленными таким образом, например:

static __device__ __constant__ real buf[MAX_NB];

Моя проблема заключается в том, что если я включу все файлы .cuh в библиотеку,когда библиотека будет создана, вся эта память будет выделена на устройстве, даже если пользователь захочет использовать только один из этих алгоритмов.Есть ли способ обойти это?Придется ли мне использовать типичную динамически распределенную память?

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Вся постоянная память в файле .cu выделяется при запуске (когда .cubin генерируется и запускается, каждый .cu принадлежит отдельному модулю)! Поэтому, чтобы использовать много разных ядер, которые используют постоянную память, вы должны разделить их на файлы .cu, чтобы не получить переполнение памяти const. Обычный максимум составляет 64 КБ. Источник: http://forums.nvidia.com/index.php?showtopic=185993

0 голосов
/ 10 февраля 2011

Вы смотрели в память текстур? Я считаю, что это сложно, но это может быть довольно быстро и может быть распределено динамически.

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

(Я предполагаю, что вы подтвердили, что выделение постоянной памяти для всей библиотеки является проблемой. Недостаточно места или слишком много времени инициализации или как?)

...