C 使用英特尔MKL的三维卷积

C 使用英特尔MKL的三维卷积,c,3d,fft,convolution,intel-mkl,C,3d,Fft,Convolution,Intel Mkl,我正在尝试使用英特尔MKL计算三维阵列的三维卷积。有人能给我一些提示吗?使用MKL可以实现吗?提前感谢。英特尔有一个3D FFT的功能,它应该有助于在频率空间中通过乘法执行卷积运算。很抱歉,我没有完整的解决方案: 三维实FFT(C接口) #包括“mkl_dfti.h” 浮动x[32][100][19]; 浮点数y[32][100][10];/*10 = 19/2 + 1 */ DFTI描述符句柄my desc句柄; MKL_LONG状态,l[3]; MKL_大步走出来[4]; //…将输入数据放

我正在尝试使用英特尔
MKL
计算三维阵列的三维卷积。有人能给我一些提示吗?使用
MKL
可以实现吗?提前感谢。

英特尔有一个3D FFT的功能,它应该有助于在频率空间中通过乘法执行卷积运算。很抱歉,我没有完整的解决方案:

三维实FFT(C接口)

#包括“mkl_dfti.h”
浮动x[32][100][19];
浮点数y[32][100][10];/*10 = 19/2 + 1 */
DFTI描述符句柄my desc句柄;
MKL_LONG状态,l[3];
MKL_大步走出来[4];

//…将输入数据放入x[j][k][s]0如果您有解决方案,请发布。好问题,谢谢。我看过这个例子,它展示了如何使用图书馆。
#include "mkl_dfti.h"
float x[32][100][19];
float _Complex y[32][100][10]; /* 10 = 19/2 + 1 */
DFTI_DESCRIPTOR_HANDLE my_desc_handle;
MKL_LONG status, l[3];
MKL_LONG strides_out[4];

//...put input data into x[j][k][s] 0<=j<=31, 0<=k<=99, 0<=s<=18
l[0] = 32; l[1] = 100; l[2] = 19;

strides_out[0] = 0; strides_out[1] = 1000;
strides_out[2] = 10; strides_out[3] = 1;

status = DftiCreateDescriptor( &my_desc_handle, DFTI_SINGLE,
DFTI_REAL, 3, l );
status = DftiSetValue(my_desc_handle,
DFTI_CONJUGATE_EVEN_STORAGE, DFTI_COMPLEX_COMPLEX);
status = DftiSetValue( my_desc_handle, DFTI_PLACEMENT, DFTI_NOT_INPLACE );
status = DftiSetValue(my_desc_handle,
DFTI_OUTPUT_STRIDES, strides_out);

status = DftiCommitDescriptor(my_desc_handle);
status = DftiComputeForward(my_desc_handle, x, y);
status = DftiFreeDescriptor(&my_desc_handle);
/* result is the complex value z(j,k,s) 0<=j<=31; 0<=k<=99, 0<=s<=9
and is stored in complex matrix y in CCE format. */