0

我正在使用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

4

1 回答 1

1

真正简短的答案是否定的。目前无法在运行时 API 中修改 cudaFree 的同步行为。

因此,如果您假设问题的原因是 malloc 的内部使用和 cuSolver 的免费使用,那么唯一要做的就是向 NVIDIA 报告您的用户案例,看看他们是否可以提出解决方法,或提供“专家”版本的例程,调用者显式管理暂存空间。

于 2017-01-20T07:37:17.560 回答