Ник:
Пароль:

Контакты

Cтатус Skype: starterkit.ru
тел.: (+7 3412) 478-448
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
E-mail: info@starterkit.ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
buildroot и openmp
ask2000
Добавлено 21.05.2018 11:21
0
Сообщение: 1
ask2000
0

Пункты: 2598
Регистрация: 10.08.2016
Здравствуйте коллеги.
Нужна библиотека libgomp.so, но в сборке билдрута ее не нашел. Вроде она есть в проекте Yocto, но может есть путь попроще, чем разбираться с Yocto?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 21.05.2018 12:21 Сообщение: 2
sasamy
4.77

Пункты: 64519
Регистрация: 14.08.2009
Цитата

Нужна библиотека libgomp.so, но в сборке билдрута ее не нашел.


В дефолтных конфигах используется готовый компилятор linaro toolchain - это сильно экономит время на сборку и эти бинарники протестированы но он собран без поддержки openmp. Можете собрать кросскомпилятор в самом buildroot с включенной поодержкой openmp

toolchain ->
[*] Enable compiler OpenMP support
Спуститься к концу Подняться к началу
Персональная информация
ask2000
Добавлено 21.05.2018 14:28 Сообщение: 3
ask2000
0

Пункты: 2598
Регистрация: 10.08.2016
Опцию включил, либа появилась.
Но тестовая программа вылетает с ошибкой "Segmentation fault"
Может еще чего не хватает?
Кто нибудь делал такое?

[hide]
Код
#include <stdio.h>
#include <omp.h>

int main(){
int x;
x = 2;
printf("Example 2\n");
#pragma omp parallel num_threads(2) shared(x)
{
if (omp_get_thread_num() == 0) {
x = 5;
} else {
/* Print 1: the following read of x has a race */
printf("1: Thread# %d: x = %d\n", omp_get_thread_num(),x );
}
#pragma omp barrier
if (omp_get_thread_num() == 0) {
/* Print 2 */
printf("2: Thread# %d: x = %d\n", omp_get_thread_num(),x );
} else {
/* Print 3 */
printf("3: Thread# %d: x = %d\n", omp_get_thread_num(),x );
}
}
return 0;
}
[/hide]
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 22.05.2018 12:03 Редактировалось 22.05.2018 12:07 Сообщение: 4
sasamy
4.77

Пункты: 64519
Регистрация: 14.08.2009
Цитата

Может еще чего не хватает?


тут архив с вашим тестом

https://yadi.sk/d/L_ff694Y3WLSrs

и конфигом buildroot

http://www.starterkit.ru/html/index.php?name=forum&op=view&id=28554

конфиг минимальный, в компиляторе включен только C - если нужен С++ включите галочку в меню toolchain, насчет фортрана не уверен - есть ли для него поддержка openmp в этой версии gcc. В меню загрузчика плата SK-IMX6Q - я на ней проверял

Тест собирать например так

make BRDIR=/home/user/buildroot-2017.08-sk

BRDIR должна содержать путь к собранному buildroot на вашей системе.

запуск

# ./tst
Example 2
2: Thread# 0: x = 5
Спуститься к концу Подняться к началу
Персональная информация
ask2000
Добавлено 22.05.2018 15:53 Сообщение: 5
ask2000
0

Пункты: 2598
Регистрация: 10.08.2016
Спасибо. Все работает.
Еще тесты для openMP Tutorials
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux