Cuda csrmv/csrmm中的CUSPARSE内部格式转换

Cuda csrmv/csrmm中的CUSPARSE内部格式转换,cuda,Cuda,我使用CUSPARSE函数执行稀疏矩阵向量/矩阵乘法 稀疏矩阵以CSR格式存储。在VisualProfiler下评测应用程序时,我注意到每次调用cusparse(S/D)csrmv或cusparse(S/D)csrmm都有一个内存分配/memset/copy 通过查看分析器中的内核名称,CUSPARSE似乎可以在每次调用时将矩阵从CSR格式转换为HYB格式,这在我的情况下是浪费时间的,因为我可以在启动计算之前以正确的格式创建矩阵 虽然CUSPARSE有矩阵向量乘法(hybmv)的HYB版本,但它

我使用CUSPARSE函数执行稀疏矩阵向量/矩阵乘法

稀疏矩阵以CSR格式存储。在VisualProfiler下评测应用程序时,我注意到每次调用cusparse(S/D)csrmv或cusparse(S/D)csrmm都有一个内存分配/memset/copy

通过查看分析器中的内核名称,CUSPARSE似乎可以在每次调用时将矩阵从CSR格式转换为HYB格式,这在我的情况下是浪费时间的,因为我可以在启动计算之前以正确的格式创建矩阵

虽然CUSPARSE有矩阵向量乘法(hybmv)的HYB版本,但它没有相应的矩阵乘法版本,看起来只支持CSR格式


在CUSPARSE中执行矩阵MUL时,是否可以避免矩阵转换?

我问过这方面的问题。我得到的答案是,在执行
csrmv
操作时,cusparse不会从CSR转换为HYB格式。您看到的hyb可能是内部内核名称的一种损坏形式,如下所示:

_Z14csrMm_hyb_coreIdLi7ELi6ELi2ELi1ELb0EEv19cusparseCsrMmParamsIT_Ei

这是一个名为hyb的cusparse内部内核,但它没有连接到hyb格式。

谢谢。有没有办法避免这些分配/拷贝?我无法提供更多信息。我认为您应该假设这些库是由GPU编码专家编写的,他们不会做明显浪费或低效的事情。您看到的分配很可能是函数处理所需的临时分配。有一个永久分配的暂存空间用于重复调用可能很好,但不幸的是,该库没有提供这种抽象级别,并且不确定其好处是什么。简言之,没有办法影响这种低级行为。