gpt4 book ai didi

intel - 将 Intel MKL double 组与 MKL_Complex16 数组(和 exp)相乘?

转载 作者:行者123 更新时间:2023-12-05 06:33:50 26 4
gpt4 key购买 nike

我一直在学习使用英特尔数学核心函数库。直到现在我需要高效时一切都很好:

  1. 将一个 double 组乘以一个 MKL_Complex16 数组。
  2. 计算 iy 的指数,其中 y 是 double 组。

具体来说,我需要执行 a = x * exp(iy),其中 x 和 y 是相同大小的 double 组,a 应该是 MKL_Complex16 数组。

因为 MKL_Complex16 = struct { double real, imag } 我可以手动创建 MKL_Complex16 的新数组并将真实值写入真实成员,但这似乎效率极低。这种计算需要执行数千次。我也可以手动将指数计算为正弦和余弦,然后再次使用循环,但这也不好。也许有一个例程只能复制到“真实”成员中,但由于可能存在结构填充,我认为这行不通。

x 和 y 数组的计算效率都很高,但我怎样才能有效地计算“a”呢? (这是对使用 MKL 的反向 FFT 的部分输入)。

谢谢!

最佳答案

我发现我可以使用 cblas_dcopy 将我的 double 实数数组直接写入 MKL_Complex16 数组的实部和虚部。

double *real = (double*) mkl_malloc(N*sizeof(double), 64);
double *imag = (double*) mkl_malloc(N*sizeof(double), 64);
MKL_Complex16* z = (MKL_Complex16*) mkl_malloc(N*sizeof(MKL_Complex16), 64);

// Fill real and imag arrays with your data, then write them to the complex array

cblas_dcopy(N, real, 1, &(z[0].real), 2);
cblas_dcopy(N, imag, 1, &(z[0].imag), 2);

这适用于 Intel Xeon Phi。如果使用该技术,则可以组合双数组和 MKL_Complex16 数组以与 MKL 一起使用。它使我能够按照自己的意愿计算公式 a = x * exp(iy)。我希望这对将来的其他人有所帮助。

关于intel - 将 Intel MKL double 组与 MKL_Complex16 数组(和 exp)相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50522394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com