Сообщение Очень эффективно (цифры насколько именно и когда - внутри) от 28.12.2019 16:47
Изменено 29.12.2019 0:45 VladCore
Очень эффективно (цифры насколько именно и когда - внутри)
Здравствуйте, Passerby, Вы писали:
P>Эффективно ли внутри параллельных задач создавать параллельные задачи?
P>Т.е. Есть к примеру 4*n одинаковых по вычислительной емкости задач: 4*n-1 задач описываются одной функцией funct1(int) и можно применить Parallel.For и одна задача другой функцией funct2(int). Процессор 4-х ядерный. Имеет ли смысл делать Parallel.Invoke на две задачи: первая Parallel.For на 4*n-1 задач, вторая на funct2?
P>Или лучше сделать массив Task на все задачи (будут издержки на создание объектов Task)?
P>Или внешнего Parallel.Invoke не делать (тогда funct2 будет в синхронном режиме)?
Очень.
Латенси в .NET Core — примерно 1 микросекунда на распараллеливание сложения двух чисел c дефолтовым TaskScheduler. В облаках где старые ксеоны 5-ти летней давности. Если нужно точно — то это Хасвел 2.3 Ггц.
В старом framework и моно затраты СИЛЬНО больше:
— 6 микросекунд в NET Framework 4.8.
— 22 микросекунды в Mono 6.6
— 32 микросекунды в моно 5.10
Я недавно Benchamrk-и написал с тестами в azure pipelines: https://dev.azure.com/devizer/BenchmarksZoo/_build/results?buildId=474&view=results
Боятся нужно только того, что твой код вызовут не с дефолтным TaskScheduler-ом и издержки на распараллеливание миллиона тасков будет не одна секунда а скажем 1000 секунд
P>Эффективно ли внутри параллельных задач создавать параллельные задачи?
P>Т.е. Есть к примеру 4*n одинаковых по вычислительной емкости задач: 4*n-1 задач описываются одной функцией funct1(int) и можно применить Parallel.For и одна задача другой функцией funct2(int). Процессор 4-х ядерный. Имеет ли смысл делать Parallel.Invoke на две задачи: первая Parallel.For на 4*n-1 задач, вторая на funct2?
P>Или лучше сделать массив Task на все задачи (будут издержки на создание объектов Task)?
P>Или внешнего Parallel.Invoke не делать (тогда funct2 будет в синхронном режиме)?
Очень.
Латенси в .NET Core — примерно 1 микросекунда на распараллеливание сложения двух чисел c дефолтовым TaskScheduler. В облаках где старые ксеоны 5-ти летней давности. Если нужно точно — то это Хасвел 2.3 Ггц.
В старом framework и моно затраты СИЛЬНО больше:
— 6 микросекунд в NET Framework 4.8.
— 22 микросекунды в Mono 6.6
— 32 микросекунды в моно 5.10
Я недавно Benchamrk-и написал с тестами в azure pipelines: https://dev.azure.com/devizer/BenchmarksZoo/_build/results?buildId=474&view=results
Боятся нужно только того, что твой код вызовут не с дефолтным TaskScheduler-ом и издержки на распараллеливание миллиона тасков будет не одна секунда а скажем 1000 секунд
Очень эффективно (цифры насколько именно и когда - внутри)
Здравствуйте, Passerby, Вы писали:
P>Эффективно ли внутри параллельных задач создавать параллельные задачи?
P>Т.е. Есть к примеру 4*n одинаковых по вычислительной емкости задач: 4*n-1 задач описываются одной функцией funct1(int) и можно применить Parallel.For и одна задача другой функцией funct2(int). Процессор 4-х ядерный. Имеет ли смысл делать Parallel.Invoke на две задачи: первая Parallel.For на 4*n-1 задач, вторая на funct2?
P>Или лучше сделать массив Task на все задачи (будут издержки на создание объектов Task)?
P>Или внешнего Parallel.Invoke не делать (тогда funct2 будет в синхронном режиме)?
Очень.
Латенси в .NET Core — примерно 1 микросекунда на распараллеливание сложения двух чисел c дефолтовым TaskScheduler. В облаках где старые ксеоны 5-ти летней давности. Если нужно точно — то это Хасвел 2.3 Ггц.
В старом framework и моно затраты СИЛЬНО больше:
— 6 микросекунд в NET Framework 4.8.
— 22 микросекунды в Mono 6.6
— 32 микросекунды в моно 5.10
Вот сам код чтоб было понятно:
Я недавно Benchamrk-и написал с тестами в azure pipelines: https://dev.azure.com/devizer/BenchmarksZoo/_build/results?buildId=474&view=results
Боятся нужно только того, что твой код вызовут не с дефолтным TaskScheduler-ом и издержки на распараллеливание миллиона тасков будет не одна секунда а скажем 1000 секунд
P>Эффективно ли внутри параллельных задач создавать параллельные задачи?
P>Т.е. Есть к примеру 4*n одинаковых по вычислительной емкости задач: 4*n-1 задач описываются одной функцией funct1(int) и можно применить Parallel.For и одна задача другой функцией funct2(int). Процессор 4-х ядерный. Имеет ли смысл делать Parallel.Invoke на две задачи: первая Parallel.For на 4*n-1 задач, вторая на funct2?
P>Или лучше сделать массив Task на все задачи (будут издержки на создание объектов Task)?
P>Или внешнего Parallel.Invoke не делать (тогда funct2 будет в синхронном режиме)?
Очень.
Латенси в .NET Core — примерно 1 микросекунда на распараллеливание сложения двух чисел c дефолтовым TaskScheduler. В облаках где старые ксеоны 5-ти летней давности. Если нужно точно — то это Хасвел 2.3 Ггц.
В старом framework и моно затраты СИЛЬНО больше:
— 6 микросекунд в NET Framework 4.8.
— 22 микросекунды в Mono 6.6
— 32 микросекунды в моно 5.10
Вот сам код чтоб было понятно:
[Benchmark]
public async Task<int> AwaitLatency()
{
var y = await Task.Run(() => 42);
return y;
}
Я недавно Benchamrk-и написал с тестами в azure pipelines: https://dev.azure.com/devizer/BenchmarksZoo/_build/results?buildId=474&view=results
Боятся нужно только того, что твой код вызовут не с дефолтным TaskScheduler-ом и издержки на распараллеливание миллиона тасков будет не одна секунда а скажем 1000 секунд