Attività Implementazione della libreria parallela su mono?

Mono implementa la libreria Task Parallel? In tal caso, in che modo le prestazioni si confrontano tra .NET e mono.

Questo è stato implementato in Mono versione 2.6.

Dalle note di rilascio:

ParallelFx

Questa versione include alcuni componenti del framework ParallelFx che sono stati sviluppati come parte di Google Summer Of Code 2008 e 2009. Più precisamente, contiene la Task Parallel Library e Data Structures For Coordination.

Usando ParallelFx, puoi facilmente sviluppare software in grado di sfruttare automaticamente il potenziale parallelo delle attuali macchine multicore. A tale scopo, sono ora disponibili diversi nuovi costrutti come future, loop paralleli o raccolte simultanee.

Per utilizzare questo codice devi abilitare manualmente il profilo .NET 4 usando l’opzione –with-profile4 = yes nella fase di configurazione.

Nella mia esperienza personale, ho un programma altamente parallelo in C # per l’apprendimento e la classificazione dei dati di sequenza genica che rende molto pesante l’utilizzo delle funzionalità della libreria parallela Task come Parallel.ForEach, Parallel.For, Task.Factory.StartNew () e molte strutture dallo spazio dei nomi Collections.Concurrent (Blocking Collections, Concurrent Dizionari, Concurrent Bags ecc.). In breve, le prestazioni della mia applicazione su Linux usando mono sono molte volte più lente. Sto ancora cercando di capirlo. Posso eseguirlo dalla console mono in Windows con prestazioni simili.

Ho sperimentato con l’uso del garbage collector sgen di mono senza alcun risultato. Le prestazioni della mia applicazione su un server Linux in esecuzione su mono sono ancora notevolmente più lente.

Apprendimento di 8.258 sequenze: 0:17 vs 1:59 m: ss su Linux

Classificare 921 sequenze: 2,29 secondi contro 11:05 mm: ss su Linux

Vedi le schermate qui sotto.

inserisci la descrizione dell'immagine qui
inserisci la descrizione dell'immagine qui

Hai provato a cambiare il min / maxthreads?

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

Stai operando ben oltre me, ma ho scoperto che non si faceva niente. Così l’ho impostato su 5 * numero di core della CPU e l’ho scattato proprio fuori!