分布式下/上三角矩阵的上/下部分的原位恢复

时间:2022-02-03 13:04:41

I wonder if there exists any Scalapack routine that may convert a triangular matrix back to a general one, i.e. copies the lower/upper part to the upper/lower part - I couldn't find it yet. I know there exists an easy workaraound using p?geadd with manipulation of the diagonal, but that one consumes twice as much memory as theoretically needed and I can't afford that... So it seems strange to me, that Scalapack/PBLAS doesn't provide any routine solving this relative simple problem. If anybody knows more than I please let me know!

我想知道是否存在任何Scalapack例程可以将三角矩阵转换回一般矩阵,即将下/上部分复制到上/下部分 - 我还没有找到它。我知道有一个简单的工作方式使用p?geadd操纵对角线,但那个消耗的内存是理论上需要的两倍,而我负担不起...所以我觉得很奇怪,Scalapack / PBLAS没有不提供解决这个相对简单问题的常规方法。如果有人比我更了解,请告诉我!

-Thanks

1 个解决方案

#1


I have found a dangerous solution:

我发现了一个危险的解决方案:

  1. delete missing triangle of C
  2. 删除C的缺失三角形

  3. perform pdgeadd('T',C,C)
  4. divide all elements of given triangle of C by two
  5. 将给定三角形C的所有元素除以2

It works, but I don't know if there are any limitations, since it's theoretically forbidden calling pdgeadd with a A and C referring to the same memory...

它有效,但我不知道是否有任何限制,因为理论上禁止用A和C调用pdgeadd来指代相同的内存...

#1


I have found a dangerous solution:

我发现了一个危险的解决方案:

  1. delete missing triangle of C
  2. 删除C的缺失三角形

  3. perform pdgeadd('T',C,C)
  4. divide all elements of given triangle of C by two
  5. 将给定三角形C的所有元素除以2

It works, but I don't know if there are any limitations, since it's theoretically forbidden calling pdgeadd with a A and C referring to the same memory...

它有效,但我不知道是否有任何限制,因为理论上禁止用A和C调用pdgeadd来指代相同的内存...