微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cuBLAS 在批处理复杂线性系统求解器上的性能问题

如何解决cuBLAS 在批处理复杂线性系统求解器上的性能问题

我是 cuda 和 cuBlas 的新手,最近我尝试使用批处理 cuBlas API 来求解多个线性方程组。这是我的代码

矩阵大小为N,矩阵个数(batch size)为numOfMat。

{
  a: 'aa',b: 'bb'
},{
  a: 'aa',b: null (or '')
}

代码工作正常,但是当我绘制计算时间与矩阵数量的关系时,曲线如下所示:

image

我的问题是:为什么计算时间与矩阵数量呈线性关系?直观上,当批量大小在某种程度上很大时,曲线应该看起来是平坦的。但是,当批量大小达到 500,000 时,时间似乎仍与批量大小呈线性关系。

怎么可能?这种情况背后有什么解释吗?

解决方法

我认为您需要更仔细地查看您的数据。如果我在 Google Colab (Tesla T4) 上修改您的代码,我会得到:

enter image description here

这看起来很像你的身材。但更仔细地看(对数刻度有帮助):

enter image description here

您可以清楚地看到,在某一点上,运行时间在很大程度上与矩阵的数量无关(大约 2^8 = 64),但是随着尺寸的增加,缩放是线性的。这是从能够并行化工作负载到达到并行容量并且必须调度许多并行操作组来执行工作负载的转变。您可能会推断,对于这个特定的 GPU,GPU 在 64 到 128 个并发操作时会耗尽并行容量(T4 有 40 个 SM,所以如果一个 SM 可以同时容纳每个 SM 2 个操作,它很可能是 80 个),之后运行时以该限制大小的倍数进行扩展。

对于我熟悉的任何并行计算架构来说,这都是完全正常的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。