Pull to refresh

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

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

» Официальный сайт UPC
» Официальный сайт Berkeley UPC

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

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

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

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


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

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

1. Установить Cygwin (лучше в папку с названием без пробелов, например, C:\Programs\Cygwin64)
www.cygwin.com/setup-x86.exe
www.cygwin.com/setup-x86_64.exe

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

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

Установка Berkeley UPC

1. Скачать Berkeley UPC (C:\Programs\berkeley_upc-2.22.3\setup)

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

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

4. Запустить скрипт configure. Для указания каталога установки необходимо использовать опцию --prefix=dir, для указания сети по умолчанию --with-default-network=smp (Symmetric Multiprocessing, локальная многоядерная машина):
cd /cygdrive/c/Programs/berkeley_upc-2.22.3/setup/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
----------------------+---------------------------------------------------------
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.

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

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

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

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

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


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

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

Alt Linux
1. Установить g++ (через репозитарий или найти последнюю версию):
apt-cache search gcc-c++
apt-get install gcc5-c++

2. Установить perl-Term-ReadLine-Gnu
apt-get install perl-Term-ReadLine-Gnu


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

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

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

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/.bashrc (автоматический запуск при открытии терминала), либо применить для текущей сессии:
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. Подробнее о проекте Eclipse Parallel Tools Platform (PTP) можно почитать тут.

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

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

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.
5. Добавить быстрые кнопки на русской раскладке. Меню Window — Preferences — General — Editors — Keys. Скопировать пункты «Copy», «Cut», «Paste» и в поле Binding добавить свою комбинацию

Примечания


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

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

Отладка

UPDATE: Berkeley Unified Parallel C (UPC). Отладка с помощью GNU gdb C debbuger. Стек вызова

Благодарю за внимание! Надеюсь, кому-нибудь пригодится
Tags:
Hubs:
+17
Comments 2
Comments Comments 2

Articles