Недавно я проверял метод c# parallel.for в отношении гоночных условий и обмена проблемами состояния. Чтобы проверить этот цикл, я внедрил простое приложение C# консоли, которое всегда должно возвращать одно и то же значение (см. Спрей кода ниже). Тем не менее, в случае выполнения, он возвращает разные значения, специфически размеры массивов различаются, указывая на то, что мой диапазон был разделен по -разному между различными прогонами для .
Кто -нибудь знает причину параллели .For Диапазон разделения по -разному между «потоками», даже если нет изменения значений между прогонами?
using System.Collections.Concurrent;
var Ntests = 1000;
var repetitions = Enumerable.Range(0, Ntests).Select((rep) =>
{
var result = NewMethod(0,10);
return result;
}).ToArray();
bool shouldBreak = false;
for (int first = 0; !shouldBreak && first < repetitions.Length; first++)
{
for (int second = first+1; !shouldBreak && second < repetitions.Length; second++)
{
var rep = repetitions[first];
var rep2 = repetitions[second];
if (!Enumerable.SequenceEqual(rep.OrderBy(x=>x), rep2.OrderBy(x=>x)))
{
Console.WriteLine("Routine not consistent");
Console.WriteLine($"rep[{first}]:{string.Join(',', rep)}");
Console.WriteLine($"rep[{second}]:{string.Join(',', rep2)}");
shouldBreak = true;
}
}
}
static List NewMethod(int init, int final)
{
var result = new ConcurrentBag();
Action agregate = (value) => result.Add(value);
Func inicializador = () => 0;
Func body =
(i, state, threadAcum) => threadAcum += i;
Parallel.For(init,
final,
inicializador,
body,
agregate);
return result.ToList();
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... tions-of-a
Почему параллель. [дублировать] ⇐ C#
Место общения программистов C#
1739471140
Anonymous
Недавно я проверял метод c# parallel.for в отношении гоночных условий и обмена проблемами состояния. Чтобы проверить этот цикл, я внедрил простое приложение C# консоли, которое всегда должно возвращать одно и то же значение (см. Спрей кода ниже). Тем не менее, в случае выполнения, он возвращает разные значения, специфически размеры массивов различаются, указывая на то, что мой диапазон был разделен по -разному между различными прогонами для .
Кто -нибудь знает причину параллели .For Диапазон разделения по -разному между «потоками», даже если нет изменения значений между прогонами?
using System.Collections.Concurrent;
var Ntests = 1000;
var repetitions = Enumerable.Range(0, Ntests).Select((rep) =>
{
var result = NewMethod(0,10);
return result;
}).ToArray();
bool shouldBreak = false;
for (int first = 0; !shouldBreak && first < repetitions.Length; first++)
{
for (int second = first+1; !shouldBreak && second < repetitions.Length; second++)
{
var rep = repetitions[first];
var rep2 = repetitions[second];
if (!Enumerable.SequenceEqual(rep.OrderBy(x=>x), rep2.OrderBy(x=>x)))
{
Console.WriteLine("Routine not consistent");
Console.WriteLine($"rep[{first}]:{string.Join(',', rep)}");
Console.WriteLine($"rep[{second}]:{string.Join(',', rep2)}");
shouldBreak = true;
}
}
}
static List NewMethod(int init, int final)
{
var result = new ConcurrentBag();
Action agregate = (value) => result.Add(value);
Func inicializador = () => 0;
Func body =
(i, state, threadAcum) => threadAcum += i;
Parallel.For(init,
final,
inicializador,
body,
agregate);
return result.ToList();
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79436956/why-parallel-for-is-not-consistent-between-different-aggregation-executions-of-a[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия