快速酉矩阵乘法与块加速

时间:2017-03-31 09:51:26

标签: algorithm matlab numpy matrix matrix-multiplication

假设我有一个非常快的子程序用于固定大小的酉矩阵乘法。 (子程序可能涉及硬件加速)比如,一个名为quantum_unmm_256(A, U, m)的函数右移m乘以256矩阵A和256乘256单位矩阵U.

现在我想用一个单位矩阵乘以大小为256的倍数,例如1280x1280的酉矩阵。 哪种快速算法可以充分利用快速子程序?

假设所有矩阵都是密集的,具有64或128位浮点复数类型。

2 个答案:

答案 0 :(得分:0)

看看并行矩阵乘法算法。您总是可以将矩阵分成块,然后将其相乘。您甚至可以减少所需的操作量。

例如,阅读Wikipedia

enter image description here

答案 1 :(得分:-1)

这不是一个完整的答案,但评论时间太长了:

如果将(1280x1280)重新转换为(4, 256, 4, 256),然后转置为(4,4,256,256),则可能更容易使用copy()。但即使这样也需要var addZeroes = function(num) { var numberAsString = num.toString(); if(numberAsString.indexOf('.') === -1) { num = num.toFixed(2); numberAsString = num.toString(); } else if (numberAsString.split(".")[1].length < 3) { num = num.toFixed(2); numberAsString = num.toString(); } return numberAsString }; 来确保最内部的块(numpy term)是连续的。

它甚至可以被转换为(4,4)对象dtype数组,其中每个元素都是你的快速&#39;单一阵列。

如果需要,我可以详细说明这些行动,但我怀疑你有足够的numpy技能去做。

有很多事情都不清楚这个问题。

  • 为什么MATLAB和numpy标签
  • 如何对块加速进行编码 - 如果速度快,则必须编译代码;如果是的话,建议的解释代码链接
  • 对数据结构有哪些限制?我怀疑它必须是某种连续的数据块。这就是我建议重塑和转置的原因。