我在从主机数据初始化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数组?
谢谢你的帮助
发布于 2019-12-21 21:04:09
这有点类似于问题af::array::device doesn't work with complex arrays请看一下-唯一的区别是复杂数据传递的方向。
下面的代码应该可以很好地工作,因为std::complex应该与af::cfloat兼容。
af::array mEigenVectorsArray =
af::array((dim_t)6, (dim_t)(mNumEigenInfos),
reinterpret_cast<af::cfloat>(mEigenVectors));对于float2类型的函数,ArrayFire API不会有符号,但是对于类型为af::cfloat的函数,它会有符号。我认为,即使是cuFloatComplext或float2也应该与af::cfloat兼容。因此,重新解释转换为af::cfloat是应该做的。
https://stackoverflow.com/questions/59424886
复制相似问题