【问题标题】:Arrayfire array from complex host data来自复杂主机数据的 Arrayfire 数组
【发布时间】:2019-12-20 11:55:25
【问题描述】:

我在从主机数据初始化 arrayfire 数组时遇到问题。

以下代码不会链接到我:

constexp int mNumEigenInfos = 100;
std::complex<float> mEigenVectors[mNumEigenInfos][6];
af::array mEigenVectorsArray = af::array((dim_t)6,(dim_t)(mNumEigenInfos),reinterpret_cast<float2*>(mEigenVectors));

给我一​​个错误:

undefined reference to `af::array::array<float2>(long long, long long, float2 const*, af_source)'

现在,如果我将 reinterpret_cast 从 float2* 更改为 float*:

constexp int mNumEigenInfos = 100;
std::complex<float> mEigenVectors[mNumEigenInfos][6];
af::array mEigenVectorsArray = af::array((dim_t)6,(dim_t)(mNumEigenInfos),reinterpret_cast<float*>(mEigenVectors));

链接很好。通过在线阅读,我认为我应该将复杂数据视为 cuComplex(转换为 float2 或 cuComplex 会产生完全相同的错误,因为它们是相同的)。

我觉得我在这里犯了一个愚蠢的错误,但似乎无法弄清楚。

我应该如何从 std::complex 主机数据初始化一个 arrayfire 数组?

感谢您的帮助

【问题讨论】:

    标签: c++ complex-numbers arrayfire


    【解决方案1】:

    这有点类似于问题af::array::device doesn't work with complex arrays 请看一下 - 唯一的区别是复杂数据的传递方向。

    以下应该可以正常工作,因为 std::complex 应该与 af::cfloat 的 ABI 兼容。

    af::array mEigenVectorsArray =
        af::array((dim_t)6, (dim_t)(mNumEigenInfos),
                  reinterpret_cast<af::cfloat>(mEigenVectors));
    

    ArrayFire API 没有float2 类型的函数符号,但是它有af::cfloat 类型的函数符号。我认为即使cuFloatComplextfloat2 也应该与af::cfloat 兼容。因此,应该重新解释转换为af::cfloat

    【讨论】:

      猜你喜欢
      • 2017-03-31
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 2012-09-10
      • 1970-01-01
      • 2022-11-11
      相关资源
      最近更新 更多