论文部分内容阅读
普适计算应用通常需要感知上下文。借助上下文,普适计算应用能够感知到环境的变化,并调整自身的行为,使其适应这种变化,即提供基于新的环境的服务。然而,环境是不可控的,它存在着各种噪音和干扰。这些噪音和干扰会影响上下文的准确性。不准确的上下文可能不能正确地反映环境的变化,使得普适计算应用无法做出正确的应对,甚至会使得其提供的服务变得不可靠。这种情况称之为上下文不一致问题。 为了保证上下文的准确性,普适计算应用在使用这些上下文之前,需要对其进行准确性验证。一个流行的验证上下文准确性的做法是使用约束检测,即根据应用需处理的上下文,预先定义一组约束,这些约束描述了上下文必然满足的一些性质。若接收到的上下文满足了所有约束,则认为它是准确的。然而,这会给普适计算应用带来额外的计算负担。由于普适计算应用通常需要应对海量的上下文信息,这些额外的计算量也会非常大,导致上下文验证的效率不高,进而降低了普适计算应用的服务质量。已有的工作提出了增量式或者并行化的约束检测方法来提高其效率,但是它们会占用较多的计算资源。在这篇文章中,提出了一个基于GPU的高效的并发约束检测的方法,称之为GAIN,它能在占用少量的CPU资源的情况下达到很高的约束检测效率。具体而言,本文工作主要包括如下几个方面: 设计并实现了GAIN。主要解决了两个难点:设计高效可行的并发检测模型以最大化GPU的利用率,以及设计高效的并发数据存储模型以最小化数据存储的代价。具体的说,GAIN能够自动识别出一条约束中的可并行计算单元,并生成大量GPU线程并行处理各个可并行计算单元的数据。在这个设计下,各个GPU线程执行同样的指令序列,使得这些线程能同时在GPU上执行,从而达到很高的并发程度。同时,通过设计合适的并行计算单元的调度策略,GAIN能够消除约束检测中的递归处理,进一步优化了性能。为了提高约束检测时GPU端的数据读写性能,开发了一种基于静态分配的两层存储模型,使得其在使用尽量少的原子操作的情况下,能够无冲突无竞争地实现对不定长数据的并发读写。 考查了多种因素对GAIN的效率的影响,并且使用多条不同结构的约束和一个实际应用对比了GAIN和基于CPU的约束检测方法的性能。实验结果表明,相比于基于CPU的约束检测方法,GAIN能在使用更少CPU计算资源的情况下达到2至7倍的性能上的提升,同时,对于不同的负载,GAIN能保持稳定的性能,即它具有更高的可扩展性。 在本文中,GAIN被应用在普适计算的约束检测中。但是,GAIN的适用范围并不止于此,它支持以一阶谓词逻辑表达的所有约束的检测。用户只需要提供数据以及约束,后续的约束分析和检测都可以自动执行。