我用cusparseDgtsv_nopivot函数来求解一个三对角方程组。输出是正确的,但功能没有适当地利用库达多流.nvvp分析器显示,虽然对该解决程序的每次调用都处于不同的流中,但它们从不重叠。我考虑了隐式同步,通过nvvp发现库函数之间有很多对cudaFree的调用。有办法避免这种隐式同步吗?
使用衬垫的伪码:
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问题被提出并解决了处理矩阵:这里。
发布于 2017-01-20 07:37:17
最简单的答案是否定。目前无法在运行时API中修改cudaFree的同步行为。
因此,如果正如您假设的那样,问题的原因是在内部使用malloc和cuSolver,那么唯一要做的事情就是向NVIDIA报告您的用户案例,看看他们是否可以提出解决方案,或者提供调用者显式管理划痕空间的例程的“专家”版本。
https://stackoverflow.com/questions/41746817
复制相似问题