Networking 使用多台PC的网络并行性如何?

Networking 使用多台PC的网络并行性如何?,networking,parallel-processing,Networking,Parallel Processing,并行计算被越来越多地使用,新的框架特性和快捷方式使其更易于使用(例如.NET4中直接提供的并行扩展) 那么跨网络的并行性呢?我的意思是,对与通信、在远程机器上创建进程等相关的一切进行抽象,比如,在C#: 我知道它与多核并行非常不同。最明显的两个区别可能是: 事实上,这种并行任务将仅限于计算,而不能使用本地存储的文件(但为什么不能使用数据库?),甚至不能使用本地变量,因为它将是两个不同的应用程序,而不是同一应用程序的两个线程 非常具体的实现,不仅需要一个单独的线程(这很容易),还需要在不同的机器

并行计算被越来越多地使用,新的框架特性和快捷方式使其更易于使用(例如.NET4中直接提供的并行扩展)

那么跨网络的并行性呢?我的意思是,对与通信、在远程机器上创建进程等相关的一切进行抽象,比如,在C#:

我知道它与多核并行非常不同。最明显的两个区别可能是:

  • 事实上,这种并行任务将仅限于计算,而不能使用本地存储的文件(但为什么不能使用数据库?),甚至不能使用本地变量,因为它将是两个不同的应用程序,而不是同一应用程序的两个线程
  • 非常具体的实现,不仅需要一个单独的线程(这很容易),还需要在不同的机器上跨越一个进程,然后通过本地网络与它们通信
尽管存在这些差异,但即使不涉及分布式体系结构,这种并行性也是完全可能的

你认为它会在几年内实施吗?您是否同意,它使开发人员能够轻松地开发出功能强大的东西,而痛苦要小得多

示例:

考虑一个从数据库中提取数据、转换数据和显示统计数据的业务应用程序。假设这个应用程序需要10秒来加载数据,20秒来转换数据,10秒来在公司的一台机器上构建图表,使用所有CPU,而其他10台机器大部分时间都使用5%的CPU。在这种情况下,每个操作都可以并行执行,整个流程可能需要6到10秒,而不是40秒。

这通常是以与进程内并发不同的方式处理的。由于体系结构而产生的问题要大得多,而共享内存的缺乏会引起其他问题

也就是说,“跨网络并行”已经使用了很长时间。最常见的选择是使用。甚至还有一个C#库用于此

现在,“完全抽象”整个网络中的分区和调用工作的目标还没有实现(尽管MPI确实以一种相对简单的方式处理了许多这样的任务)。我也怀疑这会很快发生,因为当你失去共享记忆时,会出现许多新的担忧。然而,我怀疑一些项目(如)最终会导致一种非常抽象的方法来实现这一点,但我也怀疑这将需要几年的时间,因为进程内共享内存并发正在变得越来越普遍和主流

那么跨网络的并行性呢?我的意思是,对与通信、在远程机器上创建进程等相关的一切进行抽象


它已经被尝试过很多次了,这种抽象通常会失败,因为它们体现了。计算过程中出现网络故障的可能性远远高于正常的硬件故障,因此需要使用容错和延迟容忍的通信模式,而不是依赖于过程习惯用法

如果你说的“几年内”是指“二十年前”,那么答案是肯定的。服务器场不是谷歌发明的。你将如何并行加载、转换和图表数据?+1用于使用MPI实现分布式内存并行计算。“并行”LINQ和任务“并行”库的名称一直困扰着我,因为当我想到并行计算时,我想到了MPI和分布式内存并行计算。感谢这个有用的答案,它指向MPI和Axum。我不知道MPI的存在。当然,我知道,在核心级并行计算中存在着更多的架构问题。分布式计算是一个谬误的消息将让所有集群、网格和超级计算机的所有者感到惊讶。你会怎么笑。@High Performance Mark“X的谬误”并不意味着X是谬误。HPC集群花费了大量精力来减少延迟并提高其本地网络的可靠性,而成功的网格协议总是向应用程序报告故障,而不是假装它们不会发生。Beowulf网格中间件还使用了可靠性检查点——能够在出现故障后重新启动作业。这些系统都没有抽象出网络。
NetworkParallel.ForEach(myEnumerable, () =>
{
    // Computing and/or access to web ressource or local network database here
});