我正在研究多核处理器。特别是我正在寻找为多核处理器编写代码,以及为多核处理器编译代码。
我对该领域的主要问题感到好奇,这些问题目前将阻止编程技术和实践的广泛采用,以充分利用多核体系结构的功能。
我知道以下工作(其中一些工作似乎与多核体系结构没有直接关系,但似乎与并行编程模型,多线程和并发性有更多关系):
总的来说,根据我对多线程编程的很少了解,我知道考虑并发和并行性的编程绝对是一个困难的概念。我还知道,多线程编程和多核编程是两回事。在多线程编程中,您要确保CPU不会保持空闲状态(在单CPU系统上。正如James指出的那样,操作系统可以安排不同的线程在不同的内核上运行,但是我更感兴趣的是从语言本身,还是通过编译器)。据我所知,您不能真正进行并行操作。在多核系统中,您应该能够执行真正的并行操作。
因此在我看来,当前多核编程面临的问题是:
我有兴趣知道可能还有其他问题,以及工作中是否有解决这些问题的解决方案。链接到研究论文(以及类似性质的东西)将很有帮助。谢谢!
编辑
如果我不得不将我的问题简化为一句话,那就是:当今的多核编程面临哪些问题,并且该领域正在开展哪些研究来解决这些问题?
更新
在我看来,多核还需要涉及三个层次:
我搜索了ACM和IEEE,并找到了几篇论文。他们中的大多数人谈论同时思考有多困难,以及当前的语言如何没有表达并发的适当方法。有些人甚至声称我们拥有的当前并发模型(线程)不是处理并发的好方法(即使在多个内核上)。我有兴趣听取其他意见。
最佳答案
多核编程的主要问题与编写任何其他并发应用程序相同,但是在一台计算机中拥有多个cpus并不罕见之前,现在很难找到其中只有一个内核的任何现代计算机,因此多核的优势,多个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
关于multicore - 多核系统的编程和编译状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3647444/