我想使用Thrust来计算由元素矩阵运算组成的表达式。为了说清楚,让我们考虑一个表达式:
D=A*B+3*sin(C)
其中A
,B
,C
和D
是矩阵,当然大小相同。
Thrust Quick Start Guide提供saxpy
示例,其中y
既用作输入又用作输出,而在我的情况下,输出参数与输入参数不同,方式,超过两个。在Element-by-element vector multiplication with CUDA,考虑输出不同于输入但仅有两个输入的情况。
有没有人可以提供一些关于如何使用Thrust来实现上述表达式的建议(以及可能的原理)(输出矩阵与输入和两个以上的输入不同)?感谢。
答案 0 :(得分:2)
以下是如何使用Newton实现该计算,这是talonmies评论中提到的库:
#include <newton/newton.hpp>
int main()
{
float a[4] = {1.0, 1.0, 1.0, 1.0};
float b[4] = {2.0, 2.0, 2.0, 2.0};
float c[4] = {3.0, 3.0, 3.0, 3.0};
float d[4] = {4.0, 4.0, 4.0, 4.0};
newton::numeric_vector<float> A = a;
newton::numeric_vector<float> B = b;
newton::numeric_vector<float> C = c;
newton::numeric_vector<float> D = d;
D = A * B + 3.f * sin(C);
return 0;
}
使用thrust::zip_iterator
和thrust::transform_iterator
构建库,以实现具有任意数量输入的表达式。您可以参考实现了解详细信息。