CUDA Stream compaction: понимание концепции

Я использую CUDA / Thrust / CUDPP. Насколько я понимаю, при сжатии Stream определенные элементы в массиве помечаются как недопустимые, а затем «удаляются».

Что на самом деле означает здесь «удаление»? Предположим, что исходный массив A имеет длину 6. Если 2 элемента недопустимы (по любому условию, которое мы можем предоставить), то

  1. Создает ли система новый массив размера 4 в GPU-память для хранения валидных элементов, чтобы получить окончательный результат?

  2. ИЛИ физически удаляет недопустимые элементы из памяти и сжимает исходный массив Уменьшить размер до 4, сохраняя только действительные элементы?

В любом случае, не означает ли это, что динамическое распределение памяти происходит под капотом? Но я слышал, что динамическое распределение памяти невозможно в мире CUDA.

5
задан smilingbuddha 5 December 2011 в 16:01
поделиться