我正在研究多核处理器。特别是我正在寻找为多核处理器编写代码,以及为多核处理器编译代码。

我对该领域的主要问题感到好奇,这些问题目前将阻止编程技术和实践的广泛采用,以充分利用多核体系结构的功能。

我知道以下工作(其中一些工作似乎与多核体系结构没有直接关系,但似乎与并行编程模型,多线程和并发性有更多关系):

  • Erlang(我知道Erlang包含一些促进并发的结构,但是我不确定它在多核体系结构中的利用率如何)
  • OpenMP(似乎主要与多处理和利用集群的功能有关)
  • Unified Parallel C
  • Cilk
  • Intel Threading Blocks(这似乎与多核系统直接相关;它来自英特尔。这很有意义。除了定义某些编程结构之外,它似乎还具有告诉编译器针对多核体系结构优化代码的功能)。

    总的来说,根据我对多线程编程的很少了解,我知道考虑并发和并行性的编程绝对是一个困难的概念。我还知道,多线程编程和多核编程是两回事。在多线程编程中,您要确保CPU不会保持空闲状态(在单CPU系统上。正如James指出的那样,操作系统可以安排不同的线程在不同的内核上运行,但是我更感兴趣的是从语言本身,还是通过编译器)。据我所知,您不能真正进行并行操作。在多核系统中,您应该能够执行真正的并行操作。

    因此在我看来,当前多核编程面临的问题是:
  • 多核编程是一个困难的概念,需要大量技能
  • 当今的编程语言中没有任何 native 结构可为多核环境的
  • 编程提供良好的抽象
  • 除了Intel的TBB库之外,我还没有在其他编程语言中做出任何努力来利用多核体系结构的强大功能进行编译(例如,我不知道Java或C#编译器是否为多核系统优化了字节码,甚至JIT编译器执行此操作)

  • 我有兴趣知道可能还有其他问题,以及工作中是否有解决这些问题的解决方案。链接到研究论文(以及类似性质的东西)将很有帮助。谢谢!

    编辑

    如果我不得不将我的问题简化为一句话,那就是:当今的多核编程面临哪些问题,并且该领域正在开展哪些研究来解决这些问题?

    更新

    在我看来,多核还需要涉及三个层次:
  • 语言级别:抽象化并行化和并发性的结构/概念/框架,使程序员可以轻松地表达相同的
  • 编译器级别:如果编译器知道其要编译的体系结构,则可以针对该体系结构优化已编译的代码。
  • 操作系统级别:操作系统优化了正在运行的进程,并可能安排了不同的线程/进程以在不同的内核上运行。

  • 我搜索了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/

    10-10 23:11