CUDA свертка - неразделимые ядра - PullRequest
2 голосов
/ 31 марта 2011

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Мое предложение с графическим процессором:

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

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

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

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

1 голос
/ 31 марта 2011

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

...