技术开发 频道

多核并行软件开发 工具成关键?

  轻松集成

  对.NET开发者,Intel Parallel Studio可以和微软的开发工具Visual studio2005/2008轻松方便的集成,安装Intel Parallel Studio后,在VS2005/2008中就会出现Composer、Amplifier和Inspector的菜单和工具栏。

  多核开发 程序员的2.0计算时代

  走进多核开发的2.0时代是需要代价的,对于个人开发者来说,学习成本确实将会再度大幅提高。传统模式的一些编程思想和模型在多核时代下将面临更替,掌握更多工具和程序库也成为了软件开发更高的门槛。但这也为不断学习、勇于创新的开发人员提供了新的机会。

  尤其是对于系统软件的开发人员来说,除了现有的技能以外,还需要对并行计算的原理有更清晰的认识。如果能将这种认识建立在更高的层次上,将会让个人得到更大的成长。多核所带来的机会就如同上世纪90年代末的Java一样,看清这个趋势,只要领先半步,就可以更好的把握多核时代的脉搏。

  当然,并非每个开发人员都需要了解底层代码的细节,理解并利用类似线程化构建块(Treading Building Blocks,简称TBB)这种能从更高抽象层次理解多核计算的方式,会让程序员更快成长。其实一切软件技术的思想并不复杂,学会使用程序库和构件模块,也许可以帮助你更顺利地迈进新时代。

  资料:

  在多核平台上,各线程根本不需要为了得到某种资源而挂起等待,因为各线程都是在相互独立的执行核上并 行运行的。例如,假设有两个线程都要执行移位操作,那么,在单核平台上,两个线程需要竞争唯一的移位单元,因而必须顺序执行,而对于双核平台而言,因为存 在两个移位单元,所以两个线程能够并行执行而无须竞争。

  多 核平台为开发人员提供了一种优化应用程序的渠道,那就是通过仔细分配加载到各线程(或者各处理器核)上的工作负载(也就是实现各线程的负载均衡)就能够得 到性能上的提升。并且,开发人员也可以对应用程序代码加以优化,使其能够更加充分地使用多个处理器资源,进而达到提升应用程序性能的目的。

  在面向多核平台设计多线程应用程序的时候,开发人员必须采取与面向单核平台时不同的设计思想。在单核平台上,为了简化多线程应用程序的编写和调试,开发人 员可能会作一些假设。但是这些假设可能不适用于多核平台。对于这两种平台,设计思想的不同之处主要体现在存储缓存(memory caching)和线程优先级(thread priority)两个方面。

  在 存储缓存方面,多核平台上的每个处理器核都拥有自己的cache。在某个时间点上,一个处理器核上的cache与另一个处理器核上的cache可能会出 现不同步的现象。下面给出一个例子来解释可能出现的这种cache不同步问题。假设有两个线程分别运行在双核处理器的两个执行核上,线程1在执行核1上运 行,线程2在执行核2上运行,而两个线程分别对邻近的存储器单元进行读写操作。由于cache存储器是基于局部性原理来工作的,故不同的数据可能存放在 cache的同一行中。因此,即使某个线程所需的位于某个cache块中的数据没有被重写过,存储系统还是可能会将该cache块标记为无效。这个现象就 是众所周知的伪共享(false sharing)问题。但是在单核平台上,因为只有唯一的cache供各线程共享,所以就不存在cache同步问题。

  在 单核与多核平台上采用相同的线程优先级策略也会导致不同的程序行为。例如,假设一个应用程序有两个进程,这两个进程的优先级不同。在进行性能优化的时候, 开发人员会假定优先级较高的线程可以一直享用执行资源,而不会受到优先级较低线程的干扰。这在单核平台上是正确的,因为操作系统的调度程序不会为优先级较 低的线程分配CPU资源,而对于多核平台而言,因为调度程序是在不同的执行核上调度这两个线程,所以两个线程是同时执行的,也就是说在这种条件下,线程的 优先级不起作用。如果开发人员仍然遵循优先级较高的线程不会受到优先级较低线程的干扰的思想对代码进行优化,这样的代码在多核和多处理器系统上运行就会非 常不稳定。

0
相关文章