基于CUDA的剂量计算优化方法和系统 【技术领域】
本发明涉及计算优化技术,尤其涉及一种基于CUDA的剂量计算优化方法和系统。
背景技术
在三维立体放射治疗系统中,在治疗前需要模拟得到放射剂量的分布数据,以对潜在的治疗效果进行评估。该系统因此具有治疗规划系统以进行治疗前的剂量模拟。
治疗规划系统在模拟当中需要在不同照射角度下进行3D剂量场的计算,而在单个照射角度下又要对很多个放射源(对于多源放疗设备)下的剂量数据进行叠加。这些计算的运算量非常巨大,其中还涉及到大量的图像和轮廓数据的调用以及查表运算等。目前是利用CPU技术对3D剂量场进行计算,由于CPU的串行运算机制,对于处理大量数据运算来说,其速度是比较慢的。虽然计算机市场长期以来CPU处理器速度稳步上升并出现多核处理器,但是对于3D剂量场的计算来说,成本增加而计算速度提高有限的问题一直没有得到解决。
【发明内容】
本发明要解决的技术问题是提供一种能有效提高速度的基于CUDA的剂量计算优化方法和系统
本发明的技术问题通过以下技术方案加以解决:
一种基于CUDA的剂量计算优化方法,包括:中央处理单元将剂量计算可以并行计算部分的数据下发给显示处理单元;显示处理单元对接收的数据按照预定算法进行并行计算;显示处理单元将计算结果返回。
上述中央处理单元将剂量计算可以并行计算部分的数据下发给显示处理单元包括:将图像和轮廓数据下发到显示处理单元的纹理存储器;将剂量计算用到的表数据以及网格数据下发到显示处理单元的常量存储器;将剂量计算用到的网格数据下发到显示处理单元的全局存储器。
上述显示处理单元对接收的数据按照预定算法进行并行计算还包括:根据所述图像、轮廓数据和所述网格数据计算网格点的坐标;根据所述坐标和轮廓数据以及所述表数据按照所述预定算法计算网格点的剂量;所述显示处理单元将计算结果返回包括将所述网格点的剂量返回的过程。
上述显示处理单元对接收的数据按照预定算法进行并行计算还包括:将计算得出的所述网格点的坐标和剂量存储在显示处理单元的全局内存中;所述显示处理单元将计算结果返回通过读取所述全局内存而获得所述网格点的坐标和剂量来实现。
基于CUDA的剂量计算优化系统,包括中央处理单元和显示处理单元;所述中央处理单元用于将剂量计算可以并行计算部分的数据下发给所述显示处理单元;所述显示处理单元对接收的数据按照预定算法进行并行计算,并将计算结果返回。
上述剂量计算可以并行计算部分的数据是指网格点的剂量计算数据。
上述显示处理单元包括纹理存储器、常量存储器和全局存储器,所述纹理存储器用于接收和存储所述中央处理单元下发的图像和轮廓数据;所述常量存储器用于接收和存储所述中央处理单元下发的剂量计算用到的表数据;所述全局存储器用于接收和存储网格数据。
上述显示处理单元还包括处理器,用于根据所述纹理存储器存储的所述图像、轮廓数据和所述常量存储器存储的所述表数据,以及所述全局存储器存储的网格数据计算网格点的坐标;根据所述坐标和轮廓数据以及所述表数据按照所述预定算法计算网格点的剂量;所述显示处理单元还用于将所述网格点的剂量返回。
上述显示处理单元还包括全局内存,用于存储计算得出的所述网格点的坐标和剂量;所述中央处理单元还用于通过读取所述全局内存而获得所述网格点的坐标和剂量。
本发明与现有技术相比较的有益效果是:
(1)本发明利用GPU硬件能提供更高的计算加速比,将可以并行计算的部分下发给GPU进行计算,充分发挥GPU并行计算的优势,有效提高了计算速度;
(2)本发明将网格点的计算作为可以并行计算的部分,是针对网格点的剂量互相之间无耦合性之特点,能更好地发挥GPU并行计算的优势;
(3)本发明将图像和轮廓数据放入纹理存储器中,这些数据量大,读取频繁,而纹理存储器的访问可以采用其快速纹理拾取的特性而得到加速;将表数据放入常量存储器中也正是利用GPU访问该缓存速度快的特点;
(4)本发明实现简单,成本低廉,加速效果显著。
【附图说明】
图1是本发明系统具体实施方式结构示意图;
图2是本发明方法一种具体实施方式剂量计算流程图;
图3是本发明方法一种具体实施方式剂量计算示意图;
图4是本发明方法一种具体实施方式并行计算流程图。
【具体实施方式】
下面用具体实施方式结合附图对本发明做进一步详细说明。
CUDA(Compute Unified Device Architecture:计算统一设备架构),是一种由NVIDIA公司推出的通用并行计算架构,这个架构可以使用GPU(Graphics Processing Unit:显示处理单元)来解决商业、工业以及科学方面的复杂计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员现在可以使用C语言来为CUDA架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出地程序于是就可以在支持CUDA的处理器上以超高性能运行。
CUDA是一个完整的GPGPU(General Purpose GPU:通用GPU)解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
GPU高性能计算时,并不能直接读取CPU内存数据,因此计算时需要将CPU的内存数据拷贝到显卡内存中。
本发明基于CUDA剂量优化系统,其具体实施方式,如图1所示,包括:CPU(Central Processing Unit:中央处理单元)和GPU;该CPU用于将剂量计算可以并行计算部分的数据下发给该GPU;GPU对接收的数据按照预定算法进行并行计算,并将计算结果返回。
剂量计算可以并行计算部分的数据是指网格点的剂量计算数据。
GPU包括纹理存储器和常量存储器,该纹理存储器用于接收和存储所述CPU下发的图像和轮廓数据;常量存储器用于接收和存储CPU下发的剂量计算用到的表数据,以及用于接收和存储网格数据的全局存储器,网格数据包括网格的大小、密度和参考点的空间位置。表数据包括OF(OutputFactor:输出因子)、OAR(Off Axis Ratio:离轴比)等剂量计算需要的必要数据。本实施方式中,该纹理存储器和常量存储器可以实现为Cache(高速缓存)。
GPU还包括处理器,用于根据纹理存储器存储的图像、轮廓数据和常量存储器存储的表数据,以及全局存储器存储的网格数据计算网格点的坐标;根据坐标和轮廓数据以及表数据按照预定算法计算网格点的剂量;GPU还用于将网格点的剂量返回。
GPU还包括全局内存,用于存储计算得出的网格点的坐标和剂量;GPU还用于通过读取所述全局内存而获得所述网格点的坐标和剂量。
本发明基于CUDA的剂量计算优化方法,其一种具体实施方式,包括:CPU将剂量计算可以并行计算部分的数据下发给GPU;GPU对接收的数据按照预定算法进行并行计算;GPU将计算结果返回。
剂量计算可以并行计算部分的数据是指网格点的剂量计算数据。
CPU将剂量计算可以并行计算部分的数据下发给GPU包括:将图像和轮廓数据下发到GPU的纹理存储器;将剂量计算用到的表数据下发到GPU的常量存储器;将网格数据下发给GPU的全局存储器。
GPU对接收的数据按照预定算法进行并行计算还包括:根据图像、轮廓数据和网格数据计算网格点的坐标;根据坐标和轮廓数据以及表数据按照预定算法计算网格点的剂量;GPU将计算结果返回包括将所述网格点的剂量返回的过程。
GPU对接收的数据按照预定算法进行并行计算还包括:将计算得出的网格点的坐标和剂量存储在显示处理单元的全局内存中;GPU将计算结果返回通过读取全局内存而获得所述网格点的坐标和剂量来实现。
本发明方法的另一种具体实施方式,其剂量计算的流程如图2所示,包括以下步骤:
步骤201:用户交互设定一个3D计算网格,大小为M×M×N。M的取值范围为[32,256],N的取值一般比较大,通常大于100;
步骤202:用户设定旋转照射的范围[0°,360°];
步骤203:用户将整个旋转照射划分为若干个小的静态照射,即选择一个计算的角度间隔Delta,比如为10°;
步骤204:在每个照射角度,计算每个放射源形成的3D剂量场,即计算每个照射源在上述3D计算网格点上的剂量。将所有放射源(源的数目一般在18~34之间)形成的3D剂量场叠加则得到某个照射角度的3D剂量场;
计算在某个照射角度某个照射源形成的3D剂量场时,需要计算该照射源对上述3D计算网格每个网格点的剂量,其计算方法如图3所示:
S01:连接源S与照射中心点O,得到线段SO;(对所有各点统一进行一次)
S02:计算源S到体表的距离SSD。(对所有各点统一进行一次)
S03:计算点P在空间线段SO上的投影点P’(对每个点都进行计算);
S04:计算点P和P’点的距离,即离轴距x。
S05:计算点P’到体表的距离,即深度d;d=SAD-SSD-OP’。
S06:利用公式(1)(2)计算点P’的剂量(率),再用公式(3)(4)计算点P的剂量(率)。
P’_DOSE_A(d,SAD,A)=M×K×Table_A(d,r) (1)
P’_DOSE_B(d,SSD,A)=M×K×Table_A(d,r)×[SAD/(SSD+d)]2 (2)
P_DOSE_A(d,SAD,A,x)=P’_DOSE_A(d,SAD,A)×Table_B(d,SAD,A,x)(3)
P_DOSE_B(d,SSD,A,x)=P’_DOSE_A(d,SSD,A)×Table_B(d,SAD,A,x)(4)
由以上流程中可以看出,在进行剂量计算时要用到大量的图像轮廓数据以及表格数据,在CPU运算中需对每个网格点都要进行运算,这对于进行串行运算的处理器来说需要花费很多的时间。实验中应用现有技术对[21×128×128]的3D剂量场进行剂量计算,包括画出剂量线的总时间共需要为5分钟
对该3D剂量场计算流程进行分析,可以发现其具有很好的可并行性,即每个计算网个格点的剂量计算几乎都是独立进行的。基于这一点,本实施方法使用市场主流的可编程图形硬件对剂量计算进行加速。通过将上述剂量计算算法流程进行流式映射,并利用基于CUDA的图形硬件上的多个处理器进行并行计算,对3D剂量场计算进行加速。
本实施方式具体的实施环境是:Intel(R)Core(TM)2Duo CPU,E45002.20GHz 2.19GHz,1Gbneicun;NVIDIA GeForce 8600GT,显存:256M。
编程得到NVIDIA GeForce 8600GT显卡上的CUDA信息如表1所示:
名称 GeForce 8600GT totalGlobalmemory 268107776Bytes sharedMemPerBlock 16384Bytes warpSize 32 memPitch 262144 maxThreadsPerBlock 512 maxThreadsDim x 512,y 512,z 64 maxGridSize x 65535,y 65535,z 65535 totalConstMem 65535Bytes cloockRate 1188000 textureAlignment 256
表1
本实施方式利用CUDA技术对步骤204的网格点的剂量进行并行计算,在计算之前需要把各种要用到的数据合理分配到GPU显存中,以达到最大的加速,其流程如图4所示,包括以下步骤:
步骤401:分析算法流程知道原算法最耗时间的是源皮距深度的计算,对于每个网格点的剂量计算来说,都要用到经扩展后的图像和轮廓数据,这些数据量是巨大的,读取并进行循环计算需要花费大量的时间。因此,可将其放进显卡GPU的纹理存储器Texture Memory中,该纹理存储器满足存储需要,而其也具有快速纹理拾取的特性;
步骤402:剂量算法中要用到查表运算,这些表为一些测量数据,但该表数据量大,查找相对耗费时间。而实际中知道,在机器设定以后,要用到的表格数据不变,因此可将其放入GPU常量存储器Constant Memory中,GPU读取常量存储器数据的速度也相对较快;
步骤403:下发网格数据到GPU的全局存储器中;
步骤404:GPU处理器并行计算网格3D剂量场,3D剂量场尺寸较大[256×256×200],可将其网格点的坐标数据直接放入GPU全局内存GlobalMemory中,从表1的系统资源中看出设备Global Memory的大小为268107776bytes,而3D剂量场尺寸大小256×256×200bytes,不考虑其他数据需要,这样全局内存可以存放大约20个3D剂量场,这样就可以在小范围内调整动态的剂量场参数。
应该注意,本实施方式的步骤401-403的顺序是为示例之目的,可以改变顺序。
本实施方式的实施过程中,充分利用显卡的资源,深层次利用CUDA技术。从最终效果来看,在相同的其他条件下,本实施方式相比现有技术在速度方面提高将近5倍。而由于目前在同类支持CUDA技术的显卡中,本实施方式用到的显卡硬件性能相对比较低,相信在有更好的图形硬件支持,其加速性能会有更大的提高。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。