为啥 OpenCL 没有矩阵数据类型?
Posted
技术标签:
【中文标题】为啥 OpenCL 没有矩阵数据类型?【英文标题】:Why OpenCL doesn't have matrix data type?为什么 OpenCL 没有矩阵数据类型? 【发布时间】:2014-09-21 15:06:54 【问题描述】:考虑到 OpenCL 内核在与着色器相同的单元上执行,我认为 OpenCL 具有与 GLSL 相同的数据类型似乎是合乎逻辑的,但请看这里:http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/dataTypes.html 我没有看到矩阵类型。
这是为什么呢?
另外,这是否意味着如果我想乘以 4x4 矩阵,使用 OpenCL 时会比使用 GLSL 慢?
【问题讨论】:
它具有点积功能,所以应该不会慢。 虽然我不知道确切的答案,但 IMO 密集矩阵可以很容易地用一维数组表示,而稀疏矩阵在各种兼容设备上并不容易有效表示。这就是为什么没有实现特殊结构的原因。 【参考方案1】:实际上,如果您更仔细地查看您的link,则保留数据类型类别中有矩阵数据类型:floatnxm、doublenxm。因此,在标准的未来版本中很可能会实现这些类型。我不知道他们为什么还没有这样做。
此时您可以使用数组或 image2d_t 来表示矩阵。你可能想看看这个article
什么是速度。这并不一定意味着 OpenCL 更慢,但很有可能。即使您设法使用 OpenCL 为一个平台编写了完美的矩阵乘法代码,在其他一些平台上的性能也可能很差。在 OpenGL 中,制造商正在编写自己的矩阵乘法代码,这对于每个平台都应该是最佳的。
【讨论】:
以上是关于为啥 OpenCL 没有矩阵数据类型?的主要内容,如果未能解决你的问题,请参考以下文章