1

我想使用 Thrust 来评估由元素矩阵运算组成的表达式。为了清楚起见,让我们考虑如下表达式:

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

其中AB和是矩阵CD当然大小相同。

Thrust 快速入门指南提供了用作输入和输出的saxpy示例y,而在我的情况下,输出参数与输入参数不同,顺便说一下,输入参数不止两个。在与 CUDA 的逐元素向量乘法中,考虑了输出与输入不同但只有两个输入的情况。

任何人都可以就如何使用 Thrust 来实现上述表达式(输出矩阵不同于输入和两个以上的输入)提供一些建议(可能还有背后的理由)?谢谢。

4

1 回答 1

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实现具有任意数量输入的表达式构建的。您可以参考实现的详细信息。

于 2013-07-08T18:19:48.953 回答