Russian Qt Forum
Ноябрь 22, 2024, 21:26
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Многопоточное программирование, процессы
>
Многопоточная обработка массива
Страниц:
1
...
3
4
[
5
]
6
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Многопоточная обработка массива (Прочитано 42536 раз)
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #60 :
Февраль 20, 2015, 17:17 »
Цитата: __Heaven__ от Декабрь 02, 2014, 12:27
Что у нас происходит на первом цикле, что параллельное вычисление слабее скалярного?
Цитата: Old от Декабрь 02, 2014, 12:31
Запускает рабочие потоки.
Как запустить потоки на этапе запуска приложения, а не открытия файла?
Цитата: Igors от Декабрь 02, 2014, 14:23
Можете попробовать intel реализацию - для мелких задач она дает гораздо больший КПД
Это бесплатно? Ссылочкой поделитесь?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Многопоточная обработка массива
«
Ответ #61 :
Февраль 20, 2015, 18:19 »
Цитата: __Heaven__ от Февраль 20, 2015, 17:17
Как запустить потоки на этапе запуска приложения, а не открытия файла?
Они и запускаются при вызове omp_init, обычно на старте приложения. Если истекло "время прокрутки" они усыпляются на "честном" мутексе, новая задача потребует их пробуждения. Хотя время прокрутки устанавливать можно, в этом обычно нет смысла, оно по умолчанию велико (доли секунды).
Цитата: Igors от Декабрь 02, 2014, 14:23
Это бесплатно? Ссылочкой поделитесь?
Да. бесплатно. Ссылку не помню - но из исходников я ее не собирал, гуглите intel openmp.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #62 :
Февраль 20, 2015, 22:04 »
Я не хочу, чтобы они усыплялись. Пользователь может открыть приложение и не предпринимать действий с участием openmp. Если я установлю это время прокрутки на бесконечность, что я потеряю?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Многопоточная обработка массива
«
Ответ #63 :
Февраль 21, 2015, 10:59 »
Цитата: __Heaven__ от Февраль 20, 2015, 22:04
Я не хочу, чтобы они усыплялись. Пользователь может открыть приложение и не предпринимать действий с участием openmp. Если я установлю это время прокрутки на бесконечность, что я потеряю?
Не знаю можно ли "бесконечность", но в этом ничего хорошего нет, будет жраться процессорное время впустую. Т.е. получите капитальный тормоз, даже для др приложений.
Попытки выжать что-то для слишком мелких "кластеров" (задач) бесплодны, независимо от того какая техника применяется. Тщательнее выбирайте предмет распараллеливания - и все будет норм
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #64 :
Февраль 21, 2015, 11:37 »
Спасибо. Предмет я уже выбрал.
Я думал, что инициализация потоков это нечто болтающееся в памяти и ожидающее своего выхода, но не жрущее процессор.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Многопоточная обработка массива
«
Ответ #65 :
Февраль 21, 2015, 11:39 »
Цитата: __Heaven__ от Февраль 21, 2015, 11:37
Спасибо. Предмет я уже выбрал.
Я думал, что инициализация потоков это нечто болтающееся в памяти и ожидающее своего выхода, но не жрущее процессор.
Так и есть, рабочие нитки при отсутствии работы уснут и не будут есть процессор. Но вы не хотите что бы они засыпали. Почему то.
«
Последнее редактирование: Февраль 21, 2015, 11:42 от Old
»
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #66 :
Февраль 21, 2015, 15:20 »
Запутался...
В какой момент нитки создаются, а в какой пробуждаются?
у меня есть в коде только #pragma omp parallel for. Я так понял, что потоки создаются при первом проходе по этому участку. При последующих проходах потоки уже просто просыпаются. Так вот я не хочу тратить время на первом проходе на их создание. Хочу создавать при запуске приложения, а пробуждать по запросу пользователя.
Или я чего-то не понимаю?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Многопоточная обработка массива
«
Ответ #67 :
Февраль 21, 2015, 15:38 »
Попробуйте использовать omp_init в начале программы, или запустить фейковый параллельный цикл, просто для запуска потоков.
«
Последнее редактирование: Февраль 21, 2015, 15:51 от Old
»
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #68 :
Февраль 21, 2015, 16:03 »
не понимаю, что за omp_init, как его прописывать.
В документации нет такого сочетания. Подскажите кодом, пожалуйста
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Многопоточная обработка массива
«
Ответ #69 :
Февраль 21, 2015, 17:40 »
Цитата: __Heaven__ от Февраль 21, 2015, 16:03
не понимаю, что за omp_init, как его прописывать.
В документации нет такого сочетания. Подскажите кодом, пожалуйста
Как я понял, такая функция есть в реализации стандарта от intel.
Если в вашей реализации нет такой функции (в моей например нет), то я бы предложил создать простой цикл в начале программы, который и распараллелить с помощью openmp, тогда для него будут созданы рабочие потоки.
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #70 :
Февраль 21, 2015, 18:10 »
Код:
#pragma omp parallel for
for (;false;);
Это запустит 4 потока, если у меня 4 ядра?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Многопоточная обработка массива
«
Ответ #71 :
Февраль 21, 2015, 18:17 »
Цитата: __Heaven__ от Февраль 21, 2015, 18:10
Код:
#pragma omp parallel for
for (;false;);
Это запустит 4 потока, если у меня 4 ядра?
Ну если это оптимизатор совсем не выкинет...
Посчитайте несколько синусов в зависимости от времени и инициализируйте этим значением генератор случайных чисел, например.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Многопоточная обработка массива
«
Ответ #72 :
Февраль 21, 2015, 18:42 »
Цитата: __Heaven__ от Февраль 21, 2015, 18:10
Код:
#pragma omp parallel for
for (;false;);
Это запустит 4 потока, если у меня 4 ядра?
Это не откомпилируется т.к. счетчик цикла должен быть известен OpenMP. По умолчанию задействуются все ядра. Главная нитка тоже "в бригаде" (что имеет свои минусы и плюсы). Число ниток можно установить с помощью omp_set_num_threads (хедер-то откройте)
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Многопоточная обработка массива
«
Ответ #73 :
Февраль 21, 2015, 19:46 »
Да, действительно, не компилируется.
Написал:
Код:
#pragma omp parallel for
for (int i = 0; i < 1; ++i);
В хэдере я видел что имеется. Интересовало значение по умолчанию.
Спасибо.
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Многопоточная обработка массива
«
Ответ #74 :
Февраль 21, 2015, 21:28 »
Кстатии, читал недавно, что OpenMP и с итераторами в циклах может работать.. Круто..
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Страниц:
1
...
3
4
[
5
]
6
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...