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
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
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
Ê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.
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
Intel a un très bon exemple - en utilisant SSE + OpenMP et une version en série de celui-ci. Le code est principalement destiné à profiler la série et une approche parallèle, mais est fait d'une manière agréable. http://software.intel.com/en-us/articles/16bit-3d-convolution-sse4openmp-implementation-on-penryn-cpu/
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
FWIW, la source originale pour docs cufft est ici: http://www.nvidia.com/object/cuda_develop.html –