在Thrust中评估由元素矩阵运算组成的表达式

时间:2013-07-05 11:00:28

标签: cuda thrust

我想使用Thrust来计算由元素矩阵运算组成的表达式。为了说清楚,让我们考虑一个表达式:

D=A*B+3*sin(C)

其中ABCD是矩阵,当然大小相同。

Thrust Quick Start Guide提供saxpy示例,其中y既用作输入又用作输出,而在我的情况下,输出参数与输入参数不同,方式,超过两个。在Element-by-element vector multiplication with CUDA,考虑输出不同于输入但仅有两个输入的情况。

有没有人可以提供一些关于如何使用Thrust来实现上述表达式的建议(以及可能的原理)(输出矩阵与输入和两个以上的输入不同)?感谢。

1 个答案:

答案 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_iteratorthrust::transform_iterator构建库,以实现具有任意数量输入的表达式。您可以参考实现了解详细信息。