- PVSM.RU - https://www.pvsm.ru -

Berkeley Unified Parallel C (UPC). Установка в среде Windows и Linux

image Unified Parallel C (UPC) — это расширение языка C, разработанное для высокопроизводительных вычислений на крупномасштабных параллельных машинах. Язык представляет единую программную модель для систем с общей и разделенной памятью. Количество параллелизма фиксируется на старте программы, обычно с одним потоком на ядро процессора.

» Официальный сайт UPC [1]
» Официальный сайт Berkeley UPC [2]

В своё время возникли определенные трудности с разворачиванием UPC и отсутствием каких-либо подсказок по первым шагам ни в русскоязычном, ни в англоязычном сегменте интернета, кроме официальной инструкции INSTALL.TXT [3], которую пришлось переваривать.

Чтобы сей опыт не пропал даром, я решил написать статью по установке UPC в различных средах.

В случае возникновения трудностей или вопросов можно обратиться к создателям за технической поддержкой [4]. Отвечают довольно быстро (с учетом того, что находятся на другой стороне планеты). Большая благодарность Paul Hargrove и Dan Bonachea за то, что помогли во всём этом разобраться.

Установка Berkeley UPC в Windows

Подготовка среды

В основном UPC заточен под Linux, поэтому первое, что придется сделать, это установить линуксоподобную консоль и необходимые пакеты:

1. Установить Cygwin (лучше в папку с названием без пробелов, например, C:ProgramsCygwin64)

www.cygwin.com/setup-x86.exe [5]
www.cygwin.com/setup-x86_64.exe [6]

Помимо установки по умолчанию потребуется добавить пакеты gcc (gcc-core, gcc-g++). Проверить установку можно командой:

cygcheck -s

2. Установить Perl [7] либо скачать его среди пакетов Cygwin

Установка Berkeley UPC

1. Скачать Berkeley UPC [8] (C:Programsberkeley_upc-2.22.3)

2. Создать подкаталог build (C:Programsberkeley_upc-2.22.3build)

3. Запустить Cygwin

4. Запустить скрипт configure. Для указания каталога установки необходимо использовать опцию --prefix=dir, для указания сети по умолчанию --with-default-network=smp (Symmetric Multiprocessing, локальная многоядерная машина):

cd /cygdrive/c/Programs/berkeley_upc-2.22.3/berkeley_upc-2.22.3/build
../configure --prefix=/cygdrive/c/Programs/berkeley_upc-2.22.3 --with-default-network=smp

SUCCESS! The configure step is now complete. You should now proceed with:
gmake; gmake install

5. Скомпилировать UPC:

make

6. Установить UPC:

make install

Папки opt, dbg содержат различные построения runtime библиотек, используемых кодом UPC. Папка opt содержит оптимизации и используется по умолчанию. Папка dbg используется для отладки при использовании параметра –g в upcc. Не следует использовать напрямую содержимое этих папок. Необходимо пользоваться утилитами upcc и upcrun в папке build или подпапке bin в папке инсталляции.

Чтобы не указывать каждый раз путь до утилит, можно добавить путь bin в переменную среды PATH.

Тесты конфигурации UPC (по желанию)

0. Каждая подпапка build содержит конфигурационный файл upcc.conf. При необходимости проверить его и отредактировать.

1. Минимальный тест конфигурации (из папки build):

env UPCC_FLAGS= ./upcc --norc --version

This is upcc (the Berkeley Unified Parallel C compiler), v. 2.22.3
(getting remote translator settings...)
----------------------+---------------------------------------------------------
UPC Runtime | v. 2.22.3, built on Oct 26 2016 at 10:22:58
----------------------+---------------------------------------------------------
UPC-to-C translator | v. 2.22.2, built on May 12 2016 at 15:50:34
| host aphid linux-x86_64/64
| gcc v4.2.4 (Ubuntu 4.2.4-1ubuntu4)
----------------------+---------------------------------------------------------
Translator location | upc-translator.lbl.gov/upcc-2.22.2.cgi [9]
----------------------+---------------------------------------------------------
networks supported | udp smp
----------------------+---------------------------------------------------------
default network | smp
----------------------+---------------------------------------------------------
pthreads support | available (if used, default is 2 pthreads per process)
----------------------+---------------------------------------------------------

2. Скомпилировать тесты:

make tests-hello

==== UPC «HELLO WORLD» TESTS SUCCESSFULLY COMPILED ====
Your UPC compilation setup appears to be working for all detected networks: udp smp
You should now test UPC runtime operation for each network of interest.
Start by testing the single-node smp/pthreaded network, with a command like:
./upcrun -n 2 libupcr-smp-par-test

3. Проверить результаты для каждого типа сети:

./upcrun -n 2 ./opt/libupcr-smp-par-test

UPCR: UPC threads 0..1 of 2 on SERAVKIN-PC (process 0 of 1, pid=17100)
Welcome to Berkeley UPC!!!
— Hello from thread 0
— Hello from thread 1

./upcrun -n 2 ./opt/libupcr-udp-par-test

upcrun: nodes not specified! See RUNNING UDP-BASED UPC JOBS in 'man upcrun'

Пример

cd /cygdrive/c/Programs/berkeley_upc-2.22.3/bin
./upcc /cygdrive/c/Programs/berkeley_upc-2.22.3/upc-examples/hello.upc -o hello -pthreads
./upcrun -n 4 hello

UPCR: UPC threads 0..3 of 4 on SERAVKIN-PC (process 0 of 1, pid=32016)
Welcome to Berkeley UPC!!!
— Hello from thread 2!!!
— Hello from thread 1!!!
— Hello from thread 3!!!
— Hello from thread 0!!!

Неприятные ограничения

В среде Windows возможно использование только онлайн транслятора UPC-to-C (используется по умолчанию). Следовательно, нужно быть онлайн, работает медленнее. Но самое напряжное, что потенциально у Беркли есть возможность перехватывать все программы. Если задачки учебные, то как бы ладно, а если что-то серьезное, то уже как-то неуютно. Плюс, есть опасения, что отладка работает только в Linux. Чтобы всё это дело завелось на Windows можно установить виртуальную машину

Виртуальная ROSA Fresh

1. Сначала нужно установить виртуальный менеджер, например, Oracle VM VirtualBox [10].

2. Скачать образ Linux. Выбор пал на ROSA Fresh KDE [11], т.к. это отечественная разработка.

3. Монтировать в виртуальный привод, например, DAEMON Tools Lite.

4. Добавить новую машину Other Linux, выделить оперативную память сколько не жалко.

5. Настроить:

Общие – Дополнительно: буфер и Dragn’n’Drop — двунаправленный
Система – Процессор: процессоры – все ядра, ограничение 90% (иначе основная система перестанет реагировать при интенсивной нагрузке).
Дисплей – Экран: видеопамять 96 Мб
Сеть – сетевой мост.

6. Запустить виртуальную машину. Выбрать пункт Install ROSA Desktop, следовать подсказкам системы. Первые впечатления положительные.

Установка в среде Linux

Подготовка среды

1. Установить g++, запустив в терминале команду:

urpmi gcc-c++

Установка Berkeley UPC-to-C translator

1. Cкачать Berkeley UPC-to-C translator [12] и открыть терминал в папке (через контекстное меню).

2. Запустить команду make:

make

— *** Build complete! ***
You may now install the compiler with:
make install PREFIX=/prefix/to/use

3. Запусть install с повышенными привилегиями:

sudo make install

— *** Installation complete! ***
To use this translator LOCALLY, insert the following pathname:
/usr/local/bupc_translator/targ
in the 'translator' setting of upcc.conf or ~/.upccrc,
or pass it to upcc -translator=path

Сборка Berkeley UPC

1. Скачать Berkeley UPC [8]

2. Создать подпапку build, открыть терминал в папке (через контекстное меню)

3. Запустить конфигурационный файл с указанием локального транслятора и сети по умолчанию smp (Symmetric Multiprocessing, локальная многоядерная машина):

 ../configure BUPC_TRANS=/usr/local/bupc_translator/targ --with-default-network=smp 

SUCCESS! The configure step is now complete. You should now proceed with:
gmake; gmake install

4. Скомпилировать UPC:

make

Тесты конфигурации UPC (по желанию)

0. Каждая подпапка build содержит конфигурационный файл upcc.conf. При необходимости проверить его и отредактировать

1. Запустить тест конфигурации из папки build:

env UPCC_FLAGS= ./upcc --norc --version

This is upcc (the Berkeley Unified Parallel C compiler), v. 2.22.3
----------------------+---------------------------------------------------------
UPC Runtime | v. 2.22.3, built on Oct 26 2016 at 14:01:01
----------------------+---------------------------------------------------------
UPC-to-C translator | v. 2.22.2, built on Oct 25 2016 at 16:22:01
| host Rosa-VB linux-x86_64/64
| gcc v4.9.2 20140811 (ROSA)
----------------------+---------------------------------------------------------
Translator location | /usr/local/bupc_translator/targ
----------------------+---------------------------------------------------------
networks supported | udp smp
----------------------+---------------------------------------------------------
default network | smp
----------------------+---------------------------------------------------------
pthreads support | available (if used, default is 2 pthreads per process)
----------------------+---------------------------------------------------------

2. Запустить компиляцию теста:

make tests-hello

==== UPC «HELLO WORLD» TESTS SUCCESSFULLY COMPILED ====
Your UPC compilation setup appears to be working for all detected networks: udp smp
You should now test UPC runtime operation for each network of interest.
Start by testing the single-node smp/pthreaded network, with a command like:
./upcrun -n 2 libupcr-smp-par-test

3. Проверить результаты для каждого типа сети:

./upcrun -n 2 ./opt/libupcr-smp-par-test

UPCR: UPC threads 0..1 of 2 on Rosa-VB (pshm node 0 of 1, process 0 of 1, pid=12494)
Welcome to Berkeley UPC!!!
— Hello from thread 1
— Hello from thread 0

./upcrun -n 2 ./opt/libupcr-udp-par-test

upcrun: nodes not specified! See RUNNING UDP-BASED UPC JOBS in 'man upcrun'

Установка Berkeley UPC

1. Запустить команду make install из build с повышенными правами. По умолчанию установка производится в каталог /usr/local/berkeley_upc. Чтобы изменить каталог можно использовать опцию --prefix=dir

sudo make install

2. Добавить путь в переменную окружения. Для этого добавить строчку в файл /home/user/.bashcr (автоматический запуск при открытии терминала), либо применить для текущей сессии:

export PATH=$PATH:/usr/local/berkeley_upc/bin

3. Проверить запуск:

upcc --version

This is upcc (the Berkeley Unified Parallel C compiler), v. 2.22.3

Пример

1. Открыть терминал в папке upc-examples.

2. Выполнить команды:

upcc ./hello.upc -o hello -pthreads
upcrun -n 4 hello

UPCR: UPC threads 0..1 of 4 on Rosa-VB (pshm node 0 of 1, process 0 of 2, pid=13295)
UPCR: UPC threads 2..3 of 4 on Rosa-VB (pshm node 0 of 1, process 1 of 2, pid=13320)
Welcome to Berkeley UPC!!!
— Hello from thread 1
— Hello from thread 3
— Hello from thread 0
— Hello from thread 2

Среда разработки Eclipse

В среде разработке Eclipse имеется поддержка языка Berkeley UPC. Достаточно распаковать из архива Eclipse for Parallel Application Developers [13]. Подробнее о проекте Eclipse Parallel Tools Platform (PTP) можно почитать тут [14].

После распаковки необходимо выполнить следующие настройки:

0. Установить Java Runtime Environment [15]

1. Проверить обновления: Открыть меню Help → Check For Updates. Обновить C/C++ Berkeley UPC (Unified Parallel C) Toolchain Support

2. Создать новый проект «Hello World UPC Project», Toolchains: Linux Berkeley UPC (много полезных настроек по умолчанию)

3. Указать пути includes: открыть Properties проекта → C/C++ General → Path and Symbols. Для языка UPC добавить include пути:

Конфигурация Release:

/usr/local/berkeley_upc/opt/include/upcr_preinclude
/usr/include

Конфигурация Debug:

/usr/local/berkeley_upc/dbg/include/upcr_preinclude
/usr/include

4. Отключить проверку орфографии русских комментариев. Правой кнопкой мыши по комментарию, выбрать пункт Disable spell check.

Примечания

Использование

Много встроенного мануала:

man upcc
man upcrun

Отладка

Рекомендуется использовать отладку с помощью программы TotalView [16], но если её нет, то можно воспользоваться обычным отладчиком С, подробнее тут [17].

Благодарю за внимание!

Автор: VeleslavSeravkin

Источник [18]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/parallel-noe-programmirovanie/209690

Ссылки в тексте:

[1] Официальный сайт UPC: http://upc.gwu.edu

[2] Официальный сайт Berkeley UPC: http://upc.lbl.gov

[3] INSTALL.TXT: http://upc.lbl.gov/download/dist/INSTALL.TXT

[4] технической поддержкой: http://upc.lbl.gov/docs/user/contact.shtml

[5] www.cygwin.com/setup-x86.exe: http://www.cygwin.com/setup-x86.exe

[6] www.cygwin.com/setup-x86_64.exe: http://www.cygwin.com/setup-x86_64.exe

[7] Perl: https://www.perl.org/get.html

[8] Berkeley UPC: http://upc.lbl.gov/download/

[9] upc-translator.lbl.gov/upcc-2.22.2.cgi: http://upc-translator.lbl.gov/upcc-2.22.2.cgi

[10] Oracle VM VirtualBox: https://www.virtualbox.org/

[11] ROSA Fresh KDE: https://www.rosalinux.ru/rosa-fresh/

[12] Berkeley UPC-to-C translator: http://upc.lbl.gov/download/source.shtml

[13] Eclipse for Parallel Application Developers: https://www.eclipse.org/downloads/packages/eclipse-parallel-application-developers/neonr

[14] почитать тут: http://www.eclipse.org/ptp/

[15] Java Runtime Environment: http://www.oracle.com/technetwork/java/javase/downloads/index.html

[16] TotalView: http://upc.lbl.gov/docs/user/totalview.shtml

[17] подробнее тут: http://upc.lbl.gov/docs/user/upc-debugging.shtml

[18] Источник: https://habrahabr.ru/post/315190/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox