【发布时间】:2011-03-02 17:04:19
【问题描述】:
Mono 是否实现了任务并行库?如果是这样,.NET 和单声道之间的性能比较如何。
【问题讨论】:
-
部分回答:是的,mono 确实实现了任务并行库:mono-project.com/Release_Notes_Mono_2.6#ParallelFx
标签: c# mono task-parallel-library
Mono 是否实现了任务并行库?如果是这样,.NET 和单声道之间的性能比较如何。
【问题讨论】:
标签: c# mono task-parallel-library
这是在 Mono 2.6 版中实现的。
ParallelFx
此版本包含 ParallelFx 框架的一些组件,这些组件是作为 Google Summer Of Code 2008 和 2009 的一部分开发的。更准确地说,它包含任务并行库和用于协调的数据结构。
使用 ParallelFx,您可以轻松开发能够自动利用当今多核机器的并行潜力的软件。为此,现在可以使用多种新结构,例如期货、并行循环或并发集合。
要使用此代码,您必须在配置阶段使用 --with-profile4=yes 开关手动启用 .NET 4 配置文件。
【讨论】:
根据我自己的经验,我有一个高度并行的 C# 程序,用于基因序列数据的学习和分类,它大量使用了任务并行库功能,例如 Parallel.ForEach、Parallel.For、Task.Factory。 StartNew(),以及来自 Collections.Concurrent 命名空间的许多结构(阻塞集合、并发字典、并发包等)。简而言之,我的应用程序在使用单声道的 Linux 上的性能要慢很多倍。我仍在努力解决这个问题。我可以在具有类似性能的 Windows 中从单声道控制台运行它。
我尝试过使用 mono 的 sgen 垃圾收集器,但无济于事。我的应用程序在运行单声道的 Linux 服务器上的性能仍然非常慢。
学习 8,258 个序列: 0:17 与 1:59 m:ss 在 Linux 上
对 921 个序列进行分类: 2.29 秒与 11:05 mm:ss 在 Linux 上
请参阅下面的屏幕截图。
【讨论】:
您是否尝试更改最小/最大线程?
System.Threading.ThreadPool.SetMaxThreads(mWorker, mWorker);
System.Threading.ThreadPool.SetMinThreads(10, 10);
您的操作超出了我的范围,但我发现什么都没做。所以我将它设置为 5 * 数量的 cpu 核心,然后它就立即退出了!
【讨论】: