Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
27.03.2015
Размер:
949 б
Скачать
#include <cublas.h>

#include "minres.h"


/* Функция должна выполнить одну итерацию метода минимальных невязок для системы Ax = b.
   A — матрица размера nxn (хранится по столбцам);
   b — вектор размера n;
   x — вектор размера n, на входе содержит текущее приближение,
       на выходе должен содержать следующеее.
   r, Ar — вспомогательные массивы размера n. В Ar на входе содержатся неопределённые,
       но числовые значения.
*/
void min_residual_gpu(int n, const float * A, const float * b,
                         float * x, float * r, float * Ar)
{
    // r <- b
    cublasScopy(n, b, 1, r, 1);
    // r <- Ax - r
    cublasSgemv('N', n, n, 1.0f, A, n, x, 1, -1.0f, r, 1);
    // Ar
    cublasSgemv('N', n, n, 1.0f, A, n, r, 1, 0, Ar, 1);
    // tau <- (Ar, r) / (Ar, Ar)
    float tau = cublasSdot(n, Ar, 1, r, 1) / cublasSdot(n, Ar, 1, Ar, 1);
    // x <- x - tau * r
    cublasSaxpy(n, -tau, r, 1, x, 1);
}
Соседние файлы в папке CUDA_MinResidual_completed