- PVSM.RU - https://www.pvsm.ru -
Unified Parallel C (UPC) — это расширение языка C, разработанное для высокопроизводительных вычислений на крупномасштабных параллельных машинах. Язык представляет единую программную модель для систем с общей и разделенной памятью. Количество параллелизма фиксируется на старте программы, обычно с одним потоком на ядро процессора.
» Официальный сайт UPC [1]
» Официальный сайт Berkeley UPC [2]
В своё время возникли определенные трудности с разворачиванием UPC и отсутствием каких-либо подсказок по первым шагам ни в русскоязычном, ни в англоязычном сегменте интернета, кроме официальной инструкции INSTALL.TXT [3], которую пришлось переваривать.
Чтобы сей опыт не пропал даром, я решил написать статью по установке UPC в различных средах.
В случае возникновения трудностей или вопросов можно обратиться к создателям за технической поддержкой [4]. Отвечают довольно быстро (с учетом того, что находятся на другой стороне планеты). Большая благодарность Paul Hargrove и Dan Bonachea за то, что помогли во всём этом разобраться.
Подготовка среды
В основном 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 можно установить виртуальную машину
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, следовать подсказкам системы. Первые впечатления положительные.
Подготовка среды
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 имеется поддержка языка 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
Нажмите здесь для печати.