Свертка CUDA — неразделяемые ядра

Мне нужно реализовать эффективную версию свертки изображений с неразделяемыми ядрами (поэтому CUDA sdk полезен только для примера FFT, но четко указано, что он отлично работает только для больших размеров ядра)

Помимо реализации с нуля, как мне кажется, мне нужно работать с матрицами и ядрами априори неизвестных размеров (они могут быть 10x10 как 20.000x20.000, я просто не могу это предсказать)

Каковы ваши предложения относительно примера БПФ? (если это ваш лучший выбор, пожалуйста, дайте мне хорошую точку, чтобы начать выяснять, как это работает)

И для второго выбора (вручную реализующего свертку самостоятельно), какие предложения по максимизации объединения памяти?


person Marco A.    schedule 31.03.2011    source источник


Ответы (2)


Мое предложение с GPU:

  1. Сначала сделайте это правильно. Освойтесь с алгоритмом, который вы хотите реализовать на графическом процессоре, сначала на ЦП. Вам придется иметь дело с гораздо большим количеством низкоуровневых деталей, поэтому важно, чтобы вы знали, каким должен быть результат.

  2. Сделай это быстро. Подход FFT является самым быстрым, если вы можете его использовать (в большинстве случаев).

Чтобы достичь своей первой цели, я советую вам попробовать реализовать ее с помощью OpenCv. Он имеет очень удобную оболочку для Python и предоставляет основу для фильтрации.

Как только вы будете уверены в своем результате и в том, как вы достигнете этого с помощью OpenCv, проверьте, можете ли вы сделать то же самое с помощью БПФ. Портирование всего на GPU было бы намного проще

person fabrizioM    schedule 01.04.2011

Возможно, вы захотите взглянуть на реализацию свертки в theano (они используют ядра, не основанные на БПФ)... или просто используйте theano.

person Josh Bleecher Snyder    schedule 31.03.2011
comment
Он написан на phyton, но я проверю, есть ли у них файлы .cu. Он оптимизирован? - person Marco A.; 31.03.2011
comment
В /theano/sandbox/cuda есть несколько файлов .cu и .cuh. Да, я считаю, что он довольно сильно оптимизирован. - person Josh Bleecher Snyder; 01.04.2011