【发布时间】:2015-12-10 17:55:12
【问题描述】:
我想知道在多个(假设为 n 个)GPU 上的 CUDA 中计算稀疏矩阵向量乘积 y = Ax 的最快方法是什么。
我的幼稚方法是将向量 x 和 y 分成 n 个块,每个 GPU 上 1 个块。然后还将矩阵 A 拆分为更小的 n^2 块 A_ij 并计算
y_i = \sum_j A_{i,j} x_j, // GPU j stores A_{i,j} and x_j, result is copied
// to and summed up on GPU i
在不同的 GPU 上 j=1..n,比如说 cuSPARSE。这行得通吗?采用统一内存架构,原则上所有 GPU 都应该能够访问全局内存。
GPU 之间的内存传输会非常慢吗?我不希望有很大的提速,但我想知道它是否会比在 1 个单 GPU 上执行矩阵向量乘法要慢。
【问题讨论】:
-
我认为这个问题没有一个普遍的答案,它的范围很广。对于分布式内存系统(包括 GPU)的稀疏矩阵向量积,已经进行了很多的研究。您最好阅读其中的一些内容,而不是在Stack Overflow 上提出这样的问题
-
你是对的。我想我正在寻找的是一种廉价/简单的实现(重用对 cuSPARSE 的调用),它在多个 GPU 上执行良好。
标签: cuda gpu gpgpu sparse-matrix multi-gpu