犰狳矩阵库写道
犰狳采用延迟评估方法将多个操作合并为一个,并减少(或消除)对临时人员的需求。在适用的情况下,优化操作顺序。通过递归模板和模板元编程实现延迟评估和优化。
这意味着您可以编写如下操作
arma::mat A, B;
arma::vec c, d;
...
d=(A % B)*c;
并且没有创建临时变量。(注意 % 是犰狳中的元素乘积运算)
我希望能够以类似的风格为 OpenCL 应用程序编写代码。
我看过的库是 VexCL、ViennaCL、Boost.Compute 和 clBLAS。VexCL 和 Boost.Compute 甚至不提供基本的矩阵功能,例如乘法。clBLAS 不能用作模板库,因此您需要手动调用这些操作。ViennaCL 提供了我需要的所有操作,但它似乎无法将它们链接在一起。
例如
d= linalg::prod(linalg::element_prod(A,B), c);
无法编译。
我认为可能有可能使用 VexCL 根据 Armadillo 决定的操作自动生成内核,但我看不出有任何方法可以直接进行。
有什么建议么?