преобразование линейной алгебры gsl для использования в скальпаке или другой параллельной матричной библиотеке - PullRequest
2 голосов
/ 22 февраля 2012

У меня есть код, глубоко внедренный в матричную арифметику GNU Scientific Library (GSL), основное вычисление этого кода - решение большой системы линейных уравнений, которая занимает очень много времени в последовательном режиме и с функциями GSL и BLAS, есть лиспособ распараллелить это вычисление или преобразовать его для использования в уже параллельной библиотеке, такой как ScaLAPACK?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Если ваша матрица разреженная , т.е. она содержит много нулевых записей, то вы можете легко реализовать множество пакетов алгебры разреженной матрицы без особых проблем.К сожалению, это потребует от вас хранения ваших матриц в разреженном формате, что, насколько мне известно, gsl не делает.Как только ваша матрица будет храниться в каком-то разреженном формате, вы сможете без проблем работать с большими системами, даже в последовательных приложениях.

Я предлагаю использовать UMFPACK, поскольку для его реализации требуется наименьший объем работы.это не требует, чтобы вы помещали свои данные в их структуры.

Замечание по параллелизму: Если ваш код в настоящее время последовательный, переход к параллельному решателю НЕ тривиален.Вполне возможно, что реализовать многопоточный пакет может быть просто, но у меня нет большого опыта работы с многопоточными программами.Кроме того, действительно параллельные решатели (распределенная память) не так уж эффективны, поскольку каждому процессору требуется собственная копия полной матрицы, и лучше использовать итерационные методы.

Немного больше подробностей было бы полезно: Как долго это долго?Вам нужно обратное по какой-то причине, или вы просто решаете систему уравнений?

1 голос
/ 15 марта 2012

Вы пробовали Intel MKL? Он включает в себя свои собственные параллельные версии функций Blas. В прошлый раз, когда я пытался, они чертовски быстры. Но было бы также легче ответить, если бы вы предоставили информацию о размере матрицы, но пока вы используете x64, много процессоров / ядер и много оперативной памяти, ну, тогда это не имеет значения.

Другим вариантом является nVidia CUDA. Их интерфейс похож на blas, но на самом деле он медленнее, чем MKL, но все же быстрее, чем последовательный. Возможно, я попробовал это на старой карте, но вам нужно как минимум 200 потоковых блоков графического процессора, чтобы назвать это полезным.

РЕДАКТИРОВАТЬ: Матрицы этих размеров выходят за рамки моего опыта.

...