大量使用来自 cuSparse 三对角求解器的 cudaFree

huge use of cudaFree from cuSparse tridiagonal solver

我正在使用 cusparseDgtsv_nopivot 函数求解三对角方程组。输出是正确的,但函数没有正确使用 cuda 多流。 nvvp 探查器显示,尽管对此求解器的每次调用都在不同的流中,但它们从不重叠。 我考虑了隐式同步并通过 nvvp 发现库函数在两者之间有很多对 cudaFree 的调用。 有没有办法避免这种隐式同步?

cusparse的使用伪代码:

create array of streams[];
create cusparse handle;
for (int i=0;i<Nsystem;i++){
 cusparseSetStream(handle,stream[i]);
 cusparseDgtsv_nopivot(handle, var for linear system i);
}
destroy cusaprse handle;

PS:提出并解决了处理矩阵的类似 cudafree 问题:here

真正简短的回答是否定的。目前无法在运行时 API.

内修改 cudaFree 的同步行为

因此,如果正如您假设的那样,问题的原因是内部使用 malloc 和 free with cuSolver,那么唯一要做的就是向 NVIDIA 报告您的用户案例,看看他们是否可以提出解决方法,或提供例程的 "expert" 版本,其中调用者显式管理 scratch space。