Информация об изменениях

Сообщение Re[4]: распараллеливание и ресурсоёмкость от 17.04.2019 7:11

Изменено 17.04.2019 7:15 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.
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.

            For(1, 1000000, async (i) =>
            {
                double x = 0;
                for (int j = 0; j < 1000; j++)
                {
                    x = x + Math.Sin(j);
                    await Task.Delay(1);
                }

            });


Например вот так