可以从并行化中受益的C#开源软件?

时间:2010-09-03 12:48:48

标签: c# open-source parallel-processing

我不确定这类问题是否合适,但我在此问过这个问题,所以这里就是这样。

对于本学期大学的学科,我们的任务是采用一些现有的代码并将其并行化。我们有一些开放的结果,但开源实际上是我们获得现有代码的唯一方式。我可以编写一些代码,然后将其并行化,但是现有的代码(也许是我可以做出真正贡献的代码)最好,以避免将我的工作量加倍,效果不大。

我希望使用C#并使用新的Task并行库,但我很难找到一些C#开源项目,这些项目的计算成本足以使用并行化(并且还没有它)

有没有人有什么建议去看?或者C#只是没有足够的开源这样的东西(或许应该尝试C ++?)

4 个答案:

答案 0 :(得分:4)

我不知道他们是否已经使用了并行任务,但是好的候选者是图像处理程序,例如paint.netpinta

答案 1 :(得分:1)

查看Alglib,尤其是open source C# edition。它将包含许多矩阵和数组操作,非常适合TPL。

答案 2 :(得分:1)

我不知道这个项目的范围(如果它只是每周一次的任务或你的最终项目),但是一个受益于并行化的过程不必像Ha​​ns的链接文章所描述的那样“令人难以置信地平行”。如果出现以下情况,并行化问题将会受益:

  1. 问题的解决方案可以表示为重复的一系列较小操作的“总和”,
  2. 较小的操作对彼此影响最小,
  3. 由于创建和监督多个工作进程的额外开销,问题的规模足以使并行化的好处大于损失。
  4. 通常线性解决但可以从并行化中受益的问题示例包括:

    • 排序。像MergeSort这样的算法具有原子性,足以并行化;其他像QuickSort则没有。
    • 搜索。 BinarySearch无法并行化,但如果您正在搜索一个或多个单词出现的无序数据(如文档),则线性搜索可以使用“分而治之”优化。
    • 数据转换工作流程。打开文件,读取其原始数据,将其划分为域字段,将这些域字段转换为真正的域对象,验证它们并保留它们。每个数据文件通常完全独立于所有其他数据文件,并且转换过程(即读取文件和持久化之间的所有内容)通常是一个瓶颈,可以从更多的处理器中获益。
    • 约束满足问题。给定一系列业务规则来定义问题空间中多个变量的关系和约束,找到一组满足所有约束的变量,或确定没有。常见应用包括运输路线调度和业务流程优化。这是一个不断发展的计算算法领域,具有相对较高的学术兴趣,因此您可以找到可以多线程的基本CSP算法的已发布公共域代码。它可能被描述为令人难以置信的并行,因为最着名的解决方案是“智能强力”,但是,可能的解决方案可以独立于其他解决方案进行评估,因此每个解决方案都可以提供给工作线程。

    定义为“令人难以置信的并行”的过程通常是规模足够大但原子性和重复性的任何问题,并行处理是唯一可行的解​​决方案。汉斯链接的Wiki文章提到了常见的应用程序;通常,它们通常归结为对非常大的数据域的每个元素应用相对简单的计算。

答案 3 :(得分:0)

Project Bouncycastle在C#和java中实现了几种加密算法。也许其中一些并不像它们那样具有并行性。