微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Intel OneAPI FFT 分段错误和总线错误

如何解决Intel OneAPI FFT 分段错误和总线错误

我有一些大小为 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

如果有人能帮忙就好了。谢谢!

解决方法

正如评论中正确提到的,您可能正在耗尽堆栈内存空间。请考虑改用向量,让我知道它是否适用于更大的测试用例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。