Russian Qt Forum
Ноябрь 26, 2024, 08:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Многопоточная обработка массива  (Прочитано 42656 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #60 : Февраль 20, 2015, 17:17 »

Что у нас происходит на первом цикле, что параллельное вычисление слабее скалярного?
Запускает рабочие потоки.
Как запустить потоки на этапе запуска приложения, а не открытия файла?

Можете попробовать intel реализацию - для мелких задач она дает гораздо больший КПД
Это бесплатно? Ссылочкой поделитесь?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #61 : Февраль 20, 2015, 18:19 »

Как запустить потоки на этапе запуска приложения, а не открытия файла?
Они и запускаются при вызове omp_init, обычно на старте приложения. Если истекло "время прокрутки" они усыпляются на "честном" мутексе, новая задача потребует их пробуждения. Хотя время прокрутки устанавливать можно, в этом обычно нет смысла, оно по умолчанию велико (доли секунды). 

Это бесплатно? Ссылочкой поделитесь?
Да. бесплатно. Ссылку не помню - но из исходников я ее не собирал, гуглите intel openmp.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #62 : Февраль 20, 2015, 22:04 »

Я не хочу, чтобы они усыплялись. Пользователь может открыть приложение и не предпринимать действий с участием openmp. Если я установлю это время прокрутки на бесконечность, что я потеряю?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #63 : Февраль 21, 2015, 10:59 »

Я не хочу, чтобы они усыплялись. Пользователь может открыть приложение и не предпринимать действий с участием openmp. Если я установлю это время прокрутки на бесконечность, что я потеряю?
Не знаю можно ли "бесконечность", но в этом ничего хорошего нет, будет жраться процессорное время впустую. Т.е. получите капитальный тормоз, даже для др приложений.

Попытки выжать что-то для слишком мелких "кластеров" (задач) бесплодны, независимо от того какая техника применяется. Тщательнее выбирайте предмет распараллеливания - и все будет норм
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #64 : Февраль 21, 2015, 11:37 »

Спасибо. Предмет я уже выбрал.
Я думал, что инициализация потоков это нечто болтающееся в памяти и ожидающее своего выхода, но не жрущее процессор.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #65 : Февраль 21, 2015, 11:39 »

Спасибо. Предмет я уже выбрал.
Я думал, что инициализация потоков это нечто болтающееся в памяти и ожидающее своего выхода, но не жрущее процессор.
Так и есть, рабочие нитки при отсутствии работы уснут и не будут есть процессор. Но вы не хотите что бы они засыпали. Почему то. Улыбающийся
« Последнее редактирование: Февраль 21, 2015, 11:42 от Old » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #66 : Февраль 21, 2015, 15:20 »

Запутался...
В какой момент нитки создаются, а в какой пробуждаются?
у меня есть в коде только #pragma omp parallel for. Я так понял, что потоки создаются при первом проходе по этому участку. При последующих проходах потоки уже просто просыпаются. Так вот я не хочу тратить время на первом проходе на их создание. Хочу создавать при запуске приложения, а пробуждать по запросу пользователя.
Или я чего-то не понимаю?
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #67 : Февраль 21, 2015, 15:38 »

Попробуйте использовать omp_init в начале программы, или запустить фейковый параллельный цикл, просто для запуска потоков.
« Последнее редактирование: Февраль 21, 2015, 15:51 от Old » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #68 : Февраль 21, 2015, 16:03 »

не понимаю, что за omp_init, как его прописывать.
В документации нет такого сочетания. Подскажите кодом, пожалуйста
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #69 : Февраль 21, 2015, 17:40 »

не понимаю, что за omp_init, как его прописывать.
В документации нет такого сочетания. Подскажите кодом, пожалуйста
Как я понял, такая функция есть в реализации стандарта от intel.
Если в вашей реализации нет такой функции (в моей например нет), то я бы предложил создать простой цикл в начале программы, который и распараллелить с помощью openmp, тогда для него будут созданы рабочие потоки.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #70 : Февраль 21, 2015, 18:10 »

Код:
#pragma omp parallel for
for (;false;);

Это запустит 4 потока, если у меня 4 ядра?
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #71 : Февраль 21, 2015, 18:17 »

Код:
#pragma omp parallel for
for (;false;);

Это запустит 4 потока, если у меня 4 ядра?
Ну если это оптимизатор совсем не выкинет... Улыбающийся
Посчитайте несколько синусов в зависимости от времени и инициализируйте этим значением генератор случайных чисел, например. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #72 : Февраль 21, 2015, 18:42 »

Код:
#pragma omp parallel for
for (;false;);

Это запустит 4 потока, если у меня 4 ядра?
Это не откомпилируется т.к. счетчик цикла должен быть известен OpenMP. По умолчанию задействуются все ядра. Главная нитка тоже "в бригаде" (что имеет свои минусы и плюсы). Число ниток можно установить с помощью omp_set_num_threads (хедер-то откройте)
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #73 : Февраль 21, 2015, 19:46 »

Да, действительно, не компилируется.
Написал:
Код:
    #pragma omp parallel for
    for (int i = 0; i < 1; ++i);
В хэдере я видел что имеется. Интересовало значение по умолчанию.

Спасибо.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #74 : Февраль 21, 2015, 21:28 »

Кстатии, читал недавно, что OpenMP и с итераторами в циклах может работать.. Круто.. 
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.127 секунд. Запросов: 23.