Матричное решение с C (в CUDA) - PullRequest
2 голосов
/ 13 апреля 2011

Как часть более крупной проблемы, мне нужно решить небольшие линейные системы (т.е. NxN, где N ~ 10), чтобы использование соответствующих библиотек cuda не имело никакого смысла с точки зрения скорости.

К сожалению что-тоТакже неясно, как решить такие системы, не затягивая большие пушки, такие как GSL, EIGEN и т. д.

Может ли кто-нибудь направить меня в направлении решателя с плотной матрицей (Ax = B) по прямой C?

Для тех, кто заинтересован, базовая структура генератора для этого раздела кода:

ndarray=some.generator(N,N)
for v in range N:
    B[v]=_F(v)*constant
    for x in range N:
        A[v,x]=-_F(v)*ndarray[x,v]

К сожалению, у меня почти нулевые знания по высшей математике, поэтому любые советы будут оценены.

ОБНОВЛЕНИЕ: Я работал над этим, и у меня есть почти решение, которое работает, но не работает.Любой, кто прячется, может проверить, что у меня есть на pastebin .

Я использую Crout Decomposition с Pivoting, который кажется наиболее общим подходом.Идея этого теста заключается в том, что каждый поток выполняет одну и ту же работу.Скучно, я знаю, но план состоит в том, что переменная matrixcount увеличивается, вводятся фактические данные, и каждый поток решает маленькие матрицы индивидуально.

Спасибо всем, кто проверял это.

ОБНОВЛЕНИЕ ПОСЛЕ ОТВЕТА: Закончен код решения матрицы для работы с процессором и графическим процессором, проверьте мою отложенную запись здесь

1 Ответ

0 голосов
/ 14 апреля 2011

CUDA здесь не поможет, это правда.Подобные матрицы слишком малы для этого.

Что вы делаете, чтобы решить систему линейных уравнений, так это разложение LU:

Или, что еще лучше, QR-разложение с отражениями Хаусхолдера, как в процессе Грамма-Шмидта.

Решение проблемывпоследствии линейное уравнение становится легким, но я боюсь, что всегда присутствует некоторая «высшая математика» (линейная алгебра).Это, и есть много (много!) Библиотек C для решения линейных уравнений.Мне не кажется "большим оружием".

...