|
0 / 0 / 1
Регистрация: 16.07.2015
Сообщений: 28
|
||||||
Распараллеливание циклов02.02.2018, 12:35. Показов 5547. Ответов 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 распараллеливание
Распараллеливание программы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|