【发布时间】:2013-04-30 16:45:32
【问题描述】:
我想计算 m x n 矩阵 A 的行和,或等效地其转置 A' 的列和(我在内存中都有,所以 A'我在计算上没有花费任何额外的费用)。我计划启动m 线程,每个线程都可以遍历A 的n 列,或A' 的n 行。如果我们假设矩阵以列主要格式(即与 CUBLAS 一样)存储,哪种方法会更快?
我目前的想法(关于合并内存访问):
如果我行求和,那么同一块中的线程将在每次迭代时从相邻的内存位置读取。然而同样,如果我改为列求和,那么 每个线程 将遍历一个连续的内存块。因此,如果我有线程 1、2 和 3 的同一块,它们的内存访问将如下所示(假设 column-major storage):
1 2 3 ... 1 2 3 ... 1 2 3 ... for row-sums
1 1 1 ... 2 2 2 ... 3 3 3 ... for column-sums
- 但这并不能告诉我哪个会更快。
- 它也没有考虑到块级的行为(即,如果第一个块启动对行求和
1-32,是否保证启动的第二个块对行求和33-64?)
【问题讨论】:
标签: performance matrix cuda sum gpgpu