УНИТе

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

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

Съдържание:

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

 

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

Zfp е библиотека за компресия на числови данни без загуба на информация (загуба на точнос). Целта на този документ е да предложи рецепта за изграждане на версия на zfp библиотеката, чрез използване на GNU Compilers.

Отбележете, че използването на Intel Compilers и/или PGI Compilers за компилиране на кода, не повишава скоростта на компресия или декомпресия и именно затова предложената по-долу процедура за изграждането на библиотеката е базирана на използването на GNU Compilers.

 

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

Посетете страницата на файловото хранилище на проекта:

https://github.com/LLNL/zfp/releases

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

$ wget https://github.com/LLNL/zfp/archive/0.5.5.tar.gz -O zfp-0.5.5.tar.gz

Създайте директория, в която да извършите компилирането:

$ mkdir ~/build

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

$ tar xvf zfp-0.5.5.tar.gz -C ~/build

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

$ cd ~/build/zfp-0.5.5

и там изпълнете операциите по компилирането и стартиране на тестовете:

$ cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/unite/zfp-0.5.5-gcc
$ make -j12
$ make test

Резултатът от изпълнението на тестовете ще изглежда по следния начин:

Running tests...
Test project /home/vesso/build/zfp-0.5.5/build
    Start 1: small-arrays-1d-fp32
1/8 Test #1: small-arrays-1d-fp32 .............   Passed    0.01 sec
    Start 2: small-arrays-1d-fp64
2/8 Test #2: small-arrays-1d-fp64 .............   Passed    0.01 sec
    Start 3: small-arrays-2d-fp32
3/8 Test #3: small-arrays-2d-fp32 .............   Passed    0.01 sec
    Start 4: small-arrays-2d-fp64
4/8 Test #4: small-arrays-2d-fp64 .............   Passed    0.01 sec
    Start 5: small-arrays-3d-fp32
5/8 Test #5: small-arrays-3d-fp32 .............   Passed    0.01 sec
    Start 6: small-arrays-3d-fp64
6/8 Test #6: small-arrays-3d-fp64 .............   Passed    0.01 sec
    Start 7: small-arrays-4d-fp32
7/8 Test #7: small-arrays-4d-fp32 .............   Passed    0.01 sec
    Start 8: small-arrays-4d-fp64
8/8 Test #8: small-arrays-4d-fp64 .............   Passed    0.01 sec

100% tests passed, 0 tests failed out of 8

Total Test time (real) =   0.09 sec

ВНИМАНИЕ! Пристъпете към инсталирането на продукта на компилация само и единствено, ако всички тестове са проведени успешно!

След това изградете и статичната версия на библиотеката:

$ cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/unite/zfp-0.5.5-gcc -DBUILD_SHARED_LIBS=OFF
$ make -j12

и инсталирайте:

$ make install

След успешно извършване на инсталацията, може да изведете списък с библиотеките, към които е динамично свързана библиотеката libzfp.so. Това става по следния начин:

$ ldd /usr/unite/zfp-0.5.5-gcc/lib64/libzfp.so

Трябва да получите изход, който е подобен на:

	linux-vdso.so.1 (0x00007ffe8e930000)
	libgomp.so.1 => /lib64/libgomp.so.1 (0x00007f9ab6c30000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f9ab6a10000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f9ab668e000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f9ab62ca000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f9ab60c600)
	/lib64/ld-linux-x86-64.so.2 (0x00007f9ab708e000)

 

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

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

$ CC=gcc CXX=g++ ./configure ... CGLAGS="-I/usr/unite/zfp-0.5.5-gcc/include" LFLAGS="-L/usr/unite/zfp-0.5.5-gcc/lib64 -lzfp"

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

$ export LD_LIBRARY_PATH=/usr/unite/zfp-0.5.5-gcc/lib64:$LD_LIBRARY_PATH

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

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

$ gcc -o test test.c file1.o file2.o -I/usr/unite/zfp-0.5.5-gcc/include /usr/unite/zfp-0.5.5-gcc/lib64/libzfp.a

(вместо gcc може да използвате g++ или gfortran, в зависимост от проекта).

 


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

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