提问人:Hansov 提问时间:8/9/2023 最后编辑:Hansov 更新时间:8/10/2023 访问量:43
包含 FFTW3 的 DFT 函数的 .DLL 文件的多线程处理
Multithreading Of The .DLL File That Contains The DFT Function Of FFTW3
问:
我生成一个包含FFTW3库的傅里叶函数的.dll文件。由于 .dll 中的变量依赖性,我无法实现多线程。我正在使用傅里叶并获取变量,对它们做一些工作,然后再次计算傅里叶。在这里,我的FFT(用于DST计算)函数部分在.dll中。
void dst(fftwf_complex* x, size_t n)
{
fftwf_complex* y = fftwf_alloc_complex(size_t);
ffywf_plan plan =
fftwf_plan_dft_1d(size_t,y,y,FFTW_FORWARD,FFTW_ESTIMATE);
// write x to y
fftwf_execute(plan);
fftwf_destroy_plan(plan);
fftwf_cleanup();
// write y to x again
fftwf_free(y);
}
代码在它们之间经过一些处理后,多次转到上面的代码(也有一个 IDST 函数)。
因此,当我想在不同情况下将 .dll 与多线程一起使用时,FFTW3 库给了我一些错误。
double Class::Function1(Class& Inputs, int x, int y, int z)
{
dllFunction(Inputs.a, Inputs.b, Inputs.c, x, y, z);
return Inputs.z;
}
void Class::Function2(Class& Inputs)
{
#pragma omp parallel
{
#pragma omp for
for (int i=0;i<5;i++)
{
Inputs.z = Obj.Function1(Inputs,x,y,z);
}
}
}
当我尝试这样做时,它会在 dllFunction() .cpp文件 dst 函数中出现错误。错误是“访问冲突读取位置”。(// 将 x 写入 y 部分)(位于不同的目录,我不知道它如何找到.cpp文件)。
不久,我想将多线程与不在 .dll 中的 .dll 一起使用。FFTW3有什么问题?我不能使用线程运行 .dll 吗?我希望我能够解释。
注释 1:我使用 DFT 函数进行 DST 计算,所以我在 dst 函数中做了一些处理。另外,我知道 FFTW3 中有一个 dst 函数,但对于大型计算来说它非常慢。所以我改用 fft。
答: 暂无答案
评论
fftwf_complex* y = fftwf_alloc_complex(size_t);
...请显示真实代码而不是伪代码。