单声道上的任务并行库实现?

时间:2011-03-02 17:04:19

标签: c# mono task-parallel-library

Mono是否实现了Task Parallel库?如果是这样,.NET和单声道之间的性能比较如何。

3 个答案:

答案 0 :(得分:9)

这是在Mono 2.6版本中实现的。

From the release notes:

  

ParallelFx

     

此版本包含ParallelFx框架的一些组件,这些组件是作为Google Summer Of Code 2008& Sons的一部分开发的。更确切地说,它包含任务并行库和数据结构协调。

     

使用ParallelFx,您可以轻松开发能够自动利用当今多核机器并行潜力的软件。为此,现在可以使用一些新的构造,如期货,并行循环或并发集合。

     

要使用此代码,您必须在配置阶段使用--with-profile4 = yes开关手动启用.NET 4配置文件。

答案 1 :(得分:5)

根据我自己的经验,我在C#中有一个高度并行的程序用于基因序列数据的学习和分类,这使得任务并行库功能的使用非常繁重,例如Parallel.ForEach,Parallel.For,Task.Factory。 StartNew(),以及来自Collections.Concurrent命名空间的许多结构(阻塞集合,并发字典,并发包等)。简而言之,我在Linux上使用mono的应用程序性能要慢很多倍。我仍然想弄明白这一点。我可以在具有类似性能的Windows中从单声道控制台运行它。

我已尝试使用mono的sgen垃圾收集器无济于事。我的应用程序在运行单声道的Linux服务器上的性能仍然显着降低。

学习8,258个序列: 0:17 vs. 1:59 m:Linux上的ss

对921序列进行分类: 2.29秒vs. 11:05 mm:Linux上的ss

请参阅下面的屏幕截图。

enter image description here
enter image description here

答案 2 :(得分:0)

您是否尝试更改min / maxthreads?

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

你正在超越我的运作方式,但我发现没有任何事情要做。所以我把它设置为5 *个cpu核心数,然后它就突然出现了!