10

作为一个主要处理高级编程语言的软件开发人员,我不确定我能做些什么来适当地关注即将到来的多核计算机的普遍存在。我主要编写普通且要求不高的应用程序,但我认为了解是否需要更改任何编程范式甚至语言以掌握未来很重要。

因此,我的问题是:
How to deal with increasing multicore presence in day-by-day hacking?

4

11 回答 11

7

Herb Sutter 在 2005 年写过:免费午餐结束:软件中向并发的根本转变

于 2009-02-19T22:47:19.263 回答
4

大多数问题不需要大量的 CPU 时间。确实,单核对于许多用途来说已经足够快了。当您确实发现您的程序太慢时,首先对其进行分析并查看您选择的算法、体系结构和缓存。如果这还不够,请尝试将问题划分为单独的过程。通常这只是为了隔离故障而值得做,这样您就可以了解每个进程的 CPU 和内存使用情况。此外,通常每个进程将在特定内核上运行并充分利用处理器缓存,因此您不必承受保持缓存行一致的大量性能开销。如果您进行多进程设计,但仍然发现问题需要的 CPU 时间比您拥有的机器多,那么您可以很好地扩展它在集群上运行。

在某些情况下,您需要在同一地址空间内使用多个线程,但要注意线程很难正确处理。竞争条件,尤其是在非安全语言中,有时需要数周才能调试;通常,简单地添加跟踪或在调试器下运行将更改足够的时间以隐藏问题。简单地将锁放在任何地方通常意味着您会获得大量的锁定开销,有时还会出现如此多的锁争用,以至于您并没有真正获得您希望的并发优势。即使您拥有正确的锁定,您也需要分析以调整缓存一致性。最终,如果您想真正调整一些高度并发的代码,您最终可能会看到无锁结构和比当前多线程库中的更复杂的锁定方案。

于 2009-02-19T23:40:33.753 回答
3

了解并发的好处和限制(例如 Amdahl 定律)。

因此,您可以在可能的情况下利用将要开放的获得更高性能的唯一途径。在更简单的方法(futures 和任务库)上发生了许多创新工作,并且重新发现了旧工作(函数式语言和不可变数据)。

免费午餐结束了,但这并不意味着没有什么可利用的。

于 2009-02-19T22:34:17.763 回答
2

一般来说,对线程非常友好。这是一种可怕的并行化机制,但它就是我们所拥有的。

如果您确实使用 .NET,请查看 Parallel Extensions。它们使您可以轻松完成许多并行编程任务。

于 2009-02-19T22:34:06.783 回答
2

要从一个核心中受益,您应该考虑并行化您的代码。多线程、不可变类型和最少的同步是您的新朋友。

于 2009-02-19T22:34:25.580 回答
2

我认为这将取决于您正在编写什么样的应用程序。

某些应用程序比其他应用程序更受益于它们在多核 cpu 上运行的事实。如果您的应用程序可以从多核事实中受益,那么您应该准备好进行并行。免费午餐结束;也就是说:在过去,当一个新的 cpu 发布时,您的应用程序会变得更快,而您不必在应用程序中付出任何努力来获得额外的速度。现在,要利用多核 cpu 提供的功能,您必须确保您的应用程序可以利用它。那就是:你必须看看哪些任务可以多线程/并发执行,这给表带来了一些问题......

于 2009-02-19T22:35:17.637 回答
2

学习 Erlang/F#(取决于您的平台)

于 2009-02-19T22:40:59.637 回答
2
  • 更喜欢不可变的数据结构,它们的使用使软件不仅在并发程序中更容易理解。

  • 学习使用您的语言的并发工具(例如 java.util.concurrent、JCIP)。

  • 学习一门函数式语言(例如Haskell)。

于 2009-02-20T06:41:46.423 回答
0

我被问过同样的问题,答案是,“这取决于”。如果你的 Joe Winforms,也许不会那么多。如果您编写的代码必须是高性能的,是的。我可以看到并行编程的最大问题之一是:如果某些东西不能并行化,而你撒谎并告诉运行时并行执行,它不会崩溃,它只会做错事,你会得到垃圾结果并责怪框架。

于 2009-02-19T22:52:46.910 回答
0

学习 C 和 C++ 代码的 OpenMP 和 MPI。

OpenMP 也适用于其他语言以及我想的 Fortran。

于 2009-02-19T23:58:19.043 回答
0

编写更小的程序。

其他代码语言/风格会让你更好地执行多线程(尽管多线程在任何语言中仍然非常困难),但对于普通开发人员来说,恕我直言,最大的好处是能够同时执行许多较小的程序来完成一些更大的任务。

因此,养成将问题分解为可以随时运行的独立组件的习惯。

您还将构建更多可维护的软件。

于 2009-02-20T00:41:15.773 回答