Организация параллельных вычислений в цикле
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Организация параллельных вычислений в цикле
Организация параллельных вычислений в цикле
Как говорится "век живи, век учись"....
Никогда раньше не задавался целью разобраться с подобным вопросом, но видимо время пришло.
И сразу возник ряд вопросов.
Сделал небольшой пример, так как не привык верить наслово: так что каждый желающий может попробовать.
По логике, прирост должен быть в случае наличия нескольких ядер процессора.
При чем, если выполнять разбиение на количество параллельных процессов равное количеству ядер на борту, быстродействие должно быть максимальным.
Но получается не совсем так: Получается совсем не логично, т.е. в один поток выполняется медленнее чем в два.
Если при 2-х ядрах это понятно, то для одного нет.
Если предположить, что в два потока процессор загружается более плотно, нежели в один и за счет этого имеем выигрыш. То почему этого не происходит на четырех потоках или на 2-х ядерном и четырех потоках?
Еще не понятно, если необходимо изменить количество потоков в зависимости от конфигурации или ситуации, как это сделать. Т.е. этот вариант не прокатывает, вообще ничего не считается: получается только так сконфигурировать: --------------
1. Кто-нибудь может объяснить в чем дело.
2. Не имею доступа к 4-х ядерному компу, хотелось бы посмотреть результаты прогонов.
Как говорится "век живи, век учись"....
Никогда раньше не задавался целью разобраться с подобным вопросом, но видимо время пришло.
И сразу возник ряд вопросов.
Сделал небольшой пример, так как не привык верить наслово: так что каждый желающий может попробовать.
По логике, прирост должен быть в случае наличия нескольких ядер процессора.
При чем, если выполнять разбиение на количество параллельных процессов равное количеству ядер на борту, быстродействие должно быть максимальным.
Но получается не совсем так: Получается совсем не логично, т.е. в один поток выполняется медленнее чем в два.
Если при 2-х ядрах это понятно, то для одного нет.
Если предположить, что в два потока процессор загружается более плотно, нежели в один и за счет этого имеем выигрыш. То почему этого не происходит на четырех потоках или на 2-х ядерном и четырех потоках?
Еще не понятно, если необходимо изменить количество потоков в зависимости от конфигурации или ситуации, как это сделать. Т.е. этот вариант не прокатывает, вообще ничего не считается: получается только так сконфигурировать: --------------
1. Кто-нибудь может объяснить в чем дело.
2. Не имею доступа к 4-х ядерному компу, хотелось бы посмотреть результаты прогонов.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Организация параллельных вычислений в цикле
завтра на работе. у нас типа 8 ядер. попробую что получится
Добро пожаловать на http://rk-stud.ru/
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Организация параллельных вычислений в цикле
по ряду причин меня больше всего интересует 4-х ядерный процессорSergey Ivanov писал(а):завтра на работе. у нас типа 8 ядер. попробую что получится
но интересно будет все
а то возможность есть, а применения нет
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
Re: Организация параллельных вычислений в цикле
вот что дома получилось:
2 ядра (2,93 ггц)Добро пожаловать на http://rk-stud.ru/
-
- VIP
- Сообщения: 1338
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Организация параллельных вычислений в цикле
Это всё оттого, что в циклах "вычислений" вообще нет, а фактически есть просто работа с памятью. Так что меряются в основном временные задержки, которые находятся в обвязке цикла (а LabVIEW по качеству кодогенерации довольно убогий). Плюс к памяти обращаться в несколько потоков тоже не очень оптимально, посколько можно огрести кучу промахов кеша.Sergey Ivanov писал(а):вот что дома получилось:2 ядра (2,93 ггц)
Надо мерять хотя бы вот так:
На четырёх ядрах:
Четырёхкратное ускорение получить обычно не удаётся - четыре ядра это всё-таки не четыре компьютера.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Организация параллельных вычислений в цикле
Пример немного не удачный...
Но какая задачка, такой и пример
А почему у меня не получилось подключиться на вход "P"?
Точнее подключаюсь, но тогда цикл вообще не выполняется.
Но какая задачка, такой и пример
А почему у меня не получилось подключиться на вход "P"?
Точнее подключаюсь, но тогда цикл вообще не выполняется.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
- VIP
- Сообщения: 1338
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Организация параллельных вычислений в цикле
C чего это он не выполняется? Он как раз выполняется, об этом надо судить не по времени выполнения, а по результату.IvanLis писал(а): А почему у меня не получилось подключиться на вход "P"?
Точнее подключаюсь, но тогда цикл вообще не выполняется.
Константа на входе Р отключает напрочь режим отладки в цикле. По идее тоже самое должно происходить и без константы, однако не происходит. Возможно, маленький баг - тут надо ещё поковыряться.
Вообще все замеры времени выполнения надо производить с отключённым режимом отладки (ну и следить за сворачиванием констант и структур оптимизатором).
Если режим отладки отключить, то все три цикла будут выполняться за близкое к нулю время. ;)
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Организация параллельных вычислений в цикле
Действительно выполняетя!
Так что получается....
Если я на 100% уверен в коде который выполняетяся внутри цикла и хочу организовать вычисления быстро, то достаточно отключить режим отладки.
А для этого можно включить Enable loop iteration parallelism и даже если распараллелить вычисления не возможно по некоторым причинам, то подать на вход "P" значение "1" ???
Так что получается....
Если я на 100% уверен в коде который выполняетяся внутри цикла и хочу организовать вычисления быстро, то достаточно отключить режим отладки.
А для этого можно включить Enable loop iteration parallelism и даже если распараллелить вычисления не возможно по некоторым причинам, то подать на вход "P" значение "1" ???
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
Sergey Ivanov
- expert
- Сообщения: 1217
- Зарегистрирован: 01 мар 2009, 20:54
- Награды: 5
- Версия LabVIEW: 2018
- Откуда: Санкт-Петербург, Кронштадт
- Благодарил (а): 11 раз
- Поблагодарили: 1 раз
- Контактная информация:
-
- VIP
- Сообщения: 1338
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Организация параллельных вычислений в цикле
Не, не совсем так.IvanLis писал(а):Действительно выполняетя!
Так что получается....
Если я на 100% уверен в коде который выполняетяся внутри цикла и хочу организовать вычисления быстро, то достаточно отключить режим отладки.
А для этого можно включить Enable loop iteration parallelism и даже если распараллелить вычисления не возможно по некоторым причинам, то подать на вход "P" значение "1" ???
Во-первых, случаи, когда распараллелить вычисления невозможно "по некоторым причинам", но в то же время можно включить паралеллизм в LabVIEW - они довольно редкие (пример - коммуникация с прибором в цикле, которая должна выполняться строго последовательно).
Обычно же LabVIEW сразу замечает, что паралеллизм включить нельзя, так что подать "1" на вход просто не получится:
Кроме того, не стоит использовать параллелизм для включения или выключения отладки - это всё-таки разные сущности, не стоит их мешать.
А для отключения режима отладки для части кода надо этот код положить в SubVI, и вот там уже отключить режим отладки.
Ещё одна маленькая тонкость с этим терминалом: LabVIEW всегда использует меньшее из двух установок. Ну, к примеру, если в диалоговом окне для распараллеливания мы установили "2", а на терминал Р подали "4", то всё равно будет сгенерировано только два потока. Таким образом, в диалоговом окне следует устанавливать максимально возможное запланированное число потоков (это не значит, что там всегда надо "64" ставить, но если планируется использовать, скажем до 12 процессоров, то там надо 12 и выставить), и с помощью терминала Р можно уменьшить количество потоков. Количество процессоров, кстати, можно определить, вызвав CPU Information.
Кроме того, в учебнике написано, что могут быть следующие ситуации:
Если подключить -1, то количество потоков будет взято из диалогового окна (так и есть).
Если подключить 0 или оставить терминал не подключённым, то количество потоков будет определно динамически по количеству логических процессоров. На практике я вижу, что значение всё равно берётся из диалогового окна.
Если подключить 1 или больше, то количество потоков будет определяться меньшим из двух (так и есть).
- inmaze
- user
- Сообщения: 75
- Зарегистрирован: 21 сен 2011, 10:43
- Версия LabVIEW: 2011
- Откуда: Dresden/Germany
- Контактная информация:
Re: Организация параллельных вычислений в цикле
Господа, ответье, пожалуйста, на несколько вопросов поро режим отладтки.
Что это?
Его можно вкл/выкл для всего Vi? Если да, то как?
Что за вход такой Р в цикле? Он для версий старше какой существует?
Как включить его отображение (Р)?
Что это?
Его можно вкл/выкл для всего Vi? Если да, то как?
Что за вход такой Р в цикле? Он для версий старше какой существует?
Как включить его отображение (Р)?
-
- VIP
- Сообщения: 1338
- Зарегистрирован: 03 фев 2010, 00:42
- Награды: 6
- Версия LabVIEW: 6.1 - 2024
- Откуда: Германия
- Благодарил (а): 1 раз
- Поблагодарили: 44 раза
- Контактная информация:
Re: Организация параллельных вычислений в цикле
Режим отладки включён по умолчанию. Позволяет отслеживать значение на проводках пробниками и устанавливать точки останова.inmaze писал(а):Господа, ответье, пожалуйста, на несколько вопросов поро режим отладтки.
Что это?
Его можно вкл/выкл для всего Vi? Если да, то как?
Включается/выключается в свойствах прибора:
Незначительно замедляет исполнение кода в режиме разработки. При генерации исполняемого файла автоматом отключается.
Автораспараллеливание for циклов работает начиная с версии 2009:inmaze писал(а): Что за вход такой Р в цикле? Он для версий старше какой существует?
Как включить его отображение (Р)?
Improving Performance with Parallel For Loops
-
- user
- Сообщения: 70
- Зарегистрирован: 22 ноя 2017, 10:29
- Версия LabVIEW: 2019
- Откуда: Санкт-Петербург
- Поблагодарили: 2 раза
- Контактная информация:
Re: Организация параллельных вычислений в цикле
А что за такой вход C(chunk вроде) и для чего он нужен?
-
- professor
- Сообщения: 3409
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Организация параллельных вычислений в цикле
есть подозрение, что за шесть лет все выпали из контекста и не поймыт вопроса.K0sinus писал(а):А что за такой вход C(chunk вроде) и для чего он нужен?
Я точно не понял.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение