21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|||||||||||
1 | |||||||||||
Распараллеливание17.01.2020, 17:05. Показов 8648. Ответов 100
Метки нет Все метки)
(
Подскажите, что не так. Есть массив из 13 элементов, мне нужно разбить на три блока, один блок может быть неполный. При этом чтоб была обработка размера последнего блока. И получит сумму каждого блока. Если запускаю без распараллеливания, то все считается правильно. Когда начинаю параллелить на уровне блока for, то программа постоянно выдаёт мусор. В чем проблема может быть, вроде все правильно...
Ну вот мне удалось с помощью остановки потока ![]() Добавлено через 19 секунд Но не знаю насколько это правильно или корректно Добавлено через 3 минуты
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
17.01.2020, 17:05 | |
Ответы с готовыми решениями:
100
распараллеливание Распараллеливание циклов Распараллеливание вычислений |
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
|
|
17.01.2020, 17:35 | 2 |
1
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||||||
17.01.2020, 18:24 | 3 | ||||||||||
Толко это последовательно получилось.
Попробуй сделать size локальным для потока
Либо
1
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
17.01.2020, 22:27 [ТС] | 4 |
БедолагаЖека, банальная опечатка. Понятно, что *res=temp;
![]() Добавлено через 7 минут oleg-m1973, а есть ли возможность вывести как-нибудь информацию о запущенных потоках? Ведь потоки должны маркироваться или иметь ID?
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||||||||||
17.01.2020, 22:34 | 5 | ||||||||||
0
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
17.01.2020, 22:48 [ТС] | 6 |
oleg-m1973, вы правы, все последовательно реализовывается... Да уже проверил потоки и все запускается в одном потоке...
Добавлено через 2 минуты oleg-m1973, я в настройках проекта не включил многопоточность. У меня там openmp не включён был ![]() Добавлено через 15 секунд oleg-m1973, я в настройках проекта не включил многопоточность. У меня там openmp не включён был ![]()
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
17.01.2020, 22:52 | 7 |
И при этом первый вариант не работал?
Добавлено через 1 минуту https://www.cyberforum.ru/cpp-... st14163013 Добавлено через 10 секунд https://www.cyberforum.ru/cpp-... st14163013
0
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
17.01.2020, 23:03 [ТС] | 8 |
oleg-m1973, я немного видоизменили private добавил ещё индекс i.
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
17.01.2020, 23:05 | 9 |
0
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
18.01.2020, 05:37 [ТС] | 10 |
oleg-m1973, это он настолько самостоятельный?
![]()
0
|
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
|
|
18.01.2020, 13:15 | 11 |
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
18.01.2020, 15:37 | 12 |
Ну а как ты сам думаешь, что просто написав слово #pragma ты всё круто распареллелил?
Попробуй написать это распараллеливание сам, без openmp, быстро поймёшь, насколько он самостоятельный.
1
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
24.01.2020, 22:51 [ТС] | 13 |
oleg-m1973, а не подскажите как реализовать разбиение на блоки, чтоб потом результаты склеивались в один блок и в итоге получилось одно число....
есть массив [57, 907, 65, 1 , 6 , 90, 76, 89, 90, 43, 51, 1234, 6431, 809, 9076, 890]. Его разбивать на блоки длины 3. в блоке находить максимум, дальше максимальные числа склеивать. 57, 907, 65 - 907 1,6,90 - 90 76,89,90 - 90 и так далее... 907,90,90 - 907 Как это лучше реализовать?
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||||
25.01.2020, 16:08 | 14 | |||||
![]() Решение
На openmp, к сожалению, не знаю.
На обычных потоках что-то типа (не проверял)
1
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
25.01.2020, 20:26 [ТС] | 15 |
oleg-m1973, просто трудно даются потоки) А точнее поточное программирование и распараллеливание))) Но от души спасибо))
![]()
0
|
0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 17
|
|
15.03.2020, 16:20 | 16 |
Добрый день. Использовал OpenMP в VC2010. Попытался перейти на VC2019. При отладке консольного приложения с включенной опцией "Поддержка Open MP" появляется ошибка такого вида:
Ошибка C2338 двухэтапный поиск имен не поддерживается для C++/CLI, C++/CX или OpenMP. Используйте /Zc:twoPhase- Proba_OMP_3 Подскажите, пожалуйста, в чем можеть быть причина этого. Спасибо.
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
15.03.2020, 16:32 | 17 |
/Zc:twoPhase пробовал использовать?
А скорее всего - проект криво создал (или был кривой до этого)
0
|
21 / 19 / 6
Регистрация: 25.11.2017
Сообщений: 708
|
|
15.03.2020, 16:43 [ТС] | 18 |
abakankmf, попробуй полностью пустой проект создать. И потом уже в настройках проекта выбери язык с++, и либу с OMP подключай. И все должно работать:-)
0
|
0 / 0 / 0
Регистрация: 02.06.2015
Сообщений: 17
|
|
15.03.2020, 17:49 | 19 |
Пробовал по-разному: и пустой создал, и на основе шаблона консольного приложения. Совершенно пустой проект,
даже не обращаюсь к функциям OpenMP, все равно появляется эта ошибка. А как использовать /Zc:twoPhase пробовал использовать?
0
|
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
15.03.2020, 17:54 | 20 |
0
|
15.03.2020, 17:54 | |
Помогаю со студенческими работами здесь
20
Распараллеливание программы Распараллеливание вычислений Странное распараллеливание Распараллеливание циклов Распараллеливание цикла Распараллеливание циклов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |