【问题标题】:Task Parallel library implementation on mono?单声道上的任务并行库实现?
【发布时间】:2011-03-02 17:04:19
【问题描述】:

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

【问题讨论】:

标签: c# mono task-parallel-library


【解决方案1】:

这是在 Mono 2.6 版中实现的。

From the release notes:

ParallelFx

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

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

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

【讨论】:

    【解决方案2】:

    根据我自己的经验,我有一个高度并行的 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 上

    请参阅下面的屏幕截图。


    【讨论】:

    • 杰克,你用的是什么版本的 Mono?您有没有看到这种性能有所改善?
    • 我使用的是 Mono 3.2.3。我永远无法解决这个问题,并为这个项目完全放弃了 Mono。我构建了一个带有双液冷六核处理器和 128GB 内存的 Windows 机器。但是,如果我能在 Linux 上获得良好的性能,我将拥有大量的大学资源可供使用……Linux 上的 Mono 版本可能稍旧,但它必须至少支持 .NET 4.5 .否则,我的程序将不会执行。
    【解决方案3】:

    您是否尝试更改最小/最大线程?

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

    您的操作超出了我的范围,但我发现什么都没做。所以我将它设置为 5 * 数量的 cpu 核心,然后它就立即退出了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多