使用多核 CPU 趋近实时 C-arm 重建

时间:2013-01-26   来源:   网友评论:0   人气: 230 作者: Hannes Hofmann

c-arm.jpgctslice.jpg
图 1.(左)C-arm CT 系统的介入应用(图片由西门子公司提供)。(右)通过 RabbitCT 数据集重建的三维体获得的轴向切面图。

hofmann.jpg
Hannes G.Hofmann,德国埃尔朗根大学模式识别实验室。

Hannes 是埃尔朗根大学的博士研究生,从事加速图像重建技术的研究。他的研究方向包括医学图像处理、并行架构的高性能计算和性能指标评测,目前主要关注使用多核服务器的 C-arm CT 图像实时重建。

Hannes 已取得了埃尔朗根大学计算机科学专业的理学硕士学位。


 

摘要:



三维(3-D)计算断层扫描(CT)成像技术有助于医疗人员更加精确地诊断疾病,改进治疗计划及导航,展开深入的后续研究。C-arm CT 系统(如图 1(左) 所示)可从患者的不同角度捕获大量二维平面投影。目前,临床上最常用的三维数据重建算法是滤波反投影法(filtered backprojection)。简单地说,就是将所有投影值抹入三维体中。重建属于计算密集型任务,而且由于使用的数据集庞大,因而需要高内存带宽。使用 C-arm 系统,3-D 数据也可在介入期间获得,从而支持新的医学应用。不过,OR 环境需要多至 60 fps 的实时处理,包括 2-D 预处理、3-D 重建和 3-D 后处理。在研究中,我们对 GPU 及多核处理器在动态执行 C-arm CT 数据重建方面的适用性进行了探索。

所使用技术说明:
 


我们基于 Feldkamp [1] 的 CT 重建针对多线程、向量化处理和高速缓存利用进行了优化。算法 1 显示了对全部 496 投影图像执行的基本算法。三维体大小为 512^3 体素。为获得可比较的结果,同时做正确性评估,我们使用了 RabbitCT [2] 基准测试。优化后的实施分别在两台英特尔至强多核服务器(8 核和 24 核)上进行测试。24 核服务器配备了四枚双核 Hexacore CPU(至强 7460)和 32GB DDR2 RAM,另一个系统采用两枚 i7 Quadcore CPU(至强 5550),并配有集成内存控制器和 12GB DDR3 RAM。两个系统均在 2.66 GHz 下运行且均使用 Linux。此报告使用的服务器为预生产系统。正式生产的硬件有望达到相似的性能级别。

Algorthm1_hofmann.png
算法 1.投影图像反投影的基本步骤。x、y、z 代表离散体坐标,u、v 为连续投影坐标。

多线程。我们对两种多线程方法进行了研究,OpenMP 和英特尔线程构件模块 (TBB)。并行化通过将三维体划分为 NP 个块(NP 代表可用内核的数量)而引入。这样,所有块都可以独立进行处理。两次实施都没在该步骤使用 CPU 的矢量处理 (SSE) 单元。它们在采用不同编译器(GNU gcc 和英特尔 C 编译器)的两台服务器上进行了测试。

图 2 显示了对比标量单线程实施的速度提升情况。结果,使用 gcc 的情况下,TBB 比 OpenMP 快 10-20%。英特尔 C 编译器的 OpenMP 实施与 TBB 速度相当。注意,感谢超线程技术,8 核服务器上可能实现超线性加速(多至 11.28 倍)。


plot_compiler24.png
图 2 显示了对比标量单线程实施的速度提升情况。结果,使用 gcc 的情况下,TBB 比 OpenMP 快 10-20%。英特尔 C 编译器的 OpenMP 实施与 TBB 速度相当。注意,感谢超线程技术,8 核服务器上可能实现超线性加速(多至 11.28 倍)。

向量化。在第二步中,使用了 CPU 的向量处理单元。这些单元同时对多个数据元素执行了相同的指令(如乘法)(简称 SIMD)。现在的 CPU 一次可处理 4 个单精度数字。

算法 1 的最内部循环体(对一列内的每个体素(有着固定的 y 和 z 坐标)执行同样的计算)被手动向量化。。对于大多数情况来说,此操作很简单。

不过,对于条件代码部分,向量化则颇为复杂,这是因为一个矢量的单个元素不确定是否有分支。如果当前体素位于当前投影的视场 (FOV) 内,则反投影将包含一个校检以避免无效的内存访问。无效坐标及对应的体素使用掩码被排除在下一步处理之外。

另一个问题是由几何体引发的。邻近的体素没有必要投射到投影图像的相邻体素中。这在加载体素矢量的投影值时将导致非线性内存访问。因此,所有体素将不得不以标量方式获取,然后被插入到随后用来计算双线性插值的 SIMD 矢量中。


 

文章评论