Как управлять большими 2D БПФ в cuda - PullRequest
3 голосов
/ 13 мая 2011

Я успешно написал код CFTA FFT, который выполняет 2D свертку изображения, а также некоторые другие вычисления.

Как мне выяснить, какие самые большие БПФ я могу запустить? Похоже, что для плана свертки 2D R2C требуется в 2 раза больше размера изображения и еще в 2 раза больше размера изображения для C2R. Это похоже на большие накладные расходы!

Кроме того, похоже, что большинство тестов и таковых для относительно небольших БПФ ... почему это? Похоже, что для больших изображений я собираюсь быстро исчерпать память. Как это обычно обрабатывается? Можете ли вы выполнить свертку БПФ на плитке изображения и объединить эти результаты, и ожидать, что она будет такой же, как если бы я запустил 2D БПФ для всего изображения?

Спасибо, что ответили на эти вопросы

Ответы [ 2 ]

5 голосов
/ 16 мая 2011

CUFFT планирует другой алгоритм в зависимости от размера вашего изображения. Если вы не можете уместиться в общей памяти и не используете степень 2, CUFFT планирует преобразование с места, в то время как меньшие изображения с нужным размером будут более доступными для программного обеспечения.

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

См. Документацию: http://developer.download.nvidia.com/compute/cuda/1_1/CUFFT_Library_1.1.pdf

Я согласен с Марком и говорю, что мозаичное изображение - это путь к свертке. Поскольку свертка состоит в простом вычислении многих независимых интегралов, вы можете просто разложить домен на его составные части, вычислить их независимо и объединить их обратно. Трюк с БПФ-конволюцией просто уменьшает сложность интегралов, которые вам нужно вычислить.

Я ожидаю, что ваш код GPU во всех ситуациях превзойдет Matlab в значительной степени, если вы не сделаете что-то странное.

1 голос
/ 13 мая 2011

Обычно нецелесообразно запускать FFT для всего изображения. Мало того, что это занимает много памяти, но изображение должно быть степенью 2 по ширине и высоте, что накладывает необоснованные ограничения на ваш ввод.

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

...