作为一个软件开发人员处理主要与高级别编程语言中我不知道我能做些什么来适当地注意到即将到来的全存在的核计算机。我写的主要是普通的并非要求的应用,尽管如此,我认为重要的是要知道如果我需要改变任何程序的范式或甚至语言的掌握未来。

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

有帮助吗?

解决方案

香草萨特在2005年写的那样:的免费午餐结束:一个基本转投向并发软件

其他提示

大多数问题并不需要大量的CPU时间。说真的,单核心是用于多种用途相当不够快。当你发现你的程序太慢,第一个人资料,并查看您的选择算法,架构和缓存。如果没有得到你足够的,试图分裂的问题分成独立的进程。通常这是值得做的简单的故障隔离和,这样就可以了解每个进程的CPU和内存使用情况。此外,通常每个进程将运行在特定的核心,充分利用处理器的缓存,这样你就不用忍受保持高速缓存行一致的显着的性能开销。如果你去一个多进程设计,并从中找到问题需要更多的CPU时间比你与你的机器得到,你能够很好地扩展它运行在一个集群。

有你需要相同的地址空间内的多个线程的情况,但要注意线程是真的很难得到正确。竞争条件,特别是在非安全的语言,有时需要数周时间来调试;通常情况下,简单地增加一个调试器跟踪或运行将改变足以掩盖问题的时机。干脆把锁到处往往意味着你锁定开销,有时这么多锁争用,你不会真正得到并发优势你所希望看到的很多。即使你有锁定正确的,你再需要配置文件来调整高速缓存一致性。最后,如果你想真正调整某些高度并行的代码,你很可能会最终看着比在目前的多线程库无锁的结构和更复杂的锁定方案。

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

所以,你可以,如果可能的话,利用该会是开放的更高的性能的唯一途径。有很多的创新工作发生在更容易的办法(期货和任务库),老的工作被重新发现(功能性语言和不可改变的数据)。

在白吃的午餐结束了,但这并不意味着没有什么漏洞。

在一般情况下,变得非常友好与螺纹。它是并行一个可怕的机制,但它是我们所拥有的。

如果你不使用.NET的工作,看看并行扩展。他们让你轻松地完成许多并行的编程任务。

要从受益更多的是只有一个核心,你应该考虑并行代码。多线程,稳定的类型,和最小同步的是你的新朋友。

我认为这将取决于你写什么样的应用程序。

某种类型的应用程序中受益更多的是他们在一座耗资核CPU运行,那么别人的事实。 如果您的应用程序可以从多核事实中受益,那么你就应该准备好了平行。 免费的午餐结束;那就是:在过去,你的应用程序变得越来越快,当一个新的CPU被释放,你没有把任何努力,在您的应用程序,以获得额外的速度。 现在,采取的多核心CPU提供的功能优势,你要确保你的应用程序可以利用它的优势。那就是:你已经看到哪些任务可以多线程/并发执行,这带来了一些问题,表...

了解二郎/ F#(取决于您的平台)

  • 喜欢不可改变的数据结构、它们的使用会使软件更容易理解,不仅在并行的程序。

  • 学习工具并发己的语言(例如java。工具.并发的, JCIP).

  • 学习的功能语言(e。克 Haskell).

我一直在问同样的问题,得到的回答是,“这取决于”。如果您的乔的WinForms,也许没有这么多。如果你书写的代码必须是高性能的,是的。一个我可以并行编程所见到的最大的问题是这样的:如果事情无法parallized,和你说谎,并告诉运行时并行不管怎么说,它不会崩溃的事情,它只是打算做的事情错了,你会得到废话结果和指责的框架。

了解OpenMP和MPI为C和C ++代码。

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

写小程序。

其他代码语言/风格会让你做多线程更好(虽然多线程还是真的很难在任何语言),但对于普通开发者,恕我直言,最大的好处,就是执行大量的小程序的同时来完成一些更大的能力任务。

因此,得到在打破你的问题分解成可以,只要你想运行的独立部件的习惯。

您会过构建更易于维护的软件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top