`cusparse<t>csrsv2_analysis()` 有什么作用?

计算科学 稀疏矩阵 库达
2021-12-01 02:24:41

cuSPARSE中,您可以通过调用cusparse<t>csrsv2_solve(). 但是,您需要先调用cusparse<t>csrsv2_bufferSize()cusparse<t>csrsv2_analysis()

从我在文档中读到的内容看来:

  • csrsv2可能需要额外的内存,并csrsv2_bufferSize()告诉您应该是多少。
  • csrsv2_analysis()分析系数矩阵的稀疏模式。它可能会或可能不会提高csrsv2_solve().

文档

  • csrsv2_analysis()报告结构零并计算级别信息
  • 级别信息可能不会提高性能例如,三对角矩阵没有并行性
  • csrsv2_solve()报告第一个数字零,包括结构零

所以这是我不明白的:

  • 那些东西是什么:结构零、数字零、级别信息?
  • 为什么三对角矩阵没有并行性?并行性在这里意味着什么?

我猜结构零和数值零与矩阵的奇异性有关,但我需要对此进行澄清。

1个回答

结构零和数字零描述了矩阵中零值的存储方式。结构零是隐含为零的零,因为它们不存在于数据结构中。数字零是显式存储的零。例如,矩阵

[0100]
可以以坐标格式存储为

i  j  value
1  2  1
2  2  0

然后, (2, 2) 处的值将是数字零,因为它在数字上存储为零,而 (1, 1) 和 (2, 1) 处的值是结构零,因为它们没有显式存储。

GPU 的性能来自于拥有大量的算术单元。但是,要使用它的全部功能,需要有许多可以同时(并行)完成的算术运算,以便使用所有这些算术单元。但是,三角求解具有使这一点复杂化的各种依赖关系。我的印象是级别信息用于在求解中找到可用的并行性,但我还没有找到任何细节。

对于三对角矩阵,三角求解仅使用对角线和非对角线之一每个对角线依赖于前一个非对角线,每个非对角线依赖于前一个对角线。因此,算术发生有一个严格的顺序。