Компилиране, инсталиране и използване на Libfabric под CentOS 7 и 8Съдържание:
1. Предварителна информацияLibfabric е библиотека за обмяна на данни между приложенията в дистрибутирана изчислителна инфраструктура. Целта на този документ е да предложи рецепта за изграждане на версия на последната версия на библиотеката за CentOS 7 и 8, с използването на GNU Compilers. Този документ не включва описание на процедура по компилирането на програмния код на библиотеката с Intel Compilers. Отбележете, че ако имате съвремена, актуална и цялостна инсталация на пакета Intel Compilers с MPI поддръжка, вие ще имате библиотеката libfabric и тя ще се намира във файла: /usr/unite/intel/compilers_and_libraries/linux/mpi/intel64/libfabric/lib/libfabric.so.1 (възможно е във вашия случай инсталационната директория на Intel Compilers да не е /usr/unite/intel/compilers_and_libraries/linux/mpi/intel64/libfabric/lib/prov/ Най-вероятно там ще намерите файловете с библиотеки: libpsmx2-fi.so librxm-fi.so libsockets-fi.so libtcp-fi.so libverbs-fi.so Също така, към настоящия момент, не може да използвате PGI Compilers за да компилирате кода на библиотеката! ВНИМАНИЕ! Към настоящия момент в CentOS 8 не се поддържат интерфейсните протоколи PSM и PSM2. Това е поради това, че поддръжката на тези протоколи в ядрото е прекратена! Отбележете, че поддръжката на PSM2, например, изисква модула
2. Изтегляне на изходния код и компилирането му с GNU CompilersЗа да може да създадете стабилно функционираща алтернативна libfabric библиотека под CentOS 7, се изисква да компилирате кода чрез GCC 8.3.1. Как да инсталирате тази версия е описано в документа "Инсталиране и използване на алтернативни версии на GCC компилаторите под CentOS 7". Подразбираща се версия на GCC в CentOS 8 е 8.2.1 е тя е достатъчно добра за компилирането на кода под тази дистрибуция. Следните пакети трябва да бъдат инсталирани преди да започнете с изпълнение на процедурите, описани по-долу:
За да изтеглите поседната стабилна версия на изходния програмен код, посетете хранилището на проекта: https://github.com/ofiwg/libfabric/releases Връзката за изтегляне на архива в изходния код е в текста на страницата. За примерите по-долу се предполага, че наличната към момента версия на библиотеката е 1.9.0 (по-времето, по което вие изпълнявате тези инструкции, версията може да е по-висока от 1.9.0): $ wget https://github.com/ofiwg/libfabric/archive/v1.9.0.tar.gz -O libfabric-1.9.0.tar.gz Създайте директория, в която ще се извършва процеса на разпакетиране, конфигуриране и компилиране: $ mkdir ~/build Разпакетирайте в нея файла с архива: $ tar xvf libfabric-1.9.0.tar.gz -C ~/build влезте в новосъздадената при разпакетирането директория: $ cd ~/build/libfabric-1.9.0 и в нея изпълнете: $ ./autogen.sh за да създадете
Отбележете, че тестовете трябва да бъдат успешни (тестовете се активират от provider: UDP;ofi_rxd fabric: UDP-IP domain: udp version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD provider: UDP;ofi_rxd fabric: UDP-IP domain: udp version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD provider: UDP;ofi_rxd fabric: UDP-IP domain: udp version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD provider: UDP;ofi_rxd fabric: UDP-IP domain: udp version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD provider: UDP;ofi_rxd fabric: UDP-IP domain: udp version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD provider: shm fabric: shm domain: shm version: 1.1 type: FI_EP_RDM protocol: FI_PROTO_SHM provider: UDP fabric: UDP-IP domain: udp version: 1.1 type: FI_EP_DGRAM protocol: FI_PROTO_UDP provider: UDP fabric: UDP-IP domain: udp version: 1.1 type: FI_EP_DGRAM protocol: FI_PROTO_UDP provider: UDP fabric: UDP-IP domain: udp version: 1.1 type: FI_EP_DGRAM protocol: FI_PROTO_UDP provider: UDP fabric: UDP-IP domain: udp version: 1.1 type: FI_EP_DGRAM protocol: FI_PROTO_UDP provider: UDP fabric: UDP-IP domain: udp version: 1.1 type: FI_EP_DGRAM protocol: FI_PROTO_UDP provider: tcp fabric: TCP-IP domain: tcp version: 1.0 type: FI_EP_MSG protocol: FI_PROTO_SOCK_TCP provider: tcp fabric: TCP-IP domain: tcp version: 1.0 type: FI_EP_MSG protocol: FI_PROTO_SOCK_TCP provider: tcp fabric: TCP-IP domain: tcp version: 1.0 type: FI_EP_MSG protocol: FI_PROTO_SOCK_TCP provider: tcp fabric: TCP-IP domain: tcp version: 1.0 type: FI_EP_MSG protocol: FI_PROTO_SOCK_TCP provider: tcp fabric: TCP-IP domain: tcp version: 1.0 type: FI_EP_MSG protocol: FI_PROTO_SOCK_TCP Пристъпете към инсталиране: $ make install
3. Динамично свързване на компилираната библиотека към C/C++ приложенияЗа да може даден код да бъде компилиран спрямо динамичната версия на libfabric библиотеката (компилирана по процедурата показана по-горе), освен описание на използваните от нея функции в кода, в процеса на конфигурацията или компилацията трява да бъат посочени пътищата до хедър файловете и директорията, която съдържа библиотеката (и нейното име): $ CC=gcc CXX=g++ ./configure ... CGLAGS="-I/usr/unite/libfabric-1.9.0-gcc/include -I/usr/unite/libfabric-1.9.0-gcc/include/rdma" LFLAGS="-L/usr/unite/libfabric-1.9.0-gcc/lib -lfabric" След успешна компилация спрямо динамичната версия на библиотеката, изпълнимият код трябва да може да зарежда libfabric библиотеката при стартиране. За целта, в текущата сесия на $ export LD_LIBRARY_PATH=/usr/unite/libfabric-1.9.0-gcc/lib:$LD_LIBRARY_PATH Това зареждане може да бъде направено инцидентно (примера по-горе) или да стане част от постоянните настройки за Когато се използва статичната версия на libfabric библиотеката, самия файл с библиотеката се задава в списъка с бинарни обекти, на база на които компилатора създава изпълнимия код. Например: $ gcc -I/usr/unite/libfabric-1.9.0-gcc/include -I/usr/unite/libfabric-1.9.0-gcc/include/rdma -o test test.c file1.o file2.o /usr/unite/libfabric-1.9.0-gcc/lib/libfabric.a |
Последна актуализация: 8 декември 2019
2019 УНИТе, Веселин Колев