[devel] [#293095] FAILED del=blas

Vladislav Zavjalov slazav на altlinux.org
Вт Янв 11 11:53:55 MSK 2022


On Tue, Jan 11, 2022 at 03:46:39AM +0300, Dmitry V. Levin wrote:
> Коллеги,
> 
> Если удалять все пакеты, зависящие от blas, то получается многовато
> пакетов, поэтому пакет blas надо чинить.

Я когда-то собирал для себя информацию про текущее состояни системы blas/lapack,
приложу сюда, вдруг кому-то пригодится, чтоб не запутаться в
многочисленных пакетах.

Я погляжу на починку blas, но не слишком уверен в своих силах, времени и т.п.


## Blas/Lapack

Классические наборы функций для задач линейной алгебры. Blas (Basic
Linear Algebra Subroutines) - работа с матрицами и векторами, Lapack
(Linear Algebra PACKage) - решение систем линейных уравнений. Lapack
использует Blas для работы.

Существуют во множестве разных вариантов, которые можно по всякому друг с
другом комбинировать.


* blas -- стандартный "референсный" Blas.
  http://www.netlib.org/blas/

  В Altlinux представлен пакетом blas. Используется только на архитектуре
  RiscV, где openblas не собирается. Да и там, кажется, без него можно
  было обойтись, использовав lapack со своим встроенным blas.


* xblas -- blas повышенной точности.
  https://www.netlib.org/xblas/

  Используется как дополнение (а не как замена) blas.

  В Altlinux представлен пакетом xblas.


* openblas -- Оптимизированная версия Blas, с поддержкой многопоточных вычислений и т.п.
  https://github.com/xianyi/OpenBLAS

  Считается, что это - наиболее универсальная версия, которую следует везде использовать.
  Внутри себя носит lapack (с reference blas), clapack, relapack, xblas, но в Altlinux
  собирается без них.   Также в Altlinux сейчас не включена поддержка многопоточности,
  ни thread, ни openmp.

  В Altlinux предоставляет заголовочные файлы от clapack (но не библиотеки!)

  При сборке разных программ (я натыкался на это в gmsh и getdp)
  считается, что если в системе есть openblas, то он должен предоставлять
  и свой lapack. Поскольку у нас lapack отдельный, то автоматика не работает
  и приходится вручную указывать, с чем следует линковаться.


* lapack -- стандартный "референсный" lapack.
  http://www.netlib.org/lapack/

  Внутри себя носит референсный blas, а также cblas (интерфейс для языка
  C), Но может быть собран с другими версиями blas. Дополнительно может
  использовать xblas (функции повышенной точности).

  В Altlinux собран с openblas и xblas. Также из этого пакета ставятся man-pages
  для blas и lapack. Как я понял, изначальный замысел был в том, чтобы сделать
  этот пакет "главным", чтобы в спек-файлах ставить зависимости именно на
  liblapack.


* clapack -- интерфейс языка C к lapack.

  В Altlinux собран с openblas. Клиент: libqm-dsp.


* lapackpp -- интерфейс языка C++ для lapack.

  А Altlinux собран с openblas. Клиентов не имеет.


* scalapack -- Scalable LAPACK
  http://www.netlib.org/scalapack/

  Предоставляет также pblas


* libatlas -- Automatically Tuned Linear Algebra Software
  http://math-atlas.sourceforge.net/

  Blas + небольшая часть lapaсk, оптимизированная под конкретную машину на
  этапе сборке. Вещь хорошая и полезная, но при распространении в виде
  уже собранных бинарных пакетов вся его сила теряется. В этом случае лучше
  использовать openblas.

  В Altlinux представлен даво не обновлявшимся пакетом atlas, только на
  архитектурах i586 и x86_64. Клиентов не имеет. Видимо, этот пакет
  следует удалить.

* eml -- Elbrus Math Libraries
  http://www.mcst.ru/

  blas, lapack и fftw для компьютеров Эльбрус


У меня когда-то была утопическая идея: сделать один пакет: openblas и
из него собирать все варианты.

Во-первых, там забандлен lapack, внутри которого - reference blas, так
что можно собрать reference версию. Также, разумеется, собрать
оптимизированную версию openblas+lapack. Собрать многопоточную версию
(threads, и, может быть, openmpi).

И все получившиеся варианты переключать альтернативами. То что они
произойдут из одного пакета, будет дополнительной гарантией, что они не
разъедутся.

Мне казалось, что пакеты позволяют это сделать.




Подробная информация о списке рассылки Devel