【问题标题】:fast unitary matrix multiplication with block acceleration具有块加速的快速酉矩阵乘法
【发布时间】:2017-03-31 09:51:26
【问题描述】:

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

现在我想用一个大小为 256 的倍数的酉矩阵相乘,比如 1280x1280 酉矩阵。 什么是能够充分利用快速子程序的快速算法?

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

【问题讨论】:

  • 所以A 仍然是(m,256),而U 现在是(m1*256, m2*256)

标签: algorithm matlab numpy matrix matrix-multiplication


【解决方案1】:

看看并行矩阵乘法算法。您始终可以将矩阵划分为块,然后将其乘以块。您甚至可以减少所需的操作量。

例如阅读Wikipedia:

【讨论】:

  • 问题是,酉矩阵的子块可能不是酉矩阵。
  • @Kh40tiK 我假设您需要将quantum_unmm_256 修改为quantum_unmm_1280。如果你有一个,获得第二个将很容易。出于好奇,当你的意思是快时,它有多快?因为 MATLAB 的速度对我来说已经非常快了
  • 您可以假设快速功能几乎可以立即完成,但只有固定大小。在实践中,“固定大小”比 256 大得多,但仍然是固定的和有限的。
  • @Kh40tiK 酉矩阵的子块可能不是酉矩阵的事实使得利用该快速子例程变得非常困难,不是吗?
  • @Kh40tiK 出于好奇,到底要多久?因为 2 个随机的256^2 方阵在我的 PC 中需要 2 毫秒,这就是我所说的“瞬时”
【解决方案2】:

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

如果将(1280x1280) 重新整形为(4, 256, 4, 256),然后转换为(4,4,256,256),则使用它可能会更容易。但即使这样也可能需要copy() 来确保最里面的块(numpy 项)是连续的。

它甚至可以转换为 (4,4) 对象 dtype 数组,其中每个元素都是您的“快速”单一数组。

如果需要,我可以详细说明这些操作,但我怀疑你有足够的 numpy 技能来做到这一点。


这个问题有很多不清楚的地方。

  • 为什么同时使用 MATLAB 和 numpy 标签
  • 这个块加速是如何编码的 - 如果它很快,它必须是编译代码;如果是这样,建议的解释代码链接是什么
  • 数据结构有什么限制?我怀疑它一定是某种连续的数据块。这就是我建议重塑和转置的原因。

【讨论】:

  • 尚不清楚整形与块矩阵乘法有什么关系...
  • 乘法是否要求块是连续的?
  • 感谢您的努力。块加速可能涉及硬件加速,因此您可以假设它是一个 O(1) 算法,只是由于硬件限制而无法扩展。然而,酉矩阵的子块不是是酉的,所以需要一些非常花哨的数学技巧。
  • 也许您应该详细说明unitary 的含义。这不是numpyMATLAB 编码员的常规概念。
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 1970-01-01
  • 2015-04-07
  • 2016-06-25
  • 1970-01-01
相关资源
最近更新 更多