2

我有一些大小为 N 的复数值数据,并想使用Intel OneAPI计算这些数据的 FFT 。这是我的代码:

# Connectivity
#include <bits/stdc++.h>
#include "mkl_dfti.h"
#include <complex.h>

using namespace std;
float pi = 2*acos(0.0);

int main(){
        long long int N; cin >> N
        float _Complex c2c_data[N];
        DFTI_DESCRIPTOR_HANDLE my_desc1_handle = NULL;
        DFTI_DESCRIPTOR_HANDLE my_desc2_handle = NULL;
        MKL_LONG status;
// data is inserted here
        status = DftiCreateDescriptor(&my_desc1_handle, DFTI_SINGLE, DFTI_COMPLEX, 1, N);
        status = DftiCommitDescriptor(my_desc1_handle);
        status = DftiComputeForward(my_desc1_handle, c2c_data);
        status = DftiFreeDescriptor(&my_desc1_handle);
        cout << round(cabs(c2c_data[s]) / N) << "\n";
        return 0;
}

这适用于 N 的较小情况,但对于较大的情况(大约 2^21),我会遇到分段错误,对于更大的情况,我会遇到总线错误。我已经检查过这发生在DftiComputeForward函数中。数据的长度在DftiCreateDescriptor中指定,在这种情况下确实为 N,所以我不确定为什么会收到此错误。

这里是我如何编译我的代码:

dpcpp test.cpp -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -ldl -lpthread -o test

如果有人可以提供帮助,那就太好了。谢谢!

4

1 回答 1

1

您可能正在耗尽堆栈内存空间。

请考虑改用向量。

于 2021-05-06T07:10:13.103 回答