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

imageUnified Parallel C (UPC) — це розширення мови C, розроблене для високопродуктивних обчислень на великомасштабних паралельних машинах. Мова являє єдину програмну модель для систем із загальною і розподіленою пам'яттю. Кількість паралелізму фіксується на старті програми, зазвичай з одним потоком на ядро процесора.

» Офіційний сайт UPC
» Офіційний сайт Berkeley UPC
<habracut/>
Свого часу виникли певні труднощі з розгортанням 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)

2. Створити підкаталог build (C:\Programs\berkeley_upc-2.22.3\build)

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
----------------------+---------------------------------------------------------
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-вузол 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. Змонтувати у віртуальний привід, наприклад, DAEMON Tools Lite.

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

5. Налаштувати:
Загальні – Додатково: буфер і Dragn' ' Drop — двонаправлений
Система – Процесор: процесори – всі ядра, обмеження 90% (інакше основна система перестане реагувати при інтенсивному навантаженні).
Дисплей – Екран: відеопам'ять 96 Мб
Мережа – мережевий міст.
6. Запустити віртуальну машину. Вибрати пункт Install ROSA Desktop, слідувати підказкам системи. Перші враження позитивні.

Установка в середовищі Linux
Підготовка середовища

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

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

1. Завантажити 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-вузол 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, 0 of process 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, 0 of process 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. Досить розпакувати з архіву for Eclipse 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.

Примітки
Використання

Багато вбудованого мануала:
man upcc
man upcrun

Налагодження

Рекомендується використовувати налагодження за допомогою програми TotalView, але якщо її немає, то можна скористатися звичайним відладчиком, детальніше тут.

Дякую за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.