2009-12-22 8 views
3

Je cherche un code source implémentant la convolution 3d. Idéalement, j'ai besoin de code C++ ou de code CUDA. Je vous en serais reconnaissant si quelqu'un peut me pointer vers une belle et rapide mise en œuvre :-)Convolution 3D en C++

Vive

Répondre

3

vous comprenez que convolution est normalement fait en utilisant un fft? voir, par exemple, http://en.wikipedia.org/wiki/Convolution

donc vous avez besoin d'une bibliothèque fft.

Fastest method to compute convolution suggère http://www.fftw.org/ (pour un cpu traditionnel).

pour cuda, utilisez cufft - http://www.gsic.titech.ac.jp/~ccwww/tebiki/tesla_e/tesla6_e.html

+2

Pour les petits noyaux, il peut parfois être plus rapide d'utiliser la convolution matricielle, dans les cas où il y a du matériel pour la supporter (par exemple, un GPU pour les noyaux 4x4 ou 8x8). Pour les gros grains, Fourier est un homme à coup sûr. – Crashworks

+0

FWIW, la source originale pour docs cufft est ici: http://www.nvidia.com/object/cuda_develop.html –

0

Êtes-vous un développeur enregistré? Si c'est le cas, vous devriez télécharger le SDK 3.0 et vérifier l'exemple FDTD3d qui montre une convolution 3d appliquée à une application de différences finies explicite. Dans le 2.3 SDK, il y avait un échantillon appelé 3dfd qui était similaire (et qui a maintenant été remplacé).

Il peut être plus efficace d'utiliser cette approche plutôt que FFT si votre réponse impulsionnelle est courte.

+0

Vous pouvez vous inscrire à http://www.nvidia.com/object/cuda_get.html, cliquez sur " Appliquer maintenant". Alternativement, vous pouvez simplement regarder l'exemple 3dfd dans le SDK actuel, les concepts restent les mêmes. – Tom