Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, господа! имеется код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. функция update работает в главном потоке и вызывается много раз в секунду. при этом 1 ядро процессора загружается полностью, а остальные - почти не работают. handleNode можно вынести в отдельные потоки. Достаточно ли этого чтобы распределить нагрузку по ядрам?(я думаю что нет) Как построить работу с потоками чтобы эффективно распределить нагрузку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2016, 22:31 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016Достаточно ли этого чтобы распределить нагрузку по ядрам? Да, достаточно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2016, 22:37 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016 handleNode можно вынести в отдельные потоки. Достаточно ли этого чтобы распределить нагрузку по ядрам?(я думаю что нет) да, достаточно. Кое-кто-2016Как построить работу с потоками чтобы эффективно распределить нагрузку? эффективно -- лучше создать столько потоков, сколько есть на машине ядер, и распределить задачи максимально равномерно по этим протокам, и отработать в каждом потоке по несколько задач последовательно. например, если есть 100 задач и 4 процесса, то лучше запускать 4 потока по 25 задач, чем 100 потоков по одной задаче, или 50 потоков по 2. это естественно в теории, при условии 100% использовании CPU при работе одной задачи, если например половину времени задача висит на IO, то вместо 4 рабочих потоков можно создать в 2 раза больше потоков, т. е. 8. Принцип - чтобы загрузка CPU была бы максимальной, как можно ближе к 100%. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2016, 23:33 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
а компиляторы не могут сами распараллеливать такие циклы, вроде как это называлось раскручивание стека Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 07:03 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. handleNode можно вынести в отдельные потоки. Достаточно ли этого чтобы распределить нагрузку по ядрам?(я думаю что нет) Как построить работу с потоками чтобы эффективно распределить нагрузку? Тут - много неизвестных. Чтобы функцию параллелить надо чтобы она была "пригожая" для параллельности. К примеру гарантировать чтобы ее клон не создавал взаимных блокировок. И кроме того формула производительности не всегда линейно связана с количеством процессов(потоков). Если внутри функции используется некий ресурс-лузер то иногда эффект может быть даже обратным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 09:02 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Cпасибо, А как обрабатывать время простоя для потоков? когда они не обрабатывают ноды, они простаивают без работы - это примерно 50%~80% всего времени. Что использовать: suspend thread, wait for signal, или что-то другое? Быстродействие критично, 0.001 сек - это уже много(на обычных пк). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 10:35 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
maytonКое-кто-2016 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. handleNode можно вынести в отдельные потоки. Достаточно ли этого чтобы распределить нагрузку по ядрам?(я думаю что нет) Как построить работу с потоками чтобы эффективно распределить нагрузку? Тут - много неизвестных. Чтобы функцию параллелить надо чтобы она была "пригожая" для параллельности. - это дано. В функции используется несколько констант из общей статической области, остальные данные - никак не пересеваются. maytonИ кроме того формула производительности не всегда линейно связана с количеством процессов(потоков) да, но это всяко лучше, чем обрабатывать на 1 ядре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 10:40 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
OpenMP parallel_for c++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 10:48 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
А сколько раз вызывается update() и чему равно nodes.size() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 10:53 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Где-то в степиа компиляторы не могут сами распараллеливать такие циклы, вроде как это называлось раскручивание стека Код: plaintext 1. 2. 3. 4. 5. 6. 7. нет, раскручивание стека - это совсем о другом. о автоматическом распараллеливании нужно сказать следующее: средства такие есть, но они не входят в состав компиляторов, это библиотека и расширение языка OMP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 10:58 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
maytonА сколько раз вызывается update() и чему равно nodes.size() ? update() вызывается ~ 100 раз в секунду nodes.size() - константа, но в зависимости от настроек программы ~ [20;70] целевые машины 2-4 ядра по ~2.5-3.3 MHz ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 11:00 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016Cпасибо, А как обрабатывать время простоя для потоков? когда они не обрабатывают ноды, они простаивают без работы - это примерно 50%~80% всего времени. Что использовать: suspend thread, wait for signal, или что-то другое? Быстродействие критично, 0.001 сек - это уже много(на обычных пк). я же писал, запускать больше рабочих потоков. а времени простоя у потока просто напросто не должно быть, есть ему что делать - должен работать, Нет - заканчиваться. либо он что-то делает, либо ожидает IO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 11:08 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016update() вызывается ~ 100 раз в секунду nodes.size() - константа, но в зависимости от настроек программы ~ [20;70] целевые машины 2-4 ядра по ~2.5-3.3 MHz ОК. А что на них? Windows? Linux? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 11:14 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
maytonКое-кто-2016update() вызывается ~ 100 раз в секунду nodes.size() - константа, но в зависимости от настроек программы ~ [20;70] целевые машины 2-4 ядра по ~2.5-3.3 MHz ОК. А что на них? Windows? Linux? Windows xp-10, архитектура проекта: x86 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 11:22 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
MasterZivКое-кто-2016Cпасибо, А как обрабатывать время простоя для потоков? когда они не обрабатывают ноды, они простаивают без работы - это примерно 50%~80% всего времени. Что использовать: suspend thread, wait for signal, или что-то другое? Быстродействие критично, 0.001 сек - это уже много(на обычных пк). я же писал, запускать больше рабочих потоков. а времени простоя у потока просто напросто не должно быть, есть ему что делать - должен работать, Нет - заканчиваться. либо он что-то делает, либо ожидает IO. создавать новые потоки для обработки задач ок, я вас понял, Благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 11:27 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
SiemarglOpenMP parallel_for c++ по идее, самое простое решение. Обязательно попробую, Благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 11:37 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
MasterZivлибо он что-то делает, либо ожидает IO. Не обязательно IO в чистом виде. Поток может ожидать на спинлупе , это сейчас модно. или висеть на запросе подклчения участка памяти памяти в адресное пространство процесса. В *nix системах подобного рода ожидания можно помотиторить командой vmstat ( вторая колонка отличная от нуля) это значит, что шадулер выделил контекст выполнения , но в силу перехода процесса в ожидание возврата из неявного системного вызова процесс не выполняет полезной работы, он может ждать пока страницу его помяти поднимут со свопа или ожидать когда система отожмет страницы памяти у кеша файловой системы что бы выделить память процессу. приблизительно так .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 12:48 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016maytonпропущено... ОК. А что на них? Windows? Linux? Windows xp-10, архитектура проекта: x86 Попугаи производительности во многом будут зависеть от алгоритма , какими порциями изменяется память и как синхонизируются кеши ядер. Попыткой распаралелить вы можете ухудшить попугаи производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 13:03 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
авторНе обязательно IO в чистом виде. Да обязательно. авторПоток может ожидать на спинлупе , это сейчас модно. Нахрена ? Только потому, что модно ? авторили висеть на запросе подклчения участка памяти памяти в адресное пространство процесса. Это ввод-вывод. авторпроцесс не выполняет полезной работы, он может ждать пока страницу его помяти поднимут со свопа или ожидать когда система отожмет страницы памяти у кеша файловой системы что бы выделить память процессу. Это системные ожидания, это-то тут при чём? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 16:31 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Зря спорите. Пусть автор хоть что-то попробует и скажет результат. Пока неясно что за Стебелёк у него под-капотом. И разыграет-ли он удачно карту мультипоточности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 17:34 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
MasterZivавторНе обязательно IO в чистом виде. Да обязательно. авторПоток может ожидать на спинлупе , это сейчас модно. Нахрена ? Только потому, что модно ? авторили висеть на запросе подклчения участка памяти памяти в адресное пространство процесса. Это ввод-вывод. авторпроцесс не выполняет полезной работы, он может ждать пока страницу его помяти поднимут со свопа или ожидать когда система отожмет страницы памяти у кеша файловой системы что бы выделить память процессу. Это системные ожидания, это-то тут при чём? MasterZiv либо он что-то делает , либо ожидает IO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 17:37 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
maytonЗря спорите. Пусть автор хоть что-то попробует и скажет результат. Пока неясно что за Стебелёк у него под-капотом. И разыграет-ли он удачно карту мультипоточности. Если там действительно стебелек , то врядли .... Киллер фича Стебелека - работа с кешами процессора, именно на этом он получает свои бенчмарковые наносекунды В случае не попадания по кешам , это будет уже не стебелек :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2016, 18:01 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
MasterZiv, всё-таки получается , вы себе противоречите: Вы признаёте, что создание новых потоков влияет на производительность (даже при N~100) MasterZivнапример, если есть 100 задач и 4 процесса, то лучше запускать 4 потока по 25 задач, чем 100 потоков по одной задаче, или 50 потоков по 2. с другой стороны, вы настаиваете, что нужно создавать новые потоки при необходимости, а не использовать существующие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 21:20 |
|
||
|
Как распараллелить по ядрам
|
|||
|---|---|---|---|
|
#18+
Кое-кто-2016MasterZiv, всё-таки получается , вы себе противоречите: Вы признаёте, что создание новых потоков влияет на производительность (даже при N~100) MasterZivнапример, если есть 100 задач и 4 процесса, то лучше запускать 4 потока по 25 задач, чем 100 потоков по одной задаче, или 50 потоков по 2. с другой стороны, вы настаиваете, что нужно создавать новые потоки при необходимости, а не использовать существующие Даже если и так, что с того ? Мне всё равно. Я уже даже забыл, о чём это всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2016, 22:02 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2018498]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
74ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 304ms |
| total: | 475ms |

| 0 / 0 |
