преобразование линейной алгебры gsl для использования в скаляпаке или другой библиотеке параллельных матриц

StackOverflow https://stackoverflow.com/questions/9386113

  •  28-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top