Огромное использование cudaFree из решателя трехдиагональной cuSparse

Я использую cusparseDgtsv_nopivot функция для решения трехдиагональной системы уравнений. вывод правильный, но функция не использует cuda multi-streaming. Профилировщик 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 была поднята и решена с матрицей: здесь.

1 ответ

Решение

Действительно короткий ответ - нет. В настоящее время нет способа изменить поведение синхронизации cudaFree в API времени выполнения.

Так что, если, как вы предполагаете, причиной проблемы является внутреннее использование malloc и бесплатное использование cuSolver, то единственное, что нужно сделать, это сообщить о вашем случае в NVIDIA и посмотреть, могут ли они предложить обходной путь или предоставить " экспертная версия подпрограммы, в которой вызывающая сторона явно управляет пустым пространством.

Другие вопросы по тегам