Задача параллельной реализации библиотеки на моно? - PullRequest
8 голосов
/ 02 марта 2011

Mono реализует библиотеку Task Parallel? Если да, то как соотносится производительность между .NET и mono.

Ответы [ 3 ]

9 голосов
/ 02 марта 2011

Это было реализовано в версии Mono 2.6.

Из примечаний к выпуску:

ParallelFx

Этот выпуск включает в себя некоторые компонентыинфраструктура ParallelFx, которая была разработана как часть Google Summer Of Code 2008 и 2009. Точнее, она содержит библиотеку задач ParallelFree и структуры данных для координации.

Используя ParallelFx, вы можете легко разрабатывать программное обеспечение, которое может автоматически приниматьПреимущество параллельного потенциала современных многоядерных машин.Для этого теперь доступны несколько новых конструкций, таких как фьючерсы, параллельные циклы или параллельные коллекции.

Чтобы использовать этот код, вам нужно вручную включить профиль .NET 4 с помощью переключателя --with-profile4 = yes вэтап настройки.

5 голосов
/ 22 ноября 2014

По своему опыту, у меня есть высокопараллельная программа на C # для изучения и классификации данных о последовательностях генов, которая очень интенсивно использует такие функции библиотеки параллельных задач, как Parallel.ForEach, Parallel.For, Task.Factory.StartNew () и множество структур из пространства имен Collections.Concurrent (блокирующие коллекции, параллельные словари, параллельные пакеты и т. Д.).Короче говоря, производительность моего приложения на Linux с использованием моно во много раз ниже.Я все еще пытаюсь понять это.Я могу запустить его с моно консоли в Windows с аналогичной производительностью.

Я экспериментировал с использованием моно-сборщика мусора sgen безрезультатно.Производительность моего приложения на сервере Linux, работающем с моно, все еще значительно ниже.

Изучение 8258 последовательностей: 0:17 против 1:59 м: сс в Linux

Классифицировать 921 последовательность: 2,29 секунды против 11: 05 мм: сс в Linux

См. Снимки экрана ниже.

enter image description here
enter image description here

0 голосов
/ 01 декабря 2015

Вы пытались изменить минимальные / максимальные потоки?

System.Threading.ThreadPool.SetMaxThreads(mWorker, mWorker);
System.Threading.ThreadPool.SetMinThreads(10, 10);

Вы действуете намного дальше меня, но я обнаружил, что ничего не было сделано. Поэтому я установил на 5 * количество ядер процессора, и он сразу же отключился!

...