Algorithm 我什么时候应该使用并行编程?

Algorithm 我什么时候应该使用并行编程?,algorithm,parallel-processing,Algorithm,Parallel Processing,使用并行编程的典型问题或实际问题是什么?这可能是相当具有挑战性的实施。在互联网上,他们解释了如何使用它,但没有解释为什么。很少有问题不能用并行程序比串行程序更快地解决。很少有计算机没有多个处理单元 因此,我的结论是,您应该一直使用并行编程。性能是使用并行编程最常见的原因。但是:并不是所有的程序都能通过使用并行编程变得更快。在大多数情况下,算法由可并行的部分和固有顺序的部分组成。您必须始终考虑使用并行编程的潜在性能增益。在某些情况下,使用它的开销实际上会使程序变慢。查看以了解更多有关您可以实现的潜

使用并行编程的典型问题或实际问题是什么?这可能是相当具有挑战性的实施。在互联网上,他们解释了如何使用它,但没有解释为什么。

很少有问题不能用并行程序比串行程序更快地解决。很少有计算机没有多个处理单元


因此,我的结论是,您应该一直使用并行编程。

性能是使用并行编程最常见的原因。但是:并不是所有的程序都能通过使用并行编程变得更快。在大多数情况下,算法由可并行的部分和固有顺序的部分组成。您必须始终考虑使用并行编程的潜在性能增益。在某些情况下,使用它的开销实际上会使程序变慢。查看以了解更多有关您可以实现的潜在性能改进的信息


如果您只想了解一些并行计算的使用示例:有一些类的算法本质上是并行的,请参阅本文

使用多线程应用程序体系结构的另一个原因是它的响应能力。某些函数会在一定时间内阻止程序执行,即读取文件、网络、等待用户输入等。这样的等待不会消耗CPU功率,但通常会阻止或减慢程序流

在这种情况下,使用线程只是一种使代码更清晰的好做法。程序员可以选择使用线程,让一个线程等待输入,让另一个线程执行计算,而不是使用(通常是复杂的或非直观的)输入检查,将这些检查集成到程序流中,在处理输入和其他任务之间手动切换

换句话说,多线程有时可以更好地利用计算机上的不同资源:网络、磁盘、输入设备或简单的监视器


泛化:使用多线程(包括并行数据处理)当速度和响应速度的提高超过了并行化应用程序所需的同步成本和工作量时,建议使用该方法。

人们对并行编程越来越感兴趣的部分原因是因为我们今天使用的硬件更加并行。(多核处理器,多核GPU)。要充分受益于此硬件,您需要并行编程

有趣的是,并行处理还能延长电池寿命:

  • 1Ghz时有4个磁芯比4Ghz时有一个磁芯消耗的功率要小
  • 带有多核CPU的手机将尝试同时运行尽可能多的任务,因此当所有工作完成时,它可以关闭CPU。这有时被称为“急于闲置”

现在,一些程序比其他程序更容易并行化。您不应该随机尝试并行化整个代码库。但是,即使没有商业理由,这样做也是一种有益的锻炼:这样,当你真正需要它的时候,你就会准备得更充分

例如,对于批处理编程,没有理由并行每个任务。大多数并行程序的开销都会降低吞吐量。有时,将一个困难任务并行化所需的额外开发时间大于为任务本身的所有执行所节省的总时间。因此,我认为你不能说你应该一直使用它。我认为人们普遍认为,优化你的非并行化算法通常比尝试并行化算法付出更少的努力就能获得更多的性能提升。这就是为什么我否决了“因此,我的结论是,您应该一直使用并行编程”。链接已断开!:伯克利的矮人