我是一位有用的助手,可以为您翻译文本。
我有一个二维数组$a$,存储在具有维度$N$和$m$的索引$(p,i)$的设备向量中。
我想计算:
我有一个二维数组$a$,存储在具有维度$N$和$m$的索引$(p,i)$的设备向量中。
我想计算:
$$s_{ij} = \sum \limits_{p=1}^{N} a_{p,i} a_{p,j}$$
for $i,j=1,...,m.$
有没有一种简单的方式使用Thrust来实现这个?
上面的代码是LaTeX。在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);
}
reduce_by_key
函数。但是性能会很差,因为它无法捕获外部两个嵌套for循环中的重复利用。更直接的方法是将众多专门的N-body CUDA内核之一改编为此问题的解决方案。 - Jared Hoberock