gpt4 book ai didi

memory - cuSPARSE 和 cuBLAS 库如何处理使用 cudaMallocPitch 分配的内存?

转载 作者:行者123 更新时间:2023-12-04 00:21:22 24 4
gpt4 key购买 nike

我正在实现一个简单的例程,该例程使用来自 cuSPARSE 的 cusparseScsrmm 执行稀疏矩阵 - 密集矩阵乘法。这是一个更大的应用程序的一部分,可以使用 cudaMalloc(超过 99% 的时间)或 cudaMallocPitch(很少使用)在 GPU 上分配内存。我有几个关于 cuSPARSE 如何处理倾斜内存的问题:

1)我将音调内存传递到 cuSPARSE 例程中,但结果不正确(正如预期的那样,因为无法将音调作为参数传递)。有没有办法让这些库与使用 cudaMallocPitch 分配的内存一起工作?

2)处理这个问题的最佳方法是什么?我应该在调用函数中添加一个检查,以强制执行内存 不是 使用倾斜模式分配?

最佳答案

对于稀疏矩阵运算,倾斜数据的概念无论如何都没有相关性。

对于密集矩阵操作,大多数操作本身并不直接支持数据的“间距”,但是各种操作可以对子矩阵进行操作。有一个特别的警告,这样的操作应该可以处理倾斜或非倾斜的数据。每当您看到接受“前导维度”参数的 CUBLAS(或 CUSPARSE)操作时,这些参数可用于包含数据中的音高。

由于“前导维度”参数是在矩阵元素中指定的,而间距(通常)以字节为单位指定,这里的警告是间距可以被相关矩阵元素的大小整除,因此间距(在字节)可以转换为矩阵元素中指定的“前导维度”参数。我希望这对于 char 通常是可能的。 , int , float , double和类似的类型,因为我相信 cudaMallocPitch 返回的音调数量通常可以被 16 整除。但是没有明确的保证,因此如果您打算使用这种方法,建议进行适当的运行时检查。

例如,应该可以对倾斜数据执行 CUBLAS 矩阵-矩阵乘法 ( gemm ),并适当指定 lda , ldbldc参数。

operation you indicate确实为所涉及的密集矩阵提供了这样的前导维度参数。

如果 99% 的用例不使用倾斜数据,我要么根本不支持倾斜数据,要么对于没有可用前导维度参数的操作,将倾斜数据复制到无倾斜缓冲区以用于所需的操作。一个设备到设备倾斜到无倾斜复制可以以大约内存带宽的速率运行,因此它可能足够快,对于 1% 的用例来说不是一个严重的问题。

关于memory - cuSPARSE 和 cuBLAS 库如何处理使用 cudaMallocPitch 分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com