在 CUDA C 中实现 X^i * Y 的和(i=0 到 k)
我正在寻找技巧或研究论文来帮助我计算 X^i * Y 的总和(i=0 到 k),或更明确地说,Y + X^1 * Y +...+ X^k * CUDA C 中的 Y。其中 X 是 N×N 矩阵,Y 是 N×1 向量
I'm looking for tips or research papers that will help me perform the sum (i=0 to k) of X^i * Y, or more explicitly, Y + X^1 * Y +...+ X^k * Y in CUDA C. Where X is an N-by-N matrix, and Y is a N-by-1 vector
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您应该查看Thrust。
分解出 Y,然后进行扫描(使用乘法作为运算符),然后进行约简(使用加法作为运算符)。
You should check out Thrust.
Factor out the Y, then just do a scan (using multiplication as the operator) followed by a reduction (using addition as the operator).
我知道这不是您想要的,但是您不能将 Y 分解出来,然后将其与 X^i 的 sum(i=0 to k) 的结果相乘吗?
I know this isn't what you're looking for, but can't you factor the Y out and just right multiply it with the result of sum(i=0 to k) of X^i?
除了从总和中分解出
Y
之外,您还可以计算X
的特征空间,然后非常有效地计算每个X^i
(计算总和无疑会将X
提升到一系列幂,所以我会攻击它)。更具体地说,计算
X
的特征值并形成特征值的对角矩阵,称为Q
。使用特征值,我们可以对角化X
并创建一个新的矩阵D
,因为
D
是对角的,我们可以非常有效地将其计算为任意幂i
。应用(1)我们确定这一点,此外,我们可以证明(2)相当于
最后,我们可以通过重新排列我们的方程和计算来有效地找到任何任意
X^i
(我想验证我的内存在这里,所以我在维基百科上找到了参考)。
Besides factoring out
Y
from the summation, you could compute the eigenspace ofX
and subsequently very efficiently compute eachX^i
(the slowest part of computing your summation will undoubtedly be raisingX
to a range of powers, so I'll attack that).More specifically, compute the eigenvalues of
X
and form a diagonal matrix of the eigenvalues, call thisQ
. Using the eigenvalues, we can diagonalizeX
and create a new matrixD
such thatBecause
D
is diagonal, we can very efficiently compute it raised to any poweri
. Applying (1) we determine thatand furthermore, we can show that (2) is equivalent to
Finally, we can find any arbitrary
X^i
efficiently by rearranging our equation and computing(I wanted to verify my memory here, so I found a reference on Wikipedia).