2011-03-02 15 views

Respuesta

9

Esto se implementó en la versión Mono 2.6.

From the release notes:

ParallelFx

Esta versión incluye algunos componentes del marco ParallelFx que fueron desarrollados como parte del Google Summer of Code 2008 & 2009. Más precisamente, contiene la biblioteca de tareas en paralelo y Datos Estructuras para la coordinación.

Usando ParallelFx, puede desarrollar fácilmente un software que pueda aprovechar automáticamente el potencial paralelo de las máquinas multinúcleo actuales. Para ese propósito, varios nuevos constructos como futuros, bucles paralelos o colecciones concurrentes ya están disponibles.

Para utilizar este código, debe habilitar manualmente el perfil .NET 4 utilizando el parámetro --with-profile4 = yes en la etapa de configuración.

4

En mi propia experiencia, tengo un programa altamente paralelo en C# para el aprendizaje y la clasificación de los datos de secuencia de genes que hace un uso muy intensivo de las operaciones de biblioteca de tareas paralelas como Parallel.ForEach, Parallel.For, Tarea .Factory.StartNew(), y muchas estructuras de Collections.Concurrent namespace (Blocking Collections, Concurrent Dictionaries, Concurrent Bags, etc.). En resumen, el rendimiento de mi aplicación en Linux usando mono es muchas veces más lento. Todavía estoy tratando de resolver esto. Puedo ejecutarlo desde la consola mono en Windows con un rendimiento similar.

He experimentado con el uso del recolector de basura sgen de mono en vano. El rendimiento de mi aplicación en un servidor Linux que se ejecuta con mono aún es mucho más lento.

aprendizaje 8.258 secuencias: doce y diecisiete vs. 01:59 m: ss en Linux

Clasificar 921 secuencias: 2.29 segundos vs. 11:05 mm: ss en Linux

Ver capturas de pantalla a continuación.

enter image description here
enter image description here

+1

Jake, ¿qué versión de Mono estás usando? ¿Alguna vez viste una mejora con este rendimiento? – Boots

+0

Estaba usando Mono 3.2.3. Nunca pude resolver esto y abandoné Mono por completo para este proyecto. Construí una caja de Windows con dos procesadores hexacore refrigerados por líquido y 128 GB de RAM. Sin embargo, tendría una tonelada de recursos de la universidad a mi disposición, si pudiera obtener un buen rendimiento en Linux ...Es posible que la versión Mono en Linux fuera un poco más antigua, pero al menos debería haber soportado .NET 4.5. De lo contrario, mi programa no se habría ejecutado. –

0

¿Usted intentó cambiar las min/maxthreads?

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

Usted está operando mucho más allá de mí, pero descubrí que no se hacía nada. ¡Así que lo configuré en 5 * cantidad de núcleos de CPU y salió directamente!

Cuestiones relacionadas