0

直到今天,OpenCL 标准才令人费解地不包括复数。然而,一些 FFT 实现似乎规避了这一点。无论如何,是否有任何(密集的)线性代数(特征值求解器,线性系统求解器)库(最好是 C++)可以处理复杂的代数?

4

1 回答 1

2

之所以不急于在 OpenCL 标准中实现复数(甚至 2.0 都没有),是因为它很容易由您自己完成,并且与硬件制造商无关。

这是一个关于如何开始使用复数的简单示例:

#define complex_t float2

// real part of complex product (a,b)
#define MULT_RE(a,b) (a.x * b.x - a.y*b.y)
// imaginary part of complex product (a,b)
#define MULT_IM(a,b) (a.x * b.y + a.y*b.x)

// complex product
inline complex_t mul_1(complex_t a,complex_t b)
{
  return (complex_t) (MULT_RE(a,b), MULT_IM(a,b));
}

如您所见,复数很自然地映射到 2 个分量向量。因此,每当算法碰巧需要复数时,通常都会这样做。

就我个人而言,我希望看到 OpenCL 支持复数。但我也明白,它主要是一个便利库,而不是以任何方式与硬件相关的核心功能。

于 2013-11-13T13:43:00.353 回答