Я использую функцию cusparseDgtsv_nopivot
для решения трехдиагональной системы уравнений. выход корректен, но функция не позволяет использовать многопоточность cuda. Профилировщик nvvp показывает, что хотя каждый вызов этого решателя находится в другом потоке, он никогда не перекрывается. Я думал о неявной синхронизации и обнаружил через nvvp, что функция библиотеки имеет много вызовов cudaFree между ними. Есть ли способ избежать этой неявной синхронизации?Огромное использование cudaFree от tridiagonal solver cuSparse
Псевдокод использования 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.
спасибо. вы говорите «как вы выдвигаете гипотезу». Является ли синхронная функция, такая как cudaFree, недостаточной для прерывания параллельного параллелизма? –