В настоящее время я просто пытаюсь реализовать простой алгоритм линейной регрессии в матричной форме на основе cuBLAS с CUDA. Матричное умножение и транспозиция хорошо работают с функцией cublasSgemm
.Преобразование матрицы CUDA путем ссылки на CUDA-указатель
Проблемы начинаются с матричных инверсий на основе cublas<t>getrfBatched()
и cublas<t>getriBatched()
функций (см. here).
Как можно видеть, входные параметры этих функций - массивы указателей на матрицы. Представьте себе, что я уже выделенную память для матрицы (A^T * A) на GPU в результате предыдущих расчетов:
float* dProdATA;
cudaStat = cudaMalloc((void **)&dProdATA, n*n*sizeof(*dProdATA));
Можно ли запустить разложение (инверсия)
cublasSgetrfBatched(handle, n, &dProdATA, lda, P, INFO, mybatch);
без дополнительного HOST < -> копирование памяти GPU (см. working example of inverting array of matrices) и выделение массивов с помощью одного элемента, но просто получите GPU-ссылку на графический указатель?
Спасибо! Но я боюсь, что использование управляемой памяти может быть причиной снижения скорости вычисления. –