Не удалось выделить образец состояния cuSolverRf

Запуск образца CuSolverRf с образцом .mtx файлы lap2D_5pt_n100.mtx а также lap3D_7pt_n20.mtx позволяет программе работать без сбоев. Тем не менее, когда я вставляю в свой .mtx файл, я получаю ошибку после шага 8:

"Ошибка CUDA в cuSolverRF.ccp:649 code=2..."

Я сузил проблему до здесь:

checkCudaErrors(cusolverRfSetupHost(
    rowsA, nnzA, 
    h_csrRowPtrA, h_csrColIndA, h_csrValA,
    nnzL, 
    h_csrRowPtrL, h_csrColIndL, h_csrValL, 
    nnzU, 
    h_csrRowPtrU, h_csrColIndU, h_csrValU, 
    h_P, 
    h_Q, 
    cusolverRfH));

Который прыгнул бы к

    void check(T result, char const *const func, const char *const file, int const line)
{
    if (result)
    {
        fprintf(stderr, "CUDA error at %s:%d code=%d(%s) \"%s\" \n",
                file, line, static_cast<unsigned int>(result), _cudaGetErrorEnum(result), func);
        DEVICE_RESET
        // Make sure we call CUDA Device Reset before exiting
        exit(EXIT_FAILURE);
    }
}

Мой вопрос: как получается "результат"? и что я могу сделать, чтобы преодолеть проблему или что я делаю не так?

Дополнительная информация: моя матрица 196530 к 196530 с 2530798 ннз.

1 ответ

Решение

Код ошибки 2 соответствует CUSOLVER_STATUS_ALLOC_FAILED:

цитирование документации cuSOLVER:

Не удалось выделить ресурс внутри библиотеки cuSolver. Обычно это вызвано ошибкой cudaMalloc(). Чтобы исправить: перед вызовом функции освободите как можно больше ранее выделенной памяти.

Это означает, что память для вашей матрицы не может быть выделена, возможно, из-за превышения памяти вашего GPU. Попробуйте освободить память (как указано в документации), используйте меньшую матрицу ввода или используйте графический процессор с большим объемом памяти.

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