随着处理器性能每两年翻一番的定律逐渐放缓,正面临着一系列新的挑战。传统的处理器在量子物理层面遇到了限制,并且在获得更快速度的同时,散热问题也变得日益严重。为了应对这些挑战,像Intel和AMD这样的处理器制造商开始转向多核技术和并行化来提升处理器的性能。
在不久的过去,软件工程师不需要担心编写复杂的多线程或多核代码——他们只需要编写单线程代码,然后依赖硬件供应商每两到三年更新一次架构。应用程序运行得更快,工程师不需要做任何额外的工作。
随着新的、强大的架构的出现,如Intel Xeon Phi系列,一切都发生了变化。但是,为了利用这些额外的核心,处理器制造商不得不在硬件和软件中都加入并行化。降低延迟和提高吞吐量所带来的更高速度是其中的一个好处。这对于专注于减少单个作业的墙钟时间(例如电话交换应用程序)的开发者来说尤为重要,或者对于那些专注于吞吐量、关心在特定时间内处理尽可能多作业的开发者来说也是如此。
对于开发者来说,这种转变意味着他们必须从设计过程的最早阶段开始考虑如何并行运行应用程序。幸运的是,现在有了一系列新的选择,包括利用多线程或配置多个处理器并行运行。一个多核系统可能有专门的处理器用于特定的应用程序。例如,一个采购订单处理系统可能有一台处理器或一个单独的线程专门运行基于Word的应用程序。另一个可能处理Excel电子表格,而另一个则处理由Internet Explorer处理的任务。所有这些单独的应用程序都可以并行运行。可能会涉及进程间通信。
如果开发者决定基于系统的多线程能力开发并行代码,生活可能会变得复杂。学习如何为多线程系统编写应用程序被广泛认为是软件编程中最困难的任务之一——如果不是最困难的话。以前,程序员只需要处理一个线程。现在,对于为多线程处理设计的复杂应用程序的任何部分的更改都可能影响整个系统——一切都必须改变,创造了新的复杂性水平。
线程完整性和安全性成为问题。新线程可能会与现有线程失去同步,开发者可能会遇到诊断问题的显著困难。时间可能非常紧迫——一毫秒的不一致行为可能会引发多个问题,这些问题似乎有了自己的生命。
Intel与Rogue Wave Software的合作
调试是这个环境中最困难的任务,为开发者带来了新的挑战,或者促使他们开始使用大大简化和抽象这些复杂性的工具。他们可以处理不同的语言,如C、C++和那个老马车,FORTRAN。Intel的VTune和Rogue Wave的TotalView HPC就是这样的工具之一。两家公司最近的合作产生了TotalView Xeon Phi Debugger。
Rogue Wave表示,TotalView支持更快的故障隔离、改进的内存优化和动态可视化,用于通常涉及数百或数千个核心的大规模并行和多核应用程序。TotalView包括一套工具,为科学和学术开发者提供了对进程和线程执行的控制,以及对程序状态和数据的深入可见性。
"TotalView允许在单个窗口中同时调试多个进程和线程,"Rogue Wave的首席产品经理Marty Bakal说。"开发者可以完全控制程序执行。"这允许开发者在单个线程或任意一组进程或线程中运行、逐步执行和停止他们的应用程序。他们还可以通过反向调试从失败中工作,通过消除重复启动应用程序、再现和解决并发程序中可能发生的困难问题的需要,更快地隔离根本原因,这些程序利用了线程、OpenMP、MPI、GPU或协处理器。
TotalView为开发者提供了全面的支持,使他们能够在Intel Xeon Phi处理器上查看、控制和调试。例如,TotalView提供了:
- 支持原生、卸载和对称编程模型
- 支持Xeon Phi上的原生和对称应用程序的内存调试
- 完全异步线程控制
- 某些断点的共享
- 支持集群和多设备配置
- 支持在Intel Xeon Phi上本地启动MPI和混合MPI + OpenMP
展望未来
今天,Intel在市场上主要以24核机器为代表——6个芯片,每个芯片有4个核心。但是,预测未来几年处理器演变的推测性路线图预测,机器将有100个核心。包括一些主要的速度障碍需要解决。例如,开发者可能采用一块传统软件,做所有正确的事情使其在并行中高效运行,调试整个系统,并将其放在一个8核机器上,它运行得很好,利用了所有8个核心。但是当移植到一个96核机器时,一切都停止了。这个问题将被解决,但挑战永远不会缺乏——例如,由I/O和数据访问复杂性产生的新瓶颈。
以下是一些可能出现在未来的一些随机场景。还有一些建议:
- 将构建具有高速背板的系统,其中所有机架共享背板,使其看起来像一个大盒子。应用程序将像在一台机器上有128个核心可用一样运行。
- 未来的软件解决方案将使用现有的应用程序,如MPI和OpenMP。OpenMP将把线程任务交给编译器,减轻开发者的任务。
建议——在开发周期的早期考虑并行性。为了充分利用其在设计后期阶段的能力和复杂性。
在开发阶段尽早调查所有可用的工具,最好在设计阶段开始时。