Сообщение Re[4]: распараллеливание и ресурсоёмкость от 17.04.2019 7:11
Изменено 17.04.2019 7:11 okon
Re[4]: распараллеливание и ресурсоёмкость
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>Здравствуйте, okon, Вы писали:
O>>У меня вот с таким вариантом использования твоего метода For дает загрузку 100% всех ядер, а что у тебя за Body, нет ли там каких-то синхронизирующих элементов случаем,
VYR>на X... мне загрузка всех ядер ...
VYR>ты хоть вопрос читал???
а С# паралелил при помощи Parallel.For — какая-то жуть — накидывает 5% нагрузки в лучшем случае
а иногда так глючит что распараллеленый код выполняется за большее количество времени
Т.е. я так понял у тебя задача выполнить паралельно за меньшее количество времени, чем одним потоком ?
По "закону сохранения энергии" это возможно только если ядра будут нагружены в сумме > 100%, например 26% каждое ядро.
а если хочется быстрее завершить задачу то надо использовать все 100%.
Как я сейчас понимаю ты не хочешь в 4 раза быстрее выполнить задачу, а просто хочешь каждое ядро по 25% нагрузить ?
Если так , то любая расчетная нагрузка будет занимать 100%, пока не выполнится.
Если у тебя там есть не только расчеты но и работа с устройствами, то надо смотреть как лучше.
Если хочется чтобы ядро немного "отдыхало" делай там Thread.Sleep(100) например или await Task.Delay(100) если используешь async/await.
VYR>Здравствуйте, okon, Вы писали:
O>>У меня вот с таким вариантом использования твоего метода For дает загрузку 100% всех ядер, а что у тебя за Body, нет ли там каких-то синхронизирующих элементов случаем,
VYR>на X... мне загрузка всех ядер ...
VYR>ты хоть вопрос читал???
а С# паралелил при помощи Parallel.For — какая-то жуть — накидывает 5% нагрузки в лучшем случае
а иногда так глючит что распараллеленый код выполняется за большее количество времени
Т.е. я так понял у тебя задача выполнить паралельно за меньшее количество времени, чем одним потоком ?
По "закону сохранения энергии" это возможно только если ядра будут нагружены в сумме > 100%, например 26% каждое ядро.
а если хочется быстрее завершить задачу то надо использовать все 100%.
Как я сейчас понимаю ты не хочешь в 4 раза быстрее выполнить задачу, а просто хочешь каждое ядро по 25% нагрузить ?
Если так , то любая расчетная нагрузка будет занимать 100%, пока не выполнится.
Если у тебя там есть не только расчеты но и работа с устройствами, то надо смотреть как лучше.
Если хочется чтобы ядро немного "отдыхало" делай там Thread.Sleep(100) например или await Task.Delay(100) если используешь async/await.
Re[4]: распараллеливание и ресурсоёмкость
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>Здравствуйте, okon, Вы писали:
O>>У меня вот с таким вариантом использования твоего метода For дает загрузку 100% всех ядер, а что у тебя за Body, нет ли там каких-то синхронизирующих элементов случаем,
VYR>на X... мне загрузка всех ядер ...
VYR>ты хоть вопрос читал???
Т.е. я так понял у тебя задача выполнить паралельно за меньшее количество времени, чем одним потоком ?
По "закону сохранения энергии" это возможно только если ядра будут нагружены в сумме > 100%, например 26% каждое ядро.
а если хочется быстрее завершить задачу то надо использовать все 100%.
Как я сейчас понимаю ты не хочешь в 4 раза быстрее выполнить задачу, а просто хочешь каждое ядро по 25% нагрузить ?
Если так , то любая расчетная нагрузка будет занимать 100%, пока не выполнится.
Если у тебя там есть не только расчеты но и работа с устройствами, то надо смотреть как лучше.
Если хочется чтобы ядро немного "отдыхало" делай там Thread.Sleep(100) например или await Task.Delay(100) если используешь async/await.
VYR>Здравствуйте, okon, Вы писали:
O>>У меня вот с таким вариантом использования твоего метода For дает загрузку 100% всех ядер, а что у тебя за Body, нет ли там каких-то синхронизирующих элементов случаем,
VYR>на X... мне загрузка всех ядер ...
VYR>ты хоть вопрос читал???
а С# паралелил при помощи Parallel.For — какая-то жуть — накидывает 5% нагрузки в лучшем случае
а иногда так глючит что распараллеленый код выполняется за большее количество времени
Т.е. я так понял у тебя задача выполнить паралельно за меньшее количество времени, чем одним потоком ?
По "закону сохранения энергии" это возможно только если ядра будут нагружены в сумме > 100%, например 26% каждое ядро.
а если хочется быстрее завершить задачу то надо использовать все 100%.
Как я сейчас понимаю ты не хочешь в 4 раза быстрее выполнить задачу, а просто хочешь каждое ядро по 25% нагрузить ?
Если так , то любая расчетная нагрузка будет занимать 100%, пока не выполнится.
Если у тебя там есть не только расчеты но и работа с устройствами, то надо смотреть как лучше.
Если хочется чтобы ядро немного "отдыхало" делай там Thread.Sleep(100) например или await Task.Delay(100) если используешь async/await.