2011-09-05 90 views
6

我想将一个物理模拟算法移植到使用OpenCL进行性能的GPU上;我没有使用OpenCL的经验,我正在环顾四周。计算大多是小型密集矩阵(3x3)和矢量产品,交叉产品等。opencl矩阵库

  1. 是否有这样的基本操作的“标准”/推荐库?我当然不想码矩阵乘法和反演自己(而不是时间,这将是inefficent)

  2. 随着OpenCL的没有类,操作符重载等,我必须写mmul(a,mtrans(b))而不是a*b.transpose()例如?

  3. 是否有OpenCL(或预处理器)的某些(计划的)扩展/演变,以使符号更像数学?我有回到长年的印象。 (我知道有CUDA,但它是供应商绑定)

回答

4

如果您知道您仅限于三维对象,那么您可以考虑使用double3类型(如果您的gpu不支持双精度,则使用float3)。

到目前为止,只有向量被支持,所以你必须自己做一些关于矩阵乘法或者反转的编码。但是,您可能对以下内置geometric functions感兴趣。特别定义了dot产品和cross产品。

您可能也有兴趣知道,有reserved data types为矩阵期货implentations:见例如双ň X。在你的情况下,如果将来可用,你将能够为你的矩阵使用double3x3类型。

5

回答您的问题:

  1. 这并不是说我知道
  2. 是,OpenCL是严格限制在C99语法,所以没有类,没有操作符重载,并且严格地程序化调用你想要进行的各种操作。 OpenCL支持对其原生矢量类型进行元素明智的操作,但没有比这更复杂的操作。矩阵乘法,行列式,转置等等都必须自己实现。
  3. 不是我所知道的。 [顺便说一下,在这种情况下,我不会嘲笑Fortran,F90和更高版本具有内在的矩阵和向量操作,这些操作使得您所要求的操作比C99或C++更容易编写]。
+0

对不起,我在思考lin-pack的前几天(当时并不是我正在编程),也就是在有人做了一个很好的实现之前,而不是每个人都为自己编写它。通过类比,我认为Python是一种流行语言的原因之一:“包含电池”。 – eudoxos