国际生物医学成像杂志》上

PDF
国际生物医学成像杂志》上/2011年/文章
特殊的问题

并行计算在医疗成像应用

把这个特殊的问题

研究文章|开放获取

体积 2011年 |文章的ID 137604年 | https://doi.org/10.1155/2011/137604

丹尼尔•古德曼Jeyarajan Thiyagalingam,朱莉娅·a·施纳贝尔安妮Trefethen,韦森特格劳, 使用gpu的有效的医学图像序列的运动估计”,国际生物医学成像杂志》上, 卷。2011年, 文章的ID137604年, 15 页面, 2011年 https://doi.org/10.1155/2011/137604

使用gpu的有效的医学图像序列的运动估计

学术编辑器:亚m . Kadah
收到了 2011年04月01
接受 2011年6月3日
发表 2011年8月18日

文摘

图像无处不在在生物医学应用程序从基础研究到临床实践。快速增加的分辨率,维数的图像和实时性能在许多应用程序中,需要计算需求需要适当的开发多核架构。对这一点,GPU-specific图像分析算法的实现特别有前途。在本文中,我们调查的映射一个增强的运动估计算法小说GPU-specific架构,其中产生的挑战和好处。使用数据库的三维图像序列,我们表明,该映射会导致可观的性能提升,60倍,可以提供近实时体验。我们还展示了建筑特点可以最好的利用这些设备的算法,最专为解决挑战相关的访问模式和不同的内存配置。最后,我们评估算法的性能在三个不同的GPU的体系结构和执行结果的综合分析。

1。介绍

运动估计的基本和关键操作在机器视觉和视频处理应用程序。过程通常是计算密集型和最小化的时间估计在多个帧通常是一个交互式图像/视频处理应用程序的关键目标。我们会看到在即将到来的几节中,任务是重复,并呈现为并行开发架构本身。随着多核机器的兴起,比如很多核心微处理器和图形处理单元(gpu),很自然的是丰富的并行性可以在这些系统是利用映射算法。其中,gpu已经成为越来越普遍的使用在许多科学领域。

有几个原因这样一个广泛的采用gpu横跨多个学科。现代gpu包含成百上千的计算核心,成为可以在同等的成本的一小部分传统CPU-based系统。这相对测量的性能与价格和性能与功率比值之间基于gpu的体系结构和CPU-based架构进一步鼓励gpu的选择。

然而,性能收益并不是没有重大挑战。首先,识别和开发的并行应用程序开发人员的责任。通常,这需要大量的重新映射工作,而不是简单的程序转换和经常变化的基本算法。其次,GPU编程模型并不明显的底层架构。详细的知识体系结构的基本编写有效的基于gpu的应用程序。

这些问题在一定程度上克服由不同的编程模型,如OpenCL [1)或CUDA (2,3]。在实践中,尽管这些编程模型简化编程这些设备的任务,他们远离在特定领域提供的抽象级别。

的GPU实现一些特定的图像处理算法已经可用,包括光流算法概述的Marzat et al。4]。然而,在这篇文章中,我们考虑一个更复杂的,完整的和增强版本的原始光流算法。我们使用的运动估计算法在本文中结合了局部和全局优化和运动期间保留体积estimation-a心血管医学图像分析的关键要求。然后我们的运动估计算法映射到三个不同的GPU系统以适当的优化。我们选择了GPU的体系架构的代表时间线和相关重要GPU的体系结构方面。我们有效地演示算法的适用性使用一组三维图像序列。使用这个作为评估阶段,我们讨论的相对优缺点并强调架构的实现算法和结果中对总体性能的影响。我们所知,在gpu的背景下,没有全面讨论这个级别的运动估计算法的文学。我们综合分析架构和编程决策的影响可以抽象为不同的图像处理应用程序。我们相信这将是一个非常宝贵的资源(生物医药)图像分析研究人员,这是,因此,本文的基本目标和贡献。

本文的其余部分组织如下:部分23作为背景的。我们首先讨论了基于gpu的系统部分2突出的差异,传统的CPU-based系统适用的地方。然后,我们讨论背后的数学运动估计部分3和简明地制定运动估计算法。接着是由部分4,我们详细讨论实现和映射方面突显出架构方面必要的地方。我们评估的性能增强的算法部分5我们分析的演讲。最后,我们总结论文部分6总结我们的主要结论和进一步的研究方向。

2。与gpu的并行性

利用显卡或加速卡的计算能力并不是一个新概念。然而,历史上他们格外努力的程序,要求程序员有相当深入的了解,他们的指令集,或者熟悉OpenGL电话和材质语言。然而,通过引入统一计算设备架构(由Nvidia CUDA),此设置有所改善,而显著。CUDA既是一种编程模型以及硬件模型耦合在一起,提供相当的高级利用gpu。将观察到的,这仍然是一个亲密的知识必须维护利用他们的潜力,但它相对容易着色语言或OpenGL调用。

2.1。GPU的体系结构

统一计算设备架构(CUDA -)启用GPU连接到主机系统通过高速共享总线,如PCI Express。我们将会显示一个典型的GPU在图的内部安排1(一)。每个GPU由流多处理器的数组。每个流多处理器是挤满了大量的标量处理核心,名叫流处理器,或者仅仅是核心。这是显示在图1 (b)。这些标量处理器的基本计算单位,CUDA线程执行。例如,Nvidia Tesla GPU C2070有14流多处理器,每个流多处理器由32个流处理器,总共产生448个流处理器。核的数量每多处理器或多处理器的数量每GPU因设备而异。在CUDA,所有线程创建和管理的硬件。结果,管理费用几乎可以忽略不计,这导致大量的线程执行的可能性,几乎瞬间切换它们。

与多核cpu处理器目前包含一个相对少数的核心都能完全独立地操作,计算核内gpu在串联和同步的方式工作。

除了数量的计算核心,gpu的重要方面之一,不同的cpu是他们的内存子系统。在gpu中,传统的控制逻辑,致力于数据管理是用于计算核心,最大化的空间。这使得数据放置操作由程序员定义从硬件很少或根本没有帮助。然而,为了便于更好的放置策略,gpu配有不同的记忆。例如,在传统的cpu,数据放置是自愿做的,在缺乏任何位置,控制逻辑负责通过各种不同的记忆水平,提高数据保持一致性,存储它们。相比之下,在gpu的背景下,程序员负责将数据移动到适当的记忆。这种解放的方法导致了相当复杂的编程模型。例如,线程上下文的方式处理或数据是如何移动的保证数据的可用性计算之前现在程序员。

最近,gpu已经进化,而在这方面明显。gpu计算能力是有区别的。计算能力描述了CUDA硬件支持的特性。这些特性不同设备之间代代相传的线程的最大数量,支持IEEE-compliant双精度和相似。gpu的计算能力小于2.0,不支持任何自动数据放置或一致性机制。然而,从设备计算能力为2.0,称为Fermi-based架构,这已经发生了改变。Fermi-based设备包含缓存记忆但执行志愿数据管理的可能性。这意味着即使在缓存的存在记忆(见下文),还有一些关于数据放置和管理方面留给开发人员。一个更详细的信息可以在CUDA编程指南(2]。

最新一代的gpu(基于费米架构),内存系统和计算单位,部分安排在分层的方式排列在该内存系统。GPU通常有以下内存子系统:全局内存,一个常见的2级缓存,联合私人第1层和共享内存,缓存和纹理缓存。全球内存(也称为设备内存)是常见的处理器(因此所有线程)和访问延迟很高。私营一级缓存是独家流多处理器和具有低延迟连接。在处理器所二级缓存是很常见的,它有一个更好的比全局内存延迟。

常数和纹理的记忆都是只读记忆分开的共享内存。通过引入缓存记忆在gpu,积极开发两个常数和质地记忆执行只有在绝对必要的。然而,他们的负载粒度(单词量加载在负载指令)是不同的。因此,有时,它是有利于利用它们。常量内存允许处理器存储选择的每一组常量,他们要使用的本地计算允许快速访问,没有任何合并内存访问处理器之间的问题。纹理内存提供只读访问数据和类似架构不变的记忆,除了而不是指定的记忆卡作为一个整体,纹理绑定到数据存储在卡片的全局内存导致较大的数据容量。作为存储纹理内存设计在图形应用程序中,内存支持一系列的基于硬件的功能,如插值点的价值并不在整数位置。

此外,私营一级缓存可重构。这有限的内存池可以配置,这样它的一部分可以用作共享内存,而其余被用作缓存内存。这使应用程序能够获得部分数据放置的支持。系统支持固定数量的配置,配置适合给定的应用程序通常是无法提前知道,因此可能需要由实验决定。共享内存的总可用内存和/或上一级缓存当前Fermi-based系统是64 KB。这通常是用来缓冲的输入和输出,允许不自然地适应合并计算内存访问模式利用快速的数据传输。这个私人一级缓存/每流多处理器共享内存可用。除此之外,还有一个768 KB共享二级缓存,如果需要,可以关闭。

gpu,内存带宽计算核心通常高于上发现一个CPU,这意味着内核不太可能遭受饥饿的数据。此外,这种联系通常有额外的优化特定模式的访问是否坚持,经常采取合并内存访问的形式。如果随机访问内存,线程(uncoalesced),每个独立执行内存负载;然而,如果所有的核心在一组连续访问的内存位置(合并),从一个偏移量到内存是16的倍数,那么16内存加载可以通过时间通常需要执行一个。

2.2。CUDA GPU编程模型

CUDA编程模型,这是一个C编程语言的扩展,依赖于这个硬件支持提供并发性。在模型中,计算表示为特殊的函数被称为内核。从主机cpu内核启动和执行的 使用可用的计算核心(和线程 通常是在GPU上数千)。所有线程被组织作为一个的线程阻塞或二维网格。每一块可以一,两年,或者三维。线程在一块被分配到相同的流多处理器在执行期间。独特的编号方案的线程,每个线程可以计算在不同输入数据的子集,这样执行会导致单项目多数据(SIMD)风格并行。内存线程间的制度安排是这样,潜在的数据局部性可以利用计算核心。

CUDA编程模型进化模型随着时间的推移,原来依靠手动位置——意味着应用程序开发人员只负责把数据从主机内存设备内存(或反方向),利用任何重用依靠共享内存缓存或常量。然而,现代gpu部分支持自动数据位置,缓存最特别的记忆。正如在前一节中所讨论的,一级缓存的内存可以配置缓存内存或共享内存或两者兼而有之。然而,它是程序员的责任作出正确的判断是专用的内存数量为共享内存和缓存或确保延迟隐藏和内存请求设备内存是最佳带宽线性化开发(硬件内存合并)。只提供硬件支持和高速缓冲存储器的数据移动。符合传统的并行编程模型、存储传输量(对应于通信开销)可能抵消并行化的好处,如果它占据了执行时间。结果,它是性能关键内存传输系统和在GPU尽可能最小化。例如,如果一个内核提要输出的另一个内核,它有利于保留GPU设备内存中的数据没有任何中间传输到主机。

最新一代的CUDA设备支持许多其他功能,我们没有探索。这包括启动多个内核的能力和利用统一的记忆。

3所示。运动估计

3.1。背景

图像基本在一个广泛的生物医学应用,覆盖最方面的医学研究和临床实践。科技的进步带来了更高的分辨率和更高维度的数据集(三维和更高版本);此外,研究涉及几个模式就会变得越来越普遍。在这种情况下,它意味着自动图像分析是必不可少的。

给定数据集大小和可用的有限的时间每个病人在临床设置,图像分析算法的速度是至关重要的。

成像技术已经成为不可或缺的一部分,临床病人管理的所有方面,从诊断到引导微创手术干预。器官运动估计是必要的在很多应用程序中,因为运动提供了一个病态的存在的迹象(如在心脏成像的情况下),或者因为运动的存在不利于结果的准确性(如呼吸运动的影响评估的其他器官)。

运动估计已经在机器视觉丰富地调查和视频编码应用程序,在最小化的时间估计在多个帧通常是一个交互式应用程序的关键目标。医学成像与这些共享一些(但不是全部)方面并添加常用的三维序列(或更高版本)。作为一个例子,目前广泛使用的二维超声心动图(心脏的超声成像)正在逐渐取代了实时三维超声心动图(RT3D)。通常由RT3D扫描 体素每帧,大约20帧扫描。当地估计结构的运动需要评估各种心脏病。为了安装在临床协议,这个估计需要在几秒钟内完成,在理想的情况下。在图2运动估计是示例超声心动图序列。许多生物医学成像领域内的其他应用程序存在,在一些常规临床病例达到图像大小 每帧体素,可以更大的在基础科学应用程序(例如,组织病理学切片分析)。

提出了很多算法在医学图像序列的运动估计。事实上,运动估计的问题,有时候被认为是作为图像配准(对齐)过程中,在连续帧之间的登记,或在每一帧之间,一个选为参考,具体执行。这个打开的可能性使用任何方法提出了文学广泛的登记。注册方法的概述,读者写给评论等(5- - - - - -8]。

在本文中,我们使用一个基于光流的运动估计算法的方法。虽然我们并不认为这种方法是适合任何特定的任务,光流方法是目前在许多国家的艺术的运动估计算法和生物医学成像。特定的光流算法应用在这里,描述的部分3所示。23所示。3,有额外的优势相结合的几个通用的图像分析操作(旋转、篡改和偏微分方程的迭代解)。这正是一个好的范例的案例来说明生物医学图像分析的可能性和限制使用gpu,这是本文的目的之一。

3.2。混合运动估计算法

在本文中,我们使用提出的运动估计方法Bruhn et al。9],它结合了经典解决方案提出的光流估计角和Schunck [10和卢卡斯和金11),作为基线版本。有几个原因我们认为这是一个特别有关算法的目的。在[9]Bruhn等人报道优秀的结果,包括定量的比较,显示了算法优于许多以前公布的光流的方法。在随后的论文(12),他们提出了不同的改进算法的计算性能在一个单处理器平台,这也使得它成为一个很好的例子,探索多核的特性与单核的实现。最后,个人操作的算法包含许多常见的医学图像分析应用程序,因此可以被再利用。

光流的方法是基于假设对应点在两个连续帧图像的序列有相同的强度值。这个条件可以线性化只考虑第一的泰勒展开式的3 d图像 在哪里 时空的偏导数图像的像素强度吗 , , 是位移矢量的组件。方程(1)是一个约束方程和直接估计 , , 通过最小化衍生品在其中是一个欠定的问题,和额外的约束(s)是必需的。在这种情况下,最能做的就是获得的投影图像的梯度向量在相应的方向 ,这被称为孔径问题。

提出了几个方案来解决孔径问题。在[10),角和Schunck提出一个变分方法,它假定动作的流畅度场附近的估计,它试图最小化

换句话说,(1)转化为成本项 要最小化以及正则化项 这保证。适定性问题此外,α正则化项的重量,强度变化和运动的链接。

在[11),卢卡斯和金认为当地的运动一定地区内是恒定的ρ;这提供了一个线性方程组,可以直接解决。本文中采用的方法,最初由Bruhn et al。9混合),利用上述方法。这种方法利用正则化的地方(11和在全球层面10]。简而言之,需要计算矩阵的方法 符号后,从Bruhn et al。9), 是一个列向量包含衍生品的 关于 , 是一个与方差高斯内核ρ,这是卷积矩阵的每个组件。 用于表示矩阵高斯滤波器的应用。这将导致以下功能最小化: 还有的定义 的功能(4)是最小化通过求解相应的欧拉方程 在哪里 表示的拉普拉斯算子 ,我们使用在9)的符号 指在位置的值 在矩阵 。,(6)可以表示为一个线性方程组的形式 ,在那里 的拉普拉斯算子空间点在哪里 可以从附近近似元素如下: 我们代表的三维six-neighbourhood ,因为 图像分辨率。

方程的总数/未知的(6)是 ,这意味着需要使用迭代求解方法。在[9),Bruhn等人用逐次超松弛(SOR)方法。SOR方法运动值动态变化;也就是说,在迭代计算运动 将使用运动价值观已经在那个迭代计算。另一种是雅可比方法,基地在迭代所有运动的计算值 只有在上一次迭代的价值观,从而允许更有效的并行化。方程来计算 为每个体素 的上标 表示迭代数量和 是邻居的体素的数量吗 在域内。 代表组件的值 矩阵(3),在体元计算 在图像和计算迭代过程(即的开始。、独立的迭代数 )。类似的表达式可以很容易地发现在组件的运动领域 轴,分别 。因此从一个初始化的算法 , (零在我们的例子中)和precalculation的 值,迭代计算的值 , , 直到达到收敛。计算 在体素 因此,需要的值 , , 在相同的体素 和的值 在邻近的像素点 ,所有从上一次迭代的结果。

使用线性近似如(1)只能在很小的动作,这是过分严格的通用医学成像的应用程序。为了克服这个限制,可以申请整个过程迭代框架内,计算运动领域,应用于移动图像和运动估计过程重新开始使用这个新重新取样的图像。请注意,这并不需要重新计算的空间梯度 ,因为这些计算的固定形象。以同样的方式,整个过程可以嵌入在一个多分辨率框架没有任何重大变化。我们现在整个算法的算法1下面详细讨论。

初始化()
初始化()
1到
结束了

总之,算法可以分为这些子任务的GPU实现描述如下。(1)计算图像的衍生品强度对时空坐标: (2)计算得叉积的衍生品(这将对应于矩阵 )。(3)卷积的每一个组件上面的矩阵高斯滤波器 生产 (4)结果中给出线性方程组(6)是解决使用eqnSolve部署一个迭代技术。这需要评估使用拉普拉斯算子值雅可比(5)这个运动领域应用到的所有帧移动图像和重采样。(6)所有上述应用重复 次的解是收敛的。

为了简化符号,在算法1并在随后的章节中,我们假设两幅图像之间的运动矢量的计算 ,对应于两个连续帧的时间序列。

3.3。增强Volume-Conserving运动估计

心肌是很大程度上不可压缩13,14),因此,在这个应用程序中,重要的是估计运动领域在本地保存原来的体积。提出了很多算法来估计不可压缩运动领域,与雅可比矩阵常用的体积变化来衡量。在本文中,我们使用变分光学流首次引入歌曲和莱希(15),一个额外的术语介绍了极小化有利于divergence-free运动领域,连同diffusion-free任期保证卷保存。方程(4)因此成为 然后计算解决方案使用欧拉方程,类似于上面的推导提出了。原算法在算法1可以修改账户我们这里介绍的保留条款。

4所示。GPU并行化

原算法展品丰富数量的像素级别的并行性。CUDA架构,并行存在的单指令多数据(SIMD)水平,特别适合利用这样一个细粒度的并行性。虽然利用这似乎非常简单在算法层面,数据放置和管理带来巨大挑战,实现该算法。此外,架构的持续发展有直接影响的算法实现。

计算的原始数据被表示为一个向量的 元素,与最好的空间位置以及一个维度(在我们的例子中,这是 )。如果原始图像的大小为合并访问提供任何不良的影响,我们适当垫图片。这导致常数向访问以及其他两个维度(跨步 沿着 设在和 沿着 设在)。尽管非线性布局可能会提供一些性能优点,我们没有考虑他们,尽量减少解决问题。初始的图像将会用 (固定的图像) (移动图像)。

正如我们已经讨论部分2,现代GPU体系结构的复杂性方面的数据放置和管理直接影响算法的方式实现。特别是,费米架构支持共享内存和缓存。虽然预定的,有限的内存池可以作为一个完整的共享内存,缓存或内存或以混合方式。没有确定方法建立配置将导致更好的结果。在我们的例子中,算法的重复应用可能受益于共享内存,但这会带来额外的开销的数据移动。另外,共享内存的功能可以被关掉,我们可以配置可用内存作为一级缓存(L1),这将简化管理。我们预见到访问以来不断进步,后者配置可能会提供更好的结果。然而,为了验证这一点,我们两种方法实现。在下面几节中,我们概述如何实现这一组之间的关键功能中概述的运动估计算法的核心部分3

4.1。梯度计算

从两个初始三维图像( ),使用向前差分逼近梯度值计算: ,假设两个连续体素由单位距离。这些都是计算固定形象 。同样的,时间导数的值是由有限差分近似 。边界体素处理通过分配相应的衍生品为零,而不是分配周期性边界条件。然后计算得叉积,生产共有九个额外每体素值: ,

最简单的策略将分配一个线程并行化计算每个像素。然而,鉴于上述内存的安排,这将导致每个线程执行五加载主存(的值 在相应的体素,三个邻国 和的值 ),包括一个uncoalesced(价值 作为 值是连续的,所以他们没有一个适当的步合并内存访问)。减少开销,我们可以依靠L1缓存或使用共享内存,一个共同的技术我们将重用实现其它关键例程。第一个分区数据集的数据 方向(每个多维数据集包含的全部范围 值)。每个立方体的计算是展望未来,对于每个多维数据集,我们还需要一个沿着光环的大小 方向,如图3。然而,分区数据集可能仍然不适合共享内存。出于这个原因,我们的形象片过程 方向。这引入了一个光环的大小在一个 方向。这意味着每个块的线程需要共享内存的大小 。图像值然后加载到共享内存,每个线程加载其内部(即nonhalo)图像体素 在那 值,相应的体素的价值形象 。晕值然后加载线程的一个子集。这个子集构造通过给每个线程一个数字 这样 然后选择线程 。每一个线程将加载一个值的光环 的方向。这意味着每个线程需要执行最多三次衣服而不是五, 这些被uncoalesced / 价值。如前所述,加载的所有值 方向一去是不可能与当前共享内存大小只有64 KB /八国集团处理器在这些卡片。因此,我们只存储的值 在任何一次的共享内存。然而,装载的数量从全局内存是压低移动数据在共享内存的 价值观的改变。一旦所有的计算都表现为低 图像中飞机,这架飞机被丢弃的共享内存。然后, 面复制允许它成为新的 飞机。一旦已经完成,一个新的 飞机被加载。这个图中可以看到图展示4。对于这个应用程序,我们把数据块的大小 。这个尺寸是通过试验和维护必要的约束的 尺寸是16的倍数为了保持合并内存访问。

4.2。平滑

得叉积衍生品的计算后,高斯滤波器应用于每个人。这是由内核近似高斯卷积图像,以下列方式: 内核通过采样的值一个高斯函数。内核有一个大小 ,的值 , 捕获 在算法1;的值 , 需要足够大的提供一个精确的近似高斯但不太大,以避免不必要的计算。大的σ值需要大的内核,因此计算负载大。作为一种替代方法,三维卷积可以分为三维曲线玲珑,一个在每一个 , , 的方向。这是我们使用的方法。简单的符号,在下一节中,我们假设 ,我们使用价值

正如上面提到的,一个天真的实现将为每个值只使用一个单独的线程在一个给定的集合。然而,这种方法还受到全局内存负载的数量,这是一个函数的内核大小( )被应用,给 加载的数据集 访问加载内核的卷积在每个方向。其中, 访问加载内核, 访问执行的卷积 将uncoalesced方向。显然,这将导致服务器瓶颈,所以再一次,我们使用共享内存来降低成本。此外,我们也使用常量内存这一次。

一半的全局内存访问可以通过简单地存储内核在内存中删除,而不是全局内存。这种变化确实需要内核设置的最大大小,但是当这个最大可以在数千人,这不是一个限制设计。

方法利用共享内存是一样的梯度计算。每个线程加载一些数据确保合并内存访问,然后所有线程共享这个加载数据执行计算。然而,随着计算需要三个独立的形式传递由于三维卷积分离成三个独立的一维线性的,它必须是由三个独立的CUDA调用。这就意味着,在任何给定的调用,计算只能朝一个方向看。这是很重要的,因为共享内存不够大来存储足够的信息在所有三个方向在同一时间。这种行为也意味着有必要构建一个不同风格的解决方案 方向的 方向考虑需要合并内存访问。

4.3。解决线性方程组

求解线性方程组,我们实现了两个不同的雅可比方法的变体:一个版本将依赖于l1缓存(没有任何共享内存),另一个将使用共享内存。这两种方法减少全局内存访问的数量,特别是uncoalesced的。对于共享内存版本,和之前一样,我们的数据划分为瓷砖光环,这些瓷砖片沿 维度。然而,在这种情况下,鉴于向前和向后的邻居,光环占据两边缘 如图4在任何给定的时刻,我们维持三个瓷砖栏中的第一个和最后一个值 方向,补零的边界。由于有限的共享内存的大小,每一个 计算飞机,所以增加可用内存对于一个给定的计算,因此增加的比率值计算晕值加载。

4.4。强度插值

如上所述,由于线性近似介绍(1)上述过程必须重复迭代的运动估计/插补周期。估计两个图像之间的运动,现在有必要将这种运动应用到移动和插入图像强度的新职位。我们使用三线的方法,图像的值在每个位置的值是线性插值的八个邻国。虽然有一系列插值技术,包括最近的邻居,tricubic和不同spline-based方法,在这个应用程序中包含三条线的方法被认为是一个好的精度和速度之间的妥协。然而,滞留在拱形的目的符合这项工作,我们确保框架很容易适合不同的方法。

平滑约束(4)和(10)意味着应该有一个高度的位置与样品所需的读取原始图像的像素共享位置。尽管这种模式,没有办法提前确定的位置,所以不可能使用共享内存节省访问时间或克服不可避免的uncoalesced内存访问。由于这些原因,我们求助于纹理内存为数据访问提供缓存来提高性能的这一阶段。一旦原始图像映射到纹理,就可以得到结构的功能已经可用的设备进行插值,而不是编写新的代码。然而,这仅仅是实现足够的精度显示像素在计算机屏幕上,四位小数,左右和呆板,我们会限制插值技术支持的卡片,而不是能够扩展这个代码来执行选择插值技术。因此,我们的数据结构映射到纹理的调用从主机,然后在一个线程每体素的基础上进行插值。每个线程计算和提取八的位置最近的体素的纹理内存。做完这些,它执行计算并保存结果回主内存。因为使用的纹理内存作为缓存,八个像素的位置,其他插值点的位置在街区上执行一个给定群核结果合并内存访问和数据重用。

使用纹理内存的共享内存来克服记忆系统的局限性使这段代码的简单和演示了如何更清晰CUDA代码可以一次内存管理的担忧都是抽象的。然而,实验使用纹理内存的显示,它实际上是两个订单慢于共享内存,因此,我们将不会进一步讨论这个。我们把管理费用损失。

5。实验评价

5.1。实验的程序

应用程序的性能比较对CPU的任务——和基于gpu的体系是高度依赖于很多因素。包括底层操作系统,编译器,优化旗帜,顺序的优化和缓存策略平台问题[16]。有了这个光,很难得出结论,一个应用程序总是会导致在另一个平台上的性能提升。出于这个原因,深入理解的好处,我们使用三个不同的系统比较和分析性能的结果。系统的细节我们做实验如下所示表1


参数 系统1 系统2 系统3

系统名称 C1060 GTX480 C2070
主机CPU 至强5110 (Harpertown) 英特尔酷睿i7 至强5650 (Gulftown)
主机CPU速度 1.6 GHz 2.8 GHz 2.67 GHz
主机操作系统 Ubuntu 10.10(64位) Ubuntu 10.10(32位) Ubuntu 10.10(64位)
内核 2.6.35 2.6.31 2.6.35
主机内存 2 GB 4 GB 24 GB
主机l1缓存 64 KB 64 KB 64 KB
主机l2高速缓存 4 MB 8 MB 12 MB
GPU系列 C1060 GTX480 C2070
计算能力 1.3 2。0 2。0
设备内存 1 GB 4 GB 6 GB
多处理器 24 16 14
核心/议员 8 16 32
总核 192年 512年 498年
GPU l1缓存 16 KB 64 KB 64 KB
(共享内存)
GPU l2高速缓存 N /一个 128 KB 128 KB
CUDA版本 4.0 3所示。3 3所示。2
编译器标志 o3拱= sm_13 o3拱= sm_2.0 o3拱= sm_2.0

有不同的指标,我们可以比较利益。在本文中,我们将版本编译主机CPU作为基线版本。GPU的计算涉及超过raw-computation GPU核心。这包括数据传输和管理有关。然而,在我们的情况下,我们可以看到,数据将坚持GPU在随后的运行,因此,我们报告的性能结果不包括数据传输时间。剩下的部分,我们评估算法的性能如下。

(1)对于每一个系统,我们多次执行运行在一个平静的状态,和我们选择的值的测量。(2)我们使用不同大小的三维图像序列的数据库来测试我们的算法在不同配置(见下文)。数据库包括在需要的合成图像,而不影响结果。(3)nonsystem-specific和algorithm-specific参数检测对算法的总体性能的影响。这包括内核大小和迭代次数。(4)整体的运动估计算法,讨论了在前面的部分中,包含许多组件和他们每个人在GPU上运行时获得的加速效果。我们通过不同的组件评估获得的加速效果。(5)实现是用来评估的不同变体的影响共享内存,L1和L2缓存算法的记忆。为此,我们运行下面的变体。(一)一个共享内存版本。这在所有系统上都可以使用。在现代系统,l1缓存是关闭的,完整的作为共享内存池的内存。C1060系统,这是标准配置。(b)非共享内存版本。在Fermi-based系统(GTX480和C2070),这有效地打开l1缓存。此外,这种方法简化了整体规划不需要复杂的技术,如瓷砖,因此单纯依靠加载缓存控制器在GPU上的分辨率。(c)no-L1模式。这种关闭L1和共享内存模式,因此单纯依靠l2高速缓存。这个配置不存在对老系统(C1060)。

5.2。实验结果

我们首先提出的迭代次数的影响(用 在算法1)和内核的大小(用 在完成1),在整体加速图5。我们评估的迭代次数的影响使用两种不同的固定大小的图像( 图片)在所有三个平台上,一系列的迭代。对于每个平台,我们选择表现最好的版本(在共享内存中,非共享内存和non-L1-mode)然后我们不同的迭代的数量。观察,迭代次数没有明显影响整体加速跨所有平台。虽然改变图像大小改变的最大加速(加速随着图像尺寸增加而增加),对于一个给定的图像,迭代的数量不改变在很大程度上加速。这是因为,尽管增加迭代的数量得益于整体重用/转让、国际米兰和intraiteration空间位置在缓存中不支持应用程序。这本质上有一个重要的信息:尽管执行时间增加迭代次数将上升,加速将不会受到影响。但是,内核大小影响算法的整体性能。随着内核大小增加,访问内存的数量/浮点运算(失败)减少,这提高了GPU加速。此外,如果内核大小超过了CPU缓存的大小,这一观点将会改变。

规定,对于一个给定的情况下,迭代次数和内核大小是固定的,整体加速只是受到图像的大小的影响。在本节的其余部分,我们将迭代次数和内核大小不变,我们只有改变图像大小。

如上所述,整个运动估计算法有很多操作,组件化的在我们的案例中,他们在GPU加速效果随尺寸的问题。这是显示在图6C1060平台。在这里,所有组件的算法显示加速显著提升。平滑的内核尺寸是15。管道的不同部分有不同的访问模式,导致不同的整体行为。然而,梯度计算和线性系统解决方案使用相同的访问模式在主机和GPU,解释了相似的形状。当地的存在峰值在加速是由于不同的CPU和GPU之间的最优尺寸。在我们的例子中,我们观察到的高斯滤波器实现了加速约25倍,和数据生成图像插值实现加速在最好的情况下接近90次。最坏的情况下值(减速)观察对于很小的图像大小(例如,5倍左右放缓高斯),这里没有显示。然而,全面加快远小于所有组件,这是目前最好的加速效果仅限于60倍。我们也观察到的最高比例的时间花在解决线性方程和平滑数据。

有了GPU性能的细粒度的性能方面,我们提出算法的总体性能的行为在不同的系统。正如在前一节中提到的,不同的变异测试已实现的性能。

上的加速C1060系统如图7有两个不同的配置。一个共享内存被剥削,另一个没有任何共享内存利用率。在总体上,共享内存实现速度比非共享内存实现。节中讨论的原因2、访问共享内存速度比内存访问设备。这提高了实现更少的时间花在等待状态,因此整体加速上涨。另一个观察,需要进一步的调查,在图像的大小突然减速 这是在共享内存实现更加明显。

报告加速效果在上面的数据中可以有时有点误导。特别是,这是真的,当CPU一边翻译为加速减速。出于这个原因,我们提出的原始运行时在桌子上2。此外,主机和设备之间的传输速率,反之亦然随数据的大小。根据配置,偏向的方向发生转移(从设备到主机的数据传输速率远高于利率从主机转移到设备)但很少达到各自系统的峰值速率。


三次根号
图像大小
CPU时间
(女士)
GPU的时间
(共享内存)
(女士)
GPU的时间
(没有共享
内存)
(女士)

50 1272年 86年 96年
75年 4457年 245年 257年
One hundred. 11362年 355年 443年
125年 21112年 531年 771年
150年 45101年 895年 1123年
175年 62310年 1147年 1594年
200年 96703年 3036年 2856年
225年 134668年 3473年 3834年
250年 176238年 4261年 6016年

8GTX480系统上显示了算法的性能。由于GTX480 GPU是基于费米架构,GPU包含两个级别的缓存,(L1和L2)可以配置一个作为共享内存,L1缓存或两者的混合。我们跑下实现三种不同的配置。首先,我们跑的算法没有出现共享内存选项。这是默认和触发器的使用系统的L1和L2缓存。在这种设置下,实现不需要任何广泛的共享内存映射过程。然后,我们做了相同的实验与共享内存实现的变体。在这种配置下,l1缓存完全配置为共享内存系统和我们的实现需要加载和数据放置的全部责任。最后,我们运行L1缓存的实现完全关闭。这使得共享内存和L1不是可用的应用程序,因此完全依靠L2高速缓存,不能关闭。

可以观察到在图8,默认的配置优于其他两个版本。换句话说,广泛为共享内存调优应用程序使用新架构下不是最佳的。两个原因可以归因于这种失败。首先,数据管理和安置费用不能与l1缓存提供的自动放置。其次,l2高速缓存部署包容性的政策,助长了L1没有任何额外的等待状态。

然而,关闭l1缓存并不影响性能明显由于l2高速缓存是活跃的。仔细观察图8和运行时表3显示,即使关掉l1缓存,共享内存实现的整体性能表现。再一次,我们解释这个基于效率和加载缓存控制器在GPU上的政策。此外,图像大小的性能下降 观察观察到类似C1060系统,但在这里,非共享内存实现减速。


三次根号
图像大小
CPU时间
(女士)
GPU的时间
(与共享
内存)(女士)
GPU的时间
(没有共享
内存)(女士)
GPU的时间
(没有
L1)
(女士)

50 671年 49 26 49
75年 2379年 155年 83年 155年
One hundred. 5788年 272年 150年 265年
125年 11338年 440年 240年 435年
150年 23714年 677年 373年 671年
175年 31369年 955年 554年 942年
200年 47914年 2037年 1101年 1999年
225年 66870年 2357年 1275年 2312年
250年 91610年 2864年 1564年 2823年

最后,我们提出算法的性能对C2070系统图9。由于系统没有设备内存,我们能够运行算法相当大的图像大小( )。

类似GTX480系统默认配置,没有利用共享内存,执行比其他两个版本。所有其他GTX480系统上观察与以前的观测一致。此外,像以前一样,甚至依赖于所二级缓存足以获得可观的加速效果。此外,观察在C1060性能下降和GTX480系统观察到在这里,重复观察的地方。虽然所有这些观察可见在其他系统中,这个C2070系统的一个微妙的特性是,它有一个内置的错误检查和纠正(ECC) GPU内存的机制。

从历史上看,在gpu中,错误率没有一个问题这只影响像素的颜色。然而,这不再是gpu的情况被用作高性能计算系统的一部分作为DRAM的软错误率很高。尽管如此,前几代gpu不支持ECC和最近才开始到这种支持。在我们的例子中,C2070支持ECC。然而,ECC的点球是运行时由于管理费用与大量的相关检查。评价ECC的影响,我们跑,没有ECC算法。避免任何直接的影响L1,我们关掉了一级缓存。我们报告的变化运行时的比例最好的情况下,non-ECC版本,在图10。然而,在我们的例子中,我们没有看到任何的差异累积的错误,这是一个随机事件。随着这个变化可以观察到,随着图像大小增加但更明显的2的幂,大小问题。2的幂,问题大小,检查位ECC所需的数量高于nonpower-of-two问题大小(17),因此费用相当高。我们假设随着数据大小,访问更巩固,因此单独检查的数量减少。

6。结论

在本文中,我们研究了一个增强的运动估计算法的映射的GPU-specific架构,其中产生的挑战和好处。使用数据库的三维图像序列,我们表明,该映射会导致可观的性能提升,60倍,可以提供近实时体验。通过这样做,我们获得了更多的深入的了解过程。从我们的调查中,我们观察到以下。(我)尽管存在不同的内存子系统是关键在GPU编程中,他们的意义是减少。我们目睹了这简单地使用共享和常数对1级和2级缓存的记忆。一定程度上,这种观察是很有影响力在图像处理应用程序中处理大量的数据是一项基本要求。在现代Fermi-based系统,加载解决缓存控制器的管理费用平摊到了不同的内存管理子系统。(2)在三维图像处理应用程序中,空间位置只能利用一维的CPU,虽然没有空间位置的其他两个维度。这导致沿着维度在CPU上的好处。与此同时,当地GPU-front,非空间维度从合并内存访问中获益。然而,内存访问在其余维度不受益于合并内存访问。这两个事实都难以评估没有详细的分析,但在合并访问的事实很明显会导致更好的性能。(3)在三维图像处理应用程序中,增加平滑GPU上的迭代的数量不会改变整体加速虽然增加了绝对的运行时。(iv)即使在没有一级(L1)缓存的情况下,持续了2级缓存性能。(v)纠错和检查(ECC)是可靠的输出所必需的。不过,只要有可能,这可以为交易性能。(vi)在一个典型的图像处理应用程序中,运动估计管道反复申请后续帧的图像序列,因此,假设是有效的设备上的数据将持续和长期运行时的好处将摊销host-to-device和device-to-host转移的成本。(七)整体成本/性能是很有吸引力的。512 -核心GPU的成本只有四分之一的推出这种CPU-based系统(2011年中期)。然而,基于gpu的体系收益率明显的性能优势。此外,进化和简化架构和编程模型,使得生物医学图像处理应用程序这一个很好的选择。

尽管我们的工作利用GPU-architecture的几个不同的方面,可能有几个不同的方面得到改善。(我)对于非常大的数据集,在设备内存不能保存整个数据集,可能需要使用多个gpu执行分布式处理。虽然我们的算法和软件框架可以很容易地扩展到覆盖,即时效益近实时的经验是未知的。(2)当前Fermi-based gpu支持并发内核执行,允许启动多个内核并发的方式。这个特性本质上解放GPU和从传统SIMD-style解锁处理。确切的好处仍然需要调查尤其是三维图像处理应用程序的上下文中。(3)为了缓解有关条件错综复杂,当前版本的一个固定数量的迭代算法。需要一个更合适的方法自适应地控制收敛速度。

所有这些,我们发现虽然利用建筑特点呈现的实实在在的好处,这些好处是缩小与不断发展的体系结构和简化的编程模型。未来的GPU的体系结构将包含预取18),将支持在更高层次的抽象。

确认

作者要感谢数学研究所的迈克吉尔斯教授,牛津大学和郭京赫特福德郡大学的宝贵的输入。他们也要感谢他们的反馈和评论的匿名评论者提出了工作。这项研究是由牛津马丁学校,牛津大学。诉格劳由办事处支持学术奖学金。

引用

  1. Khronos组织:OpenCL规范1.1(最后于2011年5月20日通过)http://www.khronos.org/opencl/
  2. NVIDIA公司:NVIDIA CUDA统一计算设备架构编程指南3.0(2010年6月)。
  3. d·b·柯克和h·w·Wen-mei,编程大规模并行处理器:实践的方法质量,美国波士顿,摩根•考夫曼第1版,2010年版。
  4. j . Marzat y Dumortier, a . Ducrot”密度实时和准确使用CUDA并行光学流,”17学报》国际会议中心Europeon计算机图形学中,可视化和计算机视觉(WSCG ' 09),2009年。视图:谷歌学术搜索
  5. d·l·g·希尔·g·巴舍乐m·霍尔登和d·j·霍克斯,“医学图像配准,”物理学在医学和生物学,46卷,不。3,R1-R45, 2001页。视图:出版商的网站|谷歌学术搜索
  6. j·b·A . Maintz和m . A . Viergever“医学图像配准的调查”医学图像分析,卷2,不。1,1-36,1998页。视图:谷歌学术搜索
  7. b . Zitova和j .流感”图像配准方法:一项调查,”图像和视觉计算,21卷,不。11日,第1000 - 977页,2003年。视图:出版商的网站|谷歌学术搜索
  8. t·麦克拉·Clarysse o . Sipila et al .,“回顾心脏图像配准方法,”IEEE医学成像,21卷,不。9日,第1021 - 1011页,2002年。视图:出版商的网站|谷歌学术搜索
  9. a . Bruhn j . Weickert, c . Schnrr,”卢卡斯/金满足角/ Schunck:结合本地和全局光流方法,”国际计算机视觉杂志》上卷,61年,第231 - 211页,2005年。视图:谷歌学术搜索
  10. b . k . p .角和b . g . Schunck确定光学流。技术报告、麻省理工学院、剑桥,质量,美国,1980年。
  11. b·d·卢卡斯和t .金”,一个迭代的图像配准技术应用立体视觉,”第七届国际联合会议上人工智能学报》(81年IJCAI”展出),第679 - 674页,1981年。视图:谷歌学术搜索
  12. A . Bruhn j . Weickert t·科尔伯格和c·斯诺,“多栅的平台实时运动计算discontinuity-preserving变分方法,”国际计算机视觉杂志》上,卷70,不。3、257 - 277年,2006页。视图:出版商的网站|谷歌学术搜索
  13. f .阴,c . Chan和r·贾德“被动心肌灌注的压缩性,”美国Physilogy杂志》,卷271,不。5,H1864-H1870, 1996页。视图:谷歌学术搜索
  14. f .阴,c . Chan和r·贾德“被动心肌灌注的压缩性,”IEEE医学成像,卷271,不。8日,H1864-H1870, 1996页。视图:谷歌学术搜索
  15. s . m .歌曲和r·m·莱希”计算的三维速度场3 d电影人类心脏的CT图像,”IEEE医学成像,10卷,不。3、295 - 306年,1991页。视图:出版商的网站|谷歌学术搜索
  16. r . Damelio基准测试的基本知识、生产力出版社,第1版,1995年版。
  17. r·w·汉明”,错误检测和纠错码”,贝尔系统技术杂志,26卷,不。2、147 - 160年,1950页。视图:谷歌学术搜索
  18. j·l·d·a·帕特森位子上计算机体系结构:量化方法美国波士顿,摩根•考夫曼,质量,第三版,2002年。

版权©2011 Jeyarajan Thiyagalingam等。这是一个开放的分布式下文章知识共享归属许可,它允许无限制的使用、分配和复制在任何媒介,提供最初的工作是正确引用。


更多相关文章

1108年 的观点| 509年 下载 |2 引用
PDF 下载引用 引用
下载其他格式更多的
订单打印副本订单

相关文章

我们致力于分享发现相关COVID-19尽可能快速和安全。任何作者提交COVID-19纸应该通知我们help@hindawi.com以确保他们的研究顺利和尽快预印本服务器上可用。我们将提供无限的豁免的出版费用接受COVID-19相关文章。注册在这里作为一个评论家,帮助快速新提交。