УНИТе

Портал > Документация > Компилиране, инсталиране и използване на SZ под CentOS 7 и 8

Компилиране, инсталиране и използване на SZ под CentOS 7 и 8

Съдържание:

  1. Предварителна информация
  2. Изтегляне на изходния код и компилирането му с GNU Compilers
  3. Динамично свързване на компилираната библиотека към C/C++ и Fortran приложения
  4. Упътвания за директно използване на инструмента sz

 

1. Предварителна информация

Zstandard (ZSTD) е библиотека за реализиране на компресор/декомпресор за данни, без загуба. Целта на този документ е да предложи рецепта за изграждане на версия на последната версия на библиотеката за CentOS 7 и 8, с използването на GNU Compilers. Използването на Intel Compilers и/или PGI Compilers за компилирането на изходния код, не носи по-висока скорост на изпълнение.

 

2. Изтегляне на изходния код и компилирането му с GNU Compilers

За да може да създадете стабилно функционираща алтернативна libfabric библиотека под CentOS 7, се изисква да компилирате кода чрез GCC 8.3.1. Как да инсталирате тази версия е описано в документа "Инсталиране и използване на алтернативни версии на GCC компилаторите под CentOS 7". Подразбираща се версия на GCC в CentOS 8 е 8.2.1 е тя е достатъчно добра за компилирането на кода под тази дистрибуция. Следните пакети трябва да бъдат инсталирани преди да започнете с изпълнение на процедурите, описани по-долу:

  • CentOS 7

    $ sudo yum install cmake3 gcc gcc-c++ gsl gsl-devel gcc-gfortran glibc-headers libgomp zlib-devel
  • CentOS 8

    $ sudo dnf install cmake gcc gcc-c++ gsl gsl-devel gcc-gfortran glibc-headers libgomp zlib-devel

Библиотеката ZSTD, която се използва като зависимост при компилирането, може да компилирате и инсталирате (ако това не е вече направено), използвайки инструкциите в документа "Компилиране, инсталиране и използване на Zstandard (ZSTD) под CentOS 7 и 8".

За да изтеглите поседната стабилна версия на изходния програмен код, посетете хранилището на проекта:

https://github.com/disheng222/SZ/releases

Връзката за изтегляне на архива в изходния код е в текста на страницата. За примерите по-долу се предполага, че наличната към момента версия на библиотеката е 1.9.0 (по-времето, по което вие изпълнявате тези инструкции, версията може да е по-висока от 1.9.0):

$ wget https://github.com/disheng222/SZ/archive/v2.1.8.0.tar.gz -O SZ-2.1.8.0.tar.gz

Създайте директория, в която ще се извършва процеса на разпакетиране, конфигуриране и компилиране:

$ mkdir ~/build

Разпакетирайте в нея файла с архива:

$ tar xvf SZ-2.1.8.0.tar.gz -C ~/build

влезте в новосъздадената при разпакетирането директория:

$ cd ~/build/SZ-2.1.8.0

и в нея изпълнете:

$ scl enable devtoolset-8 bash
$ CFLAGS="-I/usr/unite/zstd-1.4.4-gcc/usr/local/include" LD_LIBRARY_PATH=/usr/unite/zstd-1.4.4-gcc/usr/local/lib:$LD_LIBRARY_PATH LDFLAGS="-L/usr/unite/zstd-1.4.4-gcc/usr/local/lib -lzstd" ./configure --prefix=/usr/unite/sz-2.1.8.0-gcc --enable-openmp --enable-gsl --enable-fortran --enable-randomaccess
$ make -j6
$ make install

Може би най-важната част от пост-инсталационния процес е да премахнете библиотеките на Zstandard и ZLIB, които са вградени и компилирани в кода на проекта SZ:

$ $ rm -f /usr/unite/sz-2.1.8.0-gcc/lib/libzstd.*
rm -f /usr/unite/sz-2.1.8.0-gcc/lib/libzlib.*

Може да проверите и дали библиотеката libSZ.so "вижда" всички библиотеки, от които е зависима. За целта изпълнете:

$ ldd /usr/unite/sz-2.1.8.0-gcc/lib/libSZ.so

и трябва да получите следния резултат:

	linux-vdso.so.1 (0x00007ffeb89e9000)
	libgsl.so.23 => /lib64/libgsl.so.23 (0x00007fabb9df2000)
	libgslcblas.so.0 => /lib64/libgslcblas.so.0 (0x00007fabb9bb3000)
	libgfortran.so.5 => /lib64/libgfortran.so.5 (0x00007fabb9738000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fabb93b6000)
	libgomp.so.1 => /lib64/libgomp.so.1 (0x00007fabb9186000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fabb8f6e000)
	libquadmath.so.0 => /lib64/libquadmath.so.0 (0x00007fabb8d2d000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fabb8b0d000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fabb8749000)
	libz.so.1 => /lib64/libz.so.1 (0x00007fabb8532000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fabba59c000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fabb832e000)

 

3. Динамично свързване на компилираната библиотека към C/C++ приложения

За да може даден код да бъде компилиран спрямо динамичната версия на libfabric библиотеката (компилирана по процедурата показана по-горе), освен описание на използваните от нея функции в кода, в процеса на конфигурацията или компилацията трява да бъат посочени пътищата до хедър файловете и директорията, която съдържа библиотеката (и нейното име):

$ CC=gcc CXX=g++ ./configure ... CGLAGS="-I/usr/unite/zstd-1.4.4-gcc/usr/local/include -I/usr/unite/zstd-1.4.4-gcc/usr/local/include" LFLAGS="-L/usr/unite/sz-2.1.8.0-gcc/lib -lSZ"

След успешна компилация спрямо динамичната версия на библиотеката, изпълнимият код трябва да може да зарежда libSZ.so библиотеката при стартиране. За целта, в текущата сесия на bash, в която ще става стартирането, трябва да се зареди пътя до файла с библиотеката:

$ export LD_LIBRARY_PATH=/usr/unite/sz-2.1.8.0-gcc/lib:$LD_LIBRARY_PATH

Това зареждане може да бъде направено инцидентно (примера по-горе) или да стане част от постоянните настройки за bash сесията (те са обикновено във файла ~/.bashrc).

Когато се използва статичната версия на libSZ библиотеката, самия файл с библиотеката се задава в списъка с бинарни обекти, на база на които компилатора създава изпълнимия код. Например:

$ gcc -I/usr/unite/zstd-1.4.4-gcc/usr/local/include -I/usr/unite/zstd-1.4.4-gcc/usr/local/include -o test test.c file1.o file2.o /usr/unite/sz-2.1.8.0-gcc/lib/libSZ.a /usr/unite/zstd-1.4.4-gcc/usr/local/lib/libzstd.a

 

4. Упътвания за директно използване на инструмента sz

Заедно с инсталацията на библиотеките, в директория /usr/unite/sz-2.1.8.0-gcc/bin ще бъде инсталиран и инструмента sz (чрез него може да компресирате или декомпресирате файлове с данни). Важна особеност е стартирането му (в случая на компилацията, извършена съгласно горните инструкции). При стартирането му трябва да бъде достъпна (в стойността на LD_LIBRARY_PATH) директорията, в която се намира библиотеката libzstd.so.1. Т.е. процеса по стартиране ще изглежда така:

$ LD_LIBRARY_PATH=/usr/unite/zstd-1.4.4-gcc/usr/local/lib:$LD_LIBRARY_PATH PATH=/usr/unite/sz-2.1.8.0-gcc/bin:$PATH sz

а като резултат от изпълнението ще получите изведени на стандартния изход в текстов вид инструкциите за използване на инструмента.

В същата директория (/usr/unite/sz-2.1.8.0-gcc/bin) ще намерите и инструменти за тест на производителността и правилността на библиотеката на компресора/декомпресора на данни. Те се стартират по същия начин, както и sz (т.е. със задаване на стойности на LD_LIBRARY_PATH и PATH).

 


Последна актуализация: 9 декември 2019

2019 УНИТе, Веселин Колев