我想使用OpenCL将物理模拟算法移植到GPU以提高性能;我没有使用OpenCL的经验,我正在四处寻找。计算主要是小密矩阵(3x3)和向量积、叉积等。
-
对于这些基本操作是否有一些"标准"/推荐的库?我当然不想自己编码矩阵乘法和反转(不是时间,这将是低效的)
-
作为OpenCL没有类,操作符重载等,我是否必须写
mmul(a,mtrans(b))
而不是a*b.transpose()
为例? -
是否有一些(计划的)OpenCL(或预处理器,就此而言)的扩展/进化使符号更像数学?我有一种回到十多年前的感觉。(我知道有CUDA,但它是供应商绑定)
回答您的问题:
- 是的,OpenCL严格限于C99语法,因此没有类,没有操作符重载,并且对您所想到的各种操作进行严格的过程性调用。OpenCL支持对其原生向量类型进行元素智能操作,但没有比这更复杂的了。矩阵乘法,行列式,转置等都必须自己实现。 又一次,据我所知没有。[顺便说一句,我不会在这种情况下嘲笑Fortran, F90和以后的版本有内在的矩阵和向量操作,这使得你所问的各种操作比C99或c++更容易编写]。
如果你知道一个事实,你仅限于三维对象,那么你可能会考虑使用double3类型(或float3,如果你的gpu不支持双精度)。
到目前为止,只支持向量,所以你必须自己编写一些关于矩阵乘法或反转的代码。但是,您可能对以下内置几何函数感兴趣。特别地,点积和叉积是有定义的。
您可能也有兴趣知道为矩阵的未来实现保留的数据类型:例如,请参阅double n x m。在您的情况下,如果将来有可能,您将能够为您的矩阵使用double3x3类型。