为啥 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 没有矩阵数据类型?的主要内容,如果未能解决你的问题,请参考以下文章

matlab 为啥要进行数据类型转换?

何时使用 OpenCL API 标量数据类型?

为啥我的 OpenCL 内核在 nVidia 驱动程序上失败,而不是 Intel(可能的驱动程序错误)?

OpenCL 内联函数可以返回 OpenCL 类型吗?

opencl----标量向量类型的相关运算

OpenCL 内核不向主机程序返回字符数据