在cuda c中乘以两个矩阵

时间:2015-08-06 10:07:46

标签: cuda

我必须使用矩阵A(32 * 32)和B(32 * n),其中' n'是来自投入,并在2000至2000000之间。

我有两种输入,一种是0到255之间的整数,另一种是0,1。这个乘法是一个迭代3000次的循环。 B(32 * n)来自形式输入,并且在所有迭代中都是常量,但A(32 * 32)可以在每次迭代中改变。

//read B from file
//read A from file
double D[3000];
for(int i = 0; i < 3000; i++)
{
    C = multiply(A, B);
    // D[i] = mean of all elements in C
    // build A from B using D[i] (this part is really complicated sequential process that contains lots of if and switches)
}

最快的方法是什么? 谢谢。

1 个答案:

答案 0 :(得分:2)

这里没有人会为你编写代码,这不是Stack Overflow的目的。但是,似乎您应该利用这些问题的一些特性来提高代码的性能:

  1. 认识到因为其中一个矩阵只包含0或1并且你在整数中执行此操作,所以你所描述的矩阵乘法实际上是大量的独立稀疏和
  2. 认识到因为下一个操作是计算平均值,所以实际上你不必存储中间点积并且可以直接对矩阵行求和的部分结果进行减少
  3. 推力库中可能存在可用于原型设计的并行原语,并且最佳手写内核将旨在将操作的第一部分和大部分部分融合到单个内核中。