[devel] пакеты для численного счета

Vladislav Zavjalov slazav на altlinux.org
Пт Сен 25 15:55:01 MSK 2020


On Fri, Sep 25, 2020 at 03:20:56PM +0300, Anton Farygin wrote:
> On 20.09.2020 16:28, Vladislav Zavjalov wrote:
> > * openblas -- Оптимизированная версия Blas, с поддержкой
> >    многопоточных вычислений и т.п.
> >    https://github.com/xianyi/OpenBLAS
> >
> >    Openblas может и сам предоставлять стандартный lapack, но у нас он собран с ключом
> >    NO_LAPACK=1. При этом в заголовочные файлы функции из lapack попадают, а
> >    в библиотеку - нет. В результате, при сборке разных программ возникают
> >    проблемы на этапе линковки, даже если liblapack-devel есть в системе.
> >    Приходится вручную указывать, что линковаться надо с libopenblas + liblapack.
> 
> Это, наверное, плохо. Может быть стоит его собрать с внешним lapack ?

Так сейчас он и используется с внешним lapack. При этом lapack носит
свой blas, и устанавливает man-pages от него. А h-файлов в нем и нет,
они - от clapack. Так что все весьма запутано.

Как я понимаю, идея была сделать liblapack точкой входа, чтобы на него
ставить зависимости, а он уже вытягивал openblas и все нужное в системе
было.

Мне сейчас больше нравится идея собрать obenblas со всеми опциями, со
своими lapack, clapack, многопоточностью. И использовать только его.

Кроме того, наверное хорошо бы иметь отдельный референсный комплект
(blas+xblas+lapack+clapack). Его можно сделать на базе liblapack.
Единственное, что смущает - очень неочевидные названия в этом
случае: "если нужен blas+lapack - использовать либо openblas либо liblapaсk".

> + make -j16 'CFLAGS=-pipe -frecord-gcc-switches -Wall -g -O2 
> -I../include -I/usr/include/openblas -DNOSHORTS -DUSESIGTERM 
> -DUSEGETTIME' 'LIBS=-L../lib -lsdp'
> make: Entering directory '/usr/src/RPM/BUILD/csdp-6.2.0/solver'
> cc -pipe -frecord-gcc-switches -Wall -g -O2 -I../include 
> -I/usr/include/openblas -DNOSHORTS -DUSESIGTERM -DUSEGETTIME   -c -o 
> csdp.o csdp.c
> make: Leaving directory '/usr/src/RPM/BUILD/csdp-6.2.0/solver'
> make: Entering directory '/usr/src/RPM/BUILD/csdp-6.2.0/solver'
> cc -pipe -frecord-gcc-switches -Wall -g -O2 -I../include 
> -I/usr/include/openblas -DNOSHORTS -DUSESIGTERM -DUSEGETTIME csdp.o 
> -L../lib -lsdp -o csdp
> /usr/bin/ld.default: ../lib/libsdp.so: undefined reference to `dtrtri_'
> /usr/bin/ld.default: ../lib/libsdp.so: undefined reference to `dpotrf_'
> /usr/bin/ld.default: ../lib/libsdp.so: undefined reference to `dpotrs_'
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:5: csdp] Error 1
> make: Leaving directory '/usr/src/RPM/BUILD/csdp-6.2.0/solver'
> error: Bad exit status from /usr/src/tmp/rpm-tmp.39185 (%build)

Да, так это и выглядит. Убирание lapackовских заголовков из openblas
мне, кстати, не сильно помогло. Автоматика в cmake и autotools все равно
считает, что все должно быть в openblas, -llapack надо явно указывать. А
фортрану сишные заголовки вообще не нужны.





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