3

我有一个二维数组 $a,$ 存储在 device_vector 中,其索引 (p,i) 为 N 和 m

我要计算

$$s_{ij} = \sum \limits_{p=1}^{N} a_{p,i} a_{p,j}$$

for $i,j=1,...,m.$ 

有没有一种简单的方法可以使用推力来做到这一点?

上面的代码是乳胶的。在 C++ 中,它类似于

Matrix A(N,m); // filled with data

Matrix S(m,m);

for (int i=0; i <m;++i)
  for (int j=0; j <m;++j) 
   { 
     S(i,j)=0;
     for (int p=0; p < N; ++p)
        S(i,j) += A(p,i)*A(p,j);

   }
4

1 回答 1

2

如果我没有错过什么,似乎

$$s_{ij} = \sum_{p=1}^{N} a_{p,i} a_{p,j} = \sum_{p=1}^{N} a^T_{i,p} a_{p,j}$$

因此

$$S = A^T A$$

通常的矩阵产品。我也不认为你可以用推力做到这一点。但是您可以使用 CUBLAS 或 Arrayfire 轻松进行矩阵乘法(实际上我认为 arrayfire 在内部使用 cublas)。但请记住,这些库以列优先顺序存储矩阵(如在 fortran 中)

于 2012-11-30T21:22:58.817 回答