|
0 / 0 / 1
Регистрация: 16.07.2015
Сообщений: 28
|
||||||
Распараллеливание циклов02.02.2018, 12:35. Показов 5616. Ответов 14
Метки нет (Все метки)
Есть такой цикл
В настоящее время пытаюсь проделать это в OPenMP и компилятор жалуется на переменную цикла. Эта переменная почему-то отказывается приводиться к другим типам. Какие мысли имеются?
0
|
||||||
| 02.02.2018, 12:35 | |
|
Ответы с готовыми решениями:
14
Распараллеливание циклов Распараллеливание циклов Распараллеливание циклов с использованием OpenMP C++ |
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 02.02.2018, 20:53 | ||
|
И то, когда сделаешь с вектором, как собираешься "глушить" потоки, которые придут вторыми/третьими? А то ж они будут честно проходить свои куски массивов до конца, и их придётся ждать для корректного завершения.
0
|
||
|
║XLR8║
|
|
| 02.02.2018, 21:11 | |
|
https://www.youtube.com/playli... 5X2utwnoEG прикольный плей лист
0
|
|
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||||||
| 02.02.2018, 21:22 | |||||||
0
|
|||||||
|
║XLR8║
|
|||||||
| 03.02.2018, 01:38 | |||||||
|
Zlobnyj_Prapor, TRam_, если делать цыкл указанный в вопросе на OpenMP эффективно, должно быть что-то такое (на итераторах, к сожалению, не добился работы)
И да, break использовать нельзя... Вообще, если у тебя в цыкле есть зависимости от предыдущей итерации, его нельза разпаралелить.
0
|
|||||||
| 03.02.2018, 01:58 | |
|
0
|
|
|
║XLR8║
|
||||||
| 03.02.2018, 03:53 | ||||||
|
Zlobnyj_Prapor, gray_fox оказался прав, жаль лайк не поставить...
0
|
||||||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||
| 03.02.2018, 04:41 | ||
|
delete
Добавлено через 22 минуты
0
|
||
|
║XLR8║
|
|||||||
| 03.02.2018, 05:28 | |||||||
|
Можно даже использовать тотже код, что предоставляет ТС в первом посте. Просто обернуть его в функцию и вызывать на поддиапазонах нужного вектора. В худшем случае надо проходить N, а разпарелеливая, мы худший случай делим на количество потоков, что не O(1), конечно, но всё равно приятно. Вообще, для эффективного алгоритма надо знать больше о решаемой задаче и, вероятно, сделать свою структуру данных. Добавлено через 17 минут gray_fox,
0
|
|||||||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||||||||
| 03.02.2018, 05:39 | ||||||||
0
|
||||||||
|
|
||||||
| 03.02.2018, 11:33 | ||||||
|
Как верно подмечено необходимость делить список между потоками O(n) отъедает время, и тут вопрос в том где лежат искомые данные. Если искомое в последнем узле списка расклад такой (потоки - время):
4 - 1100; 3 - 1330; 2 - 1800; 1 - 3140, а если в первом узле списка то: 4 - 199; 3 - 265; 2 - 201; 1 - 2.
1
|
||||||
|
0 / 0 / 1
Регистрация: 16.07.2015
Сообщений: 28
|
|
| 03.02.2018, 18:37 [ТС] | |
|
Всем спасибо за помощь. Собственно список _paramsFFT содержал не просто тип int а структуры. И итератор был в цикле просто проходил по всем структурам списка paramsFFT и проверял структуры списка paramsFFT на соответствие ключевым параметрам. Вышел я из положения следующим образом: сначала по коду посчитал, сколько максимум структур может оказаться в списке paramsFFT и переделал переменную цикла в int. А чтобы избавиться от break добавил вместо него изменение переменной цикла таким образом чтобы условие цикла стало неверно. Вот что получилось:
iter = _paramsFFT.begin(); for(int i = 0; i< 16; i++) { if ((*iter).isign != fft_ward) { ++iter; continue; } if ((*iter).length != mas.size()) { ++iter; continue; } isGo = true; i = 16; } В принципе можно и убрать, i = 16; ведь 8 потоков быстрее чем один выполнят подобный цикл, но я оставил так.
0
|
|
|
║XLR8║
|
||
| 03.02.2018, 21:39 | ||
|
Если у тебя "i" в стеке потока, остальные потоки продолжат лопатить свои куски массива. igorrr37 показал портируемый пример с ручным управлением потоками и с использованием ::std::list. Я как раз хотел разобрать как оно всё работает, так как с потоками в STL я еще не сталкивался, но очень похоже на pthread. Добавлено через 6 минут igorrr37, хотел спросить: как сильно использование ::std::atomic на каждой итерации бьет по производительности? Ведь чем больше потоков, тем больше они должны ожидать пока атомик станет доступным. Объясните, пожалуйста.
0
|
||
|
|
|
| 04.02.2018, 02:35 | |
|
outoftime, если искомая величина находится в последнем узле списка и использовать атомик то результаты:
4 - 1110; 1 - 3140; 8 - 1130 а если атомик заменить на простой bool то: 4 - 960, 1 - 2530; 8 - 950
0
|
|
|
║XLR8║
|
|
| 04.02.2018, 04:06 | |
|
igorrr37, на сколько я понял с доки по atomic он использует локи, что значит, остальные потоки будут ждать. И если мы говорим о паралельных вычислениях, то лочить выполнение на каждой итерации цыкла неприемлимо (я не говорю о случае когда искомый элемент первый). Еще, в отличии от OpenMP я не нашел информации о том какая стратегия применяеся в STL когда потоку нужно ждать освобождения лока.
0
|
|
| 04.02.2018, 04:06 | |
|
Помогаю со студенческими работами здесь
15
OpenIM - не работает распараллеливание циклов Распараллеливание циклов с ипользованием OpenMP распараллеливание
Распараллеливание программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
|