2016-11-29 14 views
0

Я пытаюсь выполнить сокращение с помощью графического процессора, то есть найти максимальное значение из всех элементов массива. Есть учебник от Nvidia here, скажем, слайд 7 для простейшего методаУменьшение GPU для массива с миллиардными элементами

Единственная проблема, с которой я столкнулся, это мой массив огромный! он может достигать 4 миллиардов элементов. Из примера кода в слайде 7 необходимо копировать back-and-forth между блочной общей памятью и глобальной памятью, а использование глобальной памяти для хранения всех элементов в моем нынешнем понимании невозможно избежать. Это хранилище превышает 2 ГБ памяти графической карты.

Есть ли способ сделать это сокращение с помощью таких огромных массивов или это текущие пределы графического оборудования?

PS: В будущем расширенной версии, я также планирую с гораздо более 4 миллиардов элементов

+0

Почему вы не можете просто выполнить сокращение на кусках входных данных, которые поместили бы там память GPU, а затем уменьшите частичные результаты, чтобы найти истинный максимум? – talonmies

+0

Теперь я чувствую себя глупо! возможно, должен закрыть этот вопрос. Спасибо за ваши подсказки! –

ответ

1

Снижение является операцией, которые вы можете сделать в куски.

Простейшим решением было бы распределить два буфера данных и два буфера данных на графическом процессоре, а затем наложить переход на GPU с выполнением ядра восстановления. Ваш CPU может уменьшить выход последовательных сокращений GPU, пока GPU занят. Таким образом, вы можете амортизировать большую часть стоимости передачи данных и обработку результатов частичного сокращения.

Вы можете сделать все это с помощью стандартного ядра NVIDIA для восстановления с примерами CUDA.

+0

то, что вы говорите, больше похоже на расширенное использование, которое сотрудничает между процессором и процессором gpu. Я собираюсь искать это, хотя для последующих обновлений. Спасибо! –