| 最终修改于 : | 2007年09月29日 11:05 |
评级 |
|
要随着硬件的改进而提升研究和临床医疗中所用软件的性能,需要关注线程问题。本文论及的一系列代表性因素将帮助开发人员认清为实现长期的可扩充性在特定软件解决方案内部需要攻克的难题。
作者:Matt Gillespie
医疗行业计算解决方案的进步是推动现今医疗行业实现高速可持续发展的核心要求。有两个核心因素推动着这一需求的发展:一是利用复杂的建模和分析能力支持研究和患者护理的需求,二是控制医院和其它医疗点设施的医疗交付成本的能力。
前者包括在医药品和遗传学等领域实施研究模拟等方法,以及对医疗图像、血液和组织样本及各种测试数据进行自动处理与分析。后者包括简化业务流程、管理供应链及在日益复杂的护理环境中减少出错率。
此处的扩充既包括适应更大的数据集,又包括充分利用硬件方面的进步。两种解决方案均得益于适应大型数据的能力,这一能力将支持它们提供更全面、更优质的结果。同时,它们必须能够充分利用英特尔和整个计算行业都在倡导的、并行化程度不断提高的处理器架构。这些架构由多核处理、对称多处理器 (SMP) 系统、高性能计算 (HPC) 架构及相关组合构成。
支持所有这些并行性的一个重要因素是提高数字医疗软件应用的多线程化程度。作为本身很复杂一项事业,多线程软件的要求将随着并行水平的提升而变得日益苛刻。也就是说,面向两个内核的多线程软件不仅会为拙劣的线程实践付出性能代价,还会面临一些其它挑战,而当线程软件面向四核、八核、十六核或更多内核时,容许的误差幅度就会小得多。
数据访问中的同步需求和潜在冲突随着软件支持的内核数量的增加而呈指数级增长。鉴于英特尔已经展示了一颗 80 核的概念验证处理器,毫无疑问,要在未来的竞争中立于不败之地,数字医疗软件开发商必须做好准备,使他们的应用支持不断提升的并行性。为此,本文概述了当存在大量可用的处理器内核时将限制数字医疗应用软件进行逐步扩充的若干个重要因素,希望能对其有所帮助。
评估面向多核架构的医疗软件优化的一个重要考虑因素是应用工作负载的固有连续程度。当大问题分解为小任务时,某些任务间的依赖性很有可能妨碍它们接受严格的并行操作。例如,如果任务“A”的输入数据包含任务“B”的输出数据,那么任务“A”就必须在任务“B”开始前完成。要解决 (1+2)*3 这个问题,最简单的算法是先计算 1+2,然后用其和乘以 3。当采用并行方法处理此问题时,我们可同时计算 1*3 和 2*3 的积,然后将结果相加。尽管这样也会得出正确的答案,但此方法需要做更多的工作,将造成一定的性能损失。
大问题通常涉及到某个连续的部分,并且该部分在总体应用代码中的份额越大,它对总体应用可扩充性的限制也越大。对此,我们可以根据阿姆达尔定律,利用特定数量的处理内核进行分析,确定某一给定应用的理论最大加速值。假设 s 是固有连续部分占应用的百分比(表示为 0 到 1 之间的一个小数), n 是可用处理内核的数量,则无任何开销的完美线程的理论最大加速值如图 1 所示:
图 1.阿姆达尔定律
为阐明此公式的意义,首先应考虑 s(固有连续代码的数量)等于零时的情况。这种情况包括通常所指的密集并行问题,且其实际近似情况可能包括医疗数据的渲染或其它判读。每个像素(在基于图像的研究中,如 CT 或 MRI)或每一帧或时间段(在基于时间的研究中,如 fMRI 或 EEG)均可单独渲染。
当连续代码数量趋于零时,最大理论加速值趋于 n。因此,在理论上,一项在八核系统上运行的、无连续代码的应用可以实现 8 倍的加速。随着应用中的固有连续代码数量的增加,最大理论加速值会减少,如图 2 所示:
图 2.根据阿姆达尔定律得出的最大理论加速值
同样还需考虑并行应用可用的内核数量无限多时的情况,这将有利于应对未来每个处理器的内核数量持续增多的情况。当 n 趋于无穷大时,则理论最大加速值趋于 1/s。此关联可用于粗略测量一项应用的多线程长期值。例如,如果一项应用中的连续代码部分占到 25%,则无论采用的处理内核数量有多少,该应用通过多线程实现的理论最大加速值可达 4 倍。
如上所述,根据阿姆达尔定律计算出的理论最大加速值不是引起线程开销(有时开销较大)的原因。此类开销包括以下与管理线程相关的因素:
线程创建开销:创建线程需要消耗一定的系统资源,这部分资源将不能用于执行某项应用正在处理的主要任务。这种因素对可扩充性的影响可通过线程池(创建可复用线程)和更大的(外部)线程循环(如可能)来消除。
锁定管理(同步)开销:在关键的代码段需要锁定数据位置以防发生争用情况,否则,将导致某一线程随意覆盖另一线程正在使用的数据。由于锁定数据位置可限制其它线程对数据的使用,这样便会使一个线程在等待另一个线程执行完毕后再使用数据;锁定数据位置通常是线程开销的主要源头,可导致总体执行速度减慢。
锁定管理开销将在下面的“同步问题”部分做进一步探讨。在某些情况下,管理线程所带来的开销可能超出了与其相关的收益。这个问题涉及到粒度的概念(宽松地定义为计算与开销的比率);从概念上而言,将一个问题分为多个较大“颗粒”的工作(意味着它们之间需要的开销份额变少)可提高效率。英特尔® 线程调节器可以帮助开发人员识别开销并了解开销对执行产生的影响。
阿姆达尔定律的另一个局限性在于它忽略了一个事实,即随着可用的计算资源越来越多,问题的大小也自然会不断升级。例如,随着电脑功能的日益强大,消费者除了对效率的要求更高外,他们还希望电脑上运行的应用能满足更多的业务需求。问题变大通常会造成连续计算比例降低,从而提高可扩充性。
实际上,这也可能导致在研究和分析应用中利用具有更多数据点的更大问题集,以及利用更高分辨率的图像或更大规模的模拟。面向医院或临床设备的操作软件中可能集成了更多复杂的功能,如将患者的生命数据与运行平均数进行对比或提供实时数据分析以辅助诊断。
另一个影响应用可扩充性的重要因素是线程间工作负载的不均衡。为了验证上述论断的正确性,可以考虑一种极端情况,即利用某个应用将单个患者的数据与一个大型数据库进行比较,以评估特定治疗过程的假定结果。在一个双线程应用中,其中一个线程负责查询一个大型数据库,并对检索的数据进行对比计算,而另一线程负责更新基于文本的用户界面。在这里,界面线程执行的任务比另一线程要少得多,因此,在它等待数据写入界面时就会产生闲置的处理器资源。
上面的例子比大多数实际问题更清晰,它阐明了工作负载不均衡的概念。事实上,工作负载不均衡的问题在拥有大量执行内核和活动线程的系统中更加突出,这是因为在双核双线程系统中,闲置时间很容易被误认为连续的代码段。当更多的内核可用时,如果多内核的 CPU 利用率下降,则表明多个线程正在等待其它线程完成各自的任务,这是工作负载不均衡的明显表现。
因此,检测负载不均衡的一个方法是在 Windows* 中使用 perfmon 或在 Linux* 中使用 mpstat,并密切注意在执行中的个体内核使用率意外下降的情况。另外一种方法是使用英特尔® 线程调节器中的“档案视图”来观察活动线程状态期间线程间的差异,如图 3 所示。
图 3.英特尔® 线程调节器中活动线程状态的差异表明工作负载不均衡。
如上所述,与锁定关键代码段相关的同步问题可能是应用中线程开销最重要的来源。这些锁定可用于管理对共享资源的访问,能够通过一次只允许一个线程进入关键段的方式来避免冲突。此后,关键段可在某些代码区域内使执行连续进行。如果一个线程在一个关键段中花费的时间长,则其它线程可能需要等待很长的时间,才能获得该区段的锁定。
关键段越短,对性能的影响越低。同时,大量的小关键段将带来与获取和释放锁定相关的巨额开销。因而,一边是整个数据体,另一边是无数小关键段,在这个超大关键段的两极间需要一个平衡。英特尔® 线程调节器能够帮助达到完美平衡。在英特尔® 线程调节器中高度竞争的同步物体与大量锁定或执行过程中的影响时间有关。
在许多情况下,使用一个线程 API(如 OpenMP*、Pthreads* 或 Win32 API)提供的同步例程而不是手工编码是一种不错的做法。这样可以帮助避免当线程数量增加时出现的可扩充性问题,尤其是随着处理器架构之间的移植可能出现的复杂问题。此外,由于与这些 API 相关的同步例程得到了很好的调节,它们不会将使总的应用调节过程复杂化。
随着医疗成本持续增加,整个行业中的竞争日趋激烈,医疗研究者和护理机构将继续从计算技术中寻求提高工作效率、增添新功能的方法。他们在开展更复杂的研究活动和提高运营效率方面的能力将帮助推动整个行业的发展,为软硬件提供商提供一次绝好的机遇。
增加硬件并行性(从处理器上执行内核的繁衍之势可见一斑)是计算行业为可预见的未来提供更高性能的主要手段。为充分利用这些进步成果,数字医疗软件提供商需要提升其产品的多线程化程度以及多线程实践的质量。
开发商应注意那些影响其应用在硬件(具备不断增加的大量执行内核)上的可扩充性的因素。这样,他们便可以提高应用性能,向自己的产品中添加更多具有竞争优势的特性和功能,从而在市场中立于不败之地。
您可围绕如下材料进一步探讨本话题:
英特尔提供的医疗研究和解决方案
将通过提供先进的技术解决方案,促进医疗质量的改进,达到提高人们健康水平的目的。
英特尔进行的医疗研究和创新
开拓了新途径,让无处不在的计算满足人们在家里和日常生活中的日常健康和保健需要。
英特尔® 多核开发人员社区
将与创建能够充分利用多核处理技术的软件相关的各种开发资源集中在一起。
英特尔® 多核技术和研究门户
帮助您了解当前英特尔多核技术的各种资源,以及正在进行的创新和研究。
移动临床助理
是英特尔协助开发的一款面向临床医师的移动护理点解决方案,它可减少配药错误,减轻人员工作负担。
|
|
Matt Gillespie 是芝加哥地区的技术文档独立作者和编辑,主要关注领域为新兴的硬件和软件技术。在此之前,Matt 在英特尔公司为软件开发人员开展培训课程,他还曾任职于加州联邦银行互联网技术服务部。在其职业生涯的最初几年,他还从事过金融出版和神经科学领域的作家兼编辑的工作。 |