我正在研究多核处理器; 具体来说,我正在考虑为多核处理器编写代码,并为多核处理器编译代码.
我很好奇这个领域的主要问题,这些问题目前阻碍了编程技术和实践的广泛采用,以充分利用多核架构的强大功能.
我知道以下的努力(其中一些似乎与多核架构没有直接关系,但似乎更多地与并行编程模型,多线程和并发性有关):
总的来说,从多线程编程的经验来看,我知道用并发和并行编程的编程绝对是一个困难的概念.我也知道多线程编程和多核编程是两回事.在多线程编程中,您确保CPU不会保持空闲(在单CPU系统上.正如James所指出的,操作系统可以安排不同的线程在不同的内核上运行 - 但我更感兴趣的是描述并行操作语言本身,或通过编译器).据我所知,你不能真正做并行操作.在多核系统中,您应该能够执行真正的并行操作.
所以在我看来,目前多核编程面临的问题是:
我很想知道可能存在的其他问题,以及是否有任何解决方案可以解决这些问题.研究论文(以及那种性质的东西)的链接会很有帮助.谢谢!
编辑
如果我不得不将我的问题简化为一句话,那就是:今天多核编程面临的问题是什么?该领域正在进行哪些研究来解决这些问题?
UPDATE
在我看来,有三个层次需要关注多核:
我搜索过ACM和IEEE,并找到了一些论文.他们中的大多数人都在谈论同时思考是多么困难,以及当前语言如何没有正确的方式来表达并发性.有些人甚至声称我们拥有的当前并发模型(线程)不是处理并发的好方法(即使在多核上).我有兴趣听取其他意见.
我很好奇这个领域的主要问题,这些问题目前阻碍了编程技术和实践的广泛采用,以充分利用多核架构的强大功能.
惯性.(BTW:这几乎是所有 "阻止广泛采用"问题的答案,无论是并行编程,垃圾收集,类型安全还是节能汽车的模型.)
自20世纪60年代以来,我们已经知道线程+锁模型从根本上被打破.到1980年,我们有大约十几个更好的模型.然而,今天使用的绝大多数语言(包括1980年以后新创建的语言)只提供线程+锁.
多核编程的主要问题与编写任何其他并发应用程序相同,但是以前计算机中具有多个 cpu 并不常见,但现在很难找到任何只有一个核心的现代计算机,因此,多核的优势,多CPU架构存在新的挑战。
但是,这个问题是一个老问题,每当计算机体系结构超越编译器时,后备解决方案似乎就是回到函数式编程,因为如果严格遵循该编程范式,就可以编写非常可并行的程序,因为您没有例如,任何全局可变变量。
但是,并不是所有问题都可以使用 FP 轻松解决,因此我们的目标是如何轻松地让其他编程范例易于在多核上使用。
首先,许多程序员都避免编写良好的多线程应用程序,因此没有足够多的开发人员做好充分准备,因为他们养成的习惯将使他们的编码变得更难。
但是,与 CPU 的大多数更改一样,您可以了解如何更改编译器,为此您可以查看 Scala、Haskell、Erlang 和 F#。
对于库,您可以查看 MS 的并行框架扩展,作为一种使并发编程变得更容易的方法。
它正在工作中,但我最近在 IEEE Spectrum 或 IEEE Computer 上发表了有关多核编程问题的文章,因此请查看 IEEE 和 ACM 就这些问题撰写的文章,以获得有关正在研究的内容的更多想法。
我认为最大的障碍是让程序员改变他们的语言很困难,因为 FP 与 OOP 有很大不同。
除了开发能够以这种方式良好运行的语言之外,研究的一个地方是如何处理访问内存的多个线程,但是,与该领域的许多内容一样,Haskell 似乎处于测试这一想法的最前沿,因此您可以查看Haskell 发生了什么事。
最终将会出现新的语言,并且可能我们有 DSL 来帮助开发人员进行更多抽象,但是如何对程序员进行这方面的教育将是一个挑战。
更新:
您可能会感兴趣第 24 章并发和多核编程,http://book.realworldhaskell.org/read/concurrent-and-multicore-programming.html