Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从并行化中获益的开源软件?_C#_Open Source_Parallel Processing - Fatal编程技术网

C# 从并行化中获益的开源软件?

C# 从并行化中获益的开源软件?,c#,open-source,parallel-processing,C#,Open Source,Parallel Processing,我不确定这类问题是否合适,但有人建议我在这里提问,所以就这样问吧 对于本学期大学的一门课程,我们的任务是获取一些现有代码并将其并行化。我们在这方面有点开放,但是开源是我们获取现有代码的唯一途径。我可以编写一些代码,然后将其并行化,但现有的代码(也许是我可以做出真正贡献的代码)将是最好的,这样可以避免工作量翻倍而带来的好处微乎其微 我希望使用C#并利用新的任务并行库,但我正在努力寻找一些计算成本高到足以利用并行化的C#开源项目(目前还没有) 有人对去哪里找有什么建议吗?还是C不只是有足够的开源的东

我不确定这类问题是否合适,但有人建议我在这里提问,所以就这样问吧

对于本学期大学的一门课程,我们的任务是获取一些现有代码并将其并行化。我们在这方面有点开放,但是开源是我们获取现有代码的唯一途径。我可以编写一些代码,然后将其并行化,但现有的代码(也许是我可以做出真正贡献的代码)将是最好的,这样可以避免工作量翻倍而带来的好处微乎其微

我希望使用C#并利用新的任务并行库,但我正在努力寻找一些计算成本高到足以利用并行化的C#开源项目(目前还没有)


有人对去哪里找有什么建议吗?还是C不只是有足够的开源的东西(也许应该试试C++)< /P> < P>我不知道他们是否已经使用了并行任务,但是好的候选对象是图像处理程序,比如OR。/P>< P>检查Alglib,特别是。它将包含许多非常适合TPL的矩阵和数组操作。

用C#和java实现了几种加密算法。也许其中一些并没有尽可能地并行化。

我不知道这个项目的范围(如果它只是一个每周的作业或你的最终项目),但从并行化中获益的过程不必像Hans的链接文章所描述的那样“令人尴尬地并行”。如果出现以下情况,则问题将受益于并行化:

  • 问题的解决方案可以表示为一系列重复的较小操作的“和”
  • 较小的操作对彼此的影响最小,并且
  • 问题的规模足以使并行化的好处大于由于创建和监督多个辅助进程而增加的开销所造成的损失 通常以线性方式解决,但可从并行化中获益的问题示例包括:

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

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

    不幸的是,您必须找到较旧版本的Paint.NET,因为最新版本是封闭源代码的。@Timwi-我不知道它们是封闭源代码的:(感谢Oded,我确实想尝试一下Paint.NET,但注意到它是封闭源代码,pinta可能值得一试!我来看看。看起来pinta使用了一点Paint.NET源代码,看起来它会很好地工作,谢谢!)