直到今天,OpenCL标准还不能包含复杂的数字。然而,一些FFT实现似乎绕过了这一点。有没有(密集的)线性代数(特征值求解器,线性系统求解器)库(最好是C ++)可以处理复杂的代数,无论如何?
答案 0 :(得分: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支持复杂的数字。但我也明白,它主要是一个便利库,而不是以任何方式涉及硬件的核心功能。