基于CUDA的并行碰撞检测算法研究

合集下载

基于GPU的碰撞检测算法研究的开题报告

基于GPU的碰撞检测算法研究的开题报告

基于GPU的碰撞检测算法研究的开题报告
1. 研究背景与意义
随着计算机图形学的快速发展,逐渐出现了大规模虚拟世界、基于现实物理的动画以及物理仿真等应用,这些应用对碰撞检测的效率提出了更高的要求。

过去的碰撞检测算法主要是基于CPU实现,但是随着GPU计算能力的提升,采用GPU加速的碰撞检测算法已经逐渐成为一种趋势。

因此,研究基于GPU的碰撞检测算法,能够提高碰撞检测的效率,并且为基于现实物理的动画、虚拟现实等应用提供更好的技术支持。

2. 研究内容和技术路线
(1)碰撞检测的基本概念和算法原理的学习研究;
(2)GPU的基本架构和CUDA编程模型的学习研究;
(3)基于GPU的快速碰撞检测算法的研究,主要包括AABB树、BVH树以及其它基于GPU的加速结构,以及GPU实现碰撞检测的优化方法等;
(4)基于CUDA实现上述算法,并在实验平台上进行性能测试。

3. 研究难点和创新点
(1)基于GPU实现碰撞检测的算法优化技术;
(2)大规模数据下的GPU碰撞检测优化;
(3)基于GPU的碰撞检测算法的实用性和可扩展性的验证。

4. 研究成果预期
(1)实现一种基于GPU的高效碰撞检测算法;
(2)进行实验评估,可视化展示实验数据;
(3)发表国内外高水平论文1~2篇。

5. 研究进度计划
(1)前期准备(1个月):对现有的碰撞检测算法进行系统学习,熟悉GPU的基础知识和CUDA编程模型。

(2)中期实现(8个月):根据学习的内容,实现基于GPU的高效碰撞检测算法,并在实验平台上进行性能测试,测试和优化算法。

(3)后期整理(1个月):撰写硕士论文,总结算法优化的技术方法和实验结果。

基于CUDA平台的GPU并行计算技术研究(终稿)

基于CUDA平台的GPU并行计算技术研究(终稿)

CUDA架构下GPU硬件结构GPU与CPU的最大不同点在于硬件结构自身,而硬件结构不同是由于晶体管用途分布造成的,如图2.1所示。

GPU比CPU在数据计算能力和存储器带框上有相对大的优势,在能耗和价格上付出的代价也相对较小,从而在异构操作协同处理运算上占领并行运算的一席之地。

GPU作为图形渲染的主要硬件,因图像渲染运算的高度并行性,它可以采用添加ALU和Control Cache(存储器控制单元)的方式提高运算能力和存储器带宽。

CPU的制造厂家是把更多的晶体管用于复杂的控制单元以及缓冲区,而GPU的晶体管作为ALU的居多,从何提高GPU的总体执行单元效率。

图2.1 CPU与GPU硬件结构比较在传统的CPU+GPU异构并行的系统中,复杂逻辑的事务计算由CPU完成,这样的要求,也促使CPU采用分配大量缓存、分支预测以及复杂控制逻辑的方式较快得获取数据和指令,以此提高CPU 的运算速率;而GPU负责的是计算高度密集的图像渲染工作,它通过分配更多的ALU来运行量大但相对简单的线程(Thread),且要求较高的存储器带宽以保证整体的数据传输速率。

CPU和GPU的不同设计理念造就了这两个处理器的架构差异及性能差异,具体如下:1)线程差异,CPU的多线程是一种软件粗粒度多线程,在执行的线程中断后,需要保存中断线程前后数据同时装载下一个线程的数据,这个过程需要很大的时间成本;GPU的多线则不存在这样的数据交换过程,因此在并行执行过程中省去更多时间,提高效率。

2)计算核心差异,主流CPU采用多核技术,3到6条执行流水线在每个计算核心中,乱序执行、预测执行和大容量缓存技术都被采用到CPU核心中意达到提高指令级并行的目的,这些技术的加入也限制了更多核心数量的集成。

而GPU集成了多个流多处理器,因此每个GPU可被看成1到30个SIMD 处理器,其中每个SIMD处理器包含8个ID流处理器,GPU的并行则是利用了多个流处理器间的粗粒度并行及流多处理器内的细粒度数据并行。

基于CUDA的高性能并行计算模型研究

基于CUDA的高性能并行计算模型研究

基于CUDA的高性能并行计算模型研究近年来,随着计算机科学的进步,高性能并行计算已经成为了当今计算科学领域中极为重要的一部分。

而在高性能并行计算中,CUDA技术已经成为了绝对主角。

什么是CUDA技术呢?CUDA技术是一种由NVIDIA公司开发的高性能并行计算平台,它利用了GPU的并行计算能力,使得科学计算和大规模数据处理变得更加高效和快速。

在CUDA技术中,最重要的概念就是Thread Block(线程块),这是计算任务的最小单元。

一个Thread Block由若干个Thread(线程)组成,每个Thread都可以完成数据的计算或处理,并且线程之间可以实现同步和通信。

此外,CUDA技术中还有一个极为重要的概念:Kernel函数。

Kernel函数是运行在GPU上的函数,它可以被多个线程并行执行,这就大大提高了计算速度和效率。

那么,在实际应用中,如何使用CUDA技术进行高性能并行计算呢?下面就介绍一个基于CUDA的高性能并行计算模型——矩阵乘法。

矩阵乘法作为一种经典的线性代数运算,具有广泛的应用前景。

在使用CUDA技术实现矩阵乘法时,需要将矩阵乘法的计算过程拆分成多个线程块,每个线程块内部又包含多个线程。

具体实现如下:1. 定义两个矩阵M和N,它们的大小分别为m x n和n x p。

2. 将M和N分别存储在GPU的全局内存中,并将它们在共享内存中进行缓存。

3. 定义矩阵乘法的Kernel函数,在该函数中定义每个线程块的大小和线程的数量。

4. 在Kernel函数中利用共享内存和线程同步机制实现矩阵乘法的计算过程。

5. 计算完成后,将结果从GPU的全局内存中复制回CPU的主机内存中。

通过使用CUDA技术,可以极大地提高矩阵乘法的计算效率和速度,从而更加高效地完成科学计算和大规模数据处理。

除了矩阵乘法,CUDA技术还可以应用于各种各样的高性能并行计算任务中,如图像处理、物理模拟等。

随着技术的不断发展,CUDA技术的应用前景将会越来越广阔。

基于CUDA的并行计算在科学计算中的应用研究

基于CUDA的并行计算在科学计算中的应用研究

基于CUDA的并行计算在科学计算中的应用研究一、引言随着科学技术的不断发展,科学计算在各个领域中扮演着越来越重要的角色。

为了提高计算效率和加速计算过程,人们开始广泛应用并行计算技术。

CUDA(Compute Unified Device Architecture)是由NVIDIA推出的并行计算平台和编程模型,它允许开发人员利用NVIDIA GPU进行通用目的的并行计算。

本文将探讨基于CUDA的并行计算在科学计算中的应用研究。

二、CUDA并行计算原理CUDA是一种基于SIMT(Single Instruction, Multiple Threads)架构的并行计算模型。

在CUDA编程中,程序员可以使用类似C语言的编程语言编写代码,并通过CUDA编译器将代码转换为GPU 可执行的指令。

CUDA程序由两部分组成:主机端代码和设备端代码。

主机端代码在CPU上执行,而设备端代码在GPU上执行。

三、CUDA在科学计算中的应用1. 计算流体力学(CFD)在计算流体力学领域,需要对复杂的流体流动进行数值模拟和分析。

CUDA提供了强大的并行计算能力,可以加速CFD模拟过程。

通过利用GPU的大规模并行处理单元,可以显著缩短CFD模拟的计算时间,提高模拟效率。

2. 分子动力学模拟(MD)分子动力学模拟是研究原子和分子运动规律的重要方法之一。

CUDA可以有效地并行化MD模拟过程,加速原子和分子之间相互作用力的计算,从而实现更快速、更精确的模拟结果。

3. 地震波传播模拟地震波传播模拟是地震学研究中的重要课题之一。

通过利用CUDA 进行地震波传播模拟,可以实现高分辨率、大规模地震波传播计算,为地震灾害预测和地质勘探提供有力支持。

4. 深度学习深度学习是人工智能领域的热门技术,需要大量的数据和复杂的神经网络模型进行训练。

CUDA提供了高效的并行计算能力,可以加速深度学习模型的训练过程,缩短训练时间,提高训练效率。

四、案例分析以某CFD仿真软件为例,通过将其核心计算部分使用CUDA进行优化,并利用GPU加速计算,实现了对流体流动过程的快速模拟。

基于CUDA并行计算的深度学习算法研究

基于CUDA并行计算的深度学习算法研究

基于CUDA并行计算的深度学习算法研究深度学习(Deep Learning)是一种基于神经网络的机器学习方法,其目的是通过大量数据训练出模型,实现对未知数据的预测或分类。

近年来,随着计算机硬件和算法的不断进步,深度学习已经成为了人工智能领域的热门技术之一。

基于CUDA并行计算的深度学习算法是一种高效的实现方式,本文将探讨其研究现状及未来发展方向。

一、CUDA并行计算的基本原理CUDA是NVIDIA公司推出的一种并行计算架构和计算引擎,其核心是一种面向并行计算的通用编程语言CUDA C/C++。

在CUDA架构下,将CPU和GPU的计算资源分配到不同的设备上,利用GPU的并行处理能力加速计算过程。

CUDA 编写的程序可以实现跨平台的运行,极大地提高了并行计算的效率。

二、基于CUDA并行计算的深度学习算法研究现状在深度学习中,卷积神经网络(Convolutional Neural Network,简称CNN)是广泛使用的一种模型,其具有良好的空间和时间局部性。

因此,基于CUDA并行计算的CNN算法研究成为了重点。

目前,研究者们在这方面取得了很大进展:1. 更快的训练速度相较于传统的CPU并行计算,CUDA并行计算可以将计算和数据传输分配到不同的设备中,大幅提高计算效率。

这使得基于CUDA并行计算的深度学习算法在训练阶段中表现出更快的速度,并且能够处理更多的训练数据,得到更精确的模型。

2. 更高的灵活性和可扩展性CUDA并行计算不仅支持多GPU并行计算,而且还可以将多个计算任务分配给不同的GPU进行处理,以实现更高效的计算。

此外,CUDA并行计算还可以自适应调整计算资源的使用,以适应不同的应用场景和硬件环境。

3. 更高的算法复杂度基于CUDA并行计算的深度学习算法可以承载更多的计算负载和更高的算法复杂度。

这为研究者们实现更先进的深度学习模型提供了更加广泛的空间和机会。

三、基于CUDA并行计算的深度学习算法未来的发展方向目前,基于CUDA并行计算的深度学习算法已经取得了重要的研究进展。

基于CUDA的并行计算技术与应用案例研究

基于CUDA的并行计算技术与应用案例研究

基于CUDA的并行计算技术与应用案例研究一、引言在当今信息时代,数据量呈指数级增长,传统的串行计算已经无法满足大规模数据处理的需求。

因此,并行计算技术应运而生,成为解决大规模数据处理难题的有效手段之一。

CUDA(Compute Unified Device Architecture)是由NVIDIA推出的并行计算平台和编程模型,利用GPU的强大并行计算能力,加速各种科学计算、图形处理和深度学习等应用。

本文将深入探讨基于CUDA的并行计算技术及其在各领域的应用案例研究。

二、CUDA并行计算技术概述CUDA是一种面向NVIDIA GPU的并行计算平台和编程模型,它允许开发人员利用GPU的并行计算能力来加速应用程序的运行速度。

CUDA包括CUDA C、CUDA C++、CUDA Fortran等编程语言,开发者可以使用这些语言来编写并行程序,并通过NVIDIA提供的工具将其编译成可在GPU上运行的代码。

CUDA架构主要包括主机端(Host)和设备端(Device),主机端负责控制整个程序流程,而设备端则负责执行并行计算任务。

三、CUDA并行计算技术特点高性能:GPU具有大量的核心和高带宽的内存,能够实现大规模数据并行处理,提供比传统CPU更高的计算性能。

灵活性:CUDA支持不同粒度的并行计算,包括线程级、块级和网格级,并且可以根据应用需求进行灵活配置。

易用性:CUDA提供了丰富的API和工具库,开发者可以快速上手并进行高效的并行编程。

通用性:除了图形处理领域,CUDA还广泛应用于科学计算、深度学习、密码学等各个领域。

四、CUDA在科学计算领域的应用案例1. 分子动力学模拟分子动力学模拟是一种重要的科学计算方法,用于研究原子和分子在不同条件下的运动规律。

通过利用CUDA并行计算技术,可以加速分子动力学模拟程序的运行速度,提高模拟效率,从而更好地理解物质的微观结构和性质。

2. 流体力学仿真流体力学仿真是研究流体运动规律和相互作用的重要手段,在航空航天、汽车工程等领域有着广泛应用。

基于CUDA的IDW并行算法及其实验分析_刘二永

基于CUDA的IDW并行算法及其实验分析_刘二永

, : 作者简介 :刘二永( 男, 江苏徐州人 , 博士生 , 讲师 , 研究方向 : 空间分析与并行算法 。E 1 9 7 8 a i l c u m t l e o t m a i l . c o m -) -m @h y
7 0 8
地 球 信 息 科 学 学 报 2 0 1 1年
2 I DW 与 C UD A 简析
2 . 1 I DW 算法 它以 I DW 是一种常用而简便的空间插值方法 , 插值点与样本点间的 距 离 为 权 重 进 行 加 权 平 均 , 离 插值点附近的样本点赋予的权重越大 , I DW 的插值
6] 公式如下 [
。 c o m u t i n r a h i c s r o c e s s i n n n i t s) g p p g p g o u NV I D I A 公司于2 0 0 7年正式发布的 C UD A( C o m - , 计算统一设备架 u t e U n i f i e d D e v i c e A r c h i t e c t u r e p 构) 是第一种不需借助图形学 A P I就可以使 用 类 C 语言进行通用计算的 开 发 环 境 和 软 件 体 系 , 它提供 了一 个 编 写 运 行 在 G P U 上的并行代码的简捷环 境 。 支持 C UD A的G P U 可以看成是一个由若干 向量处理器组成的超 级 计 算 机 , 性能也确实可以和 小型的超 级 计 算 机 相 比 。C UD A 已被应用于图像 处理 、 生物计算 、 分子动力学计算等领域 , 并在这些
3 基于 C UD A 的I DW 算法
为了与后 面 提 出 的 C 首先 UD A 算 法 作 对 比, 给出 I 伪码见算法 1。 DW 的 C P U 算法 , ) 算法 1. v o i d C P U_ I DW( /定 义 1: d e f i n e I n t e r e r W I D TH, HE I GHT / g 格网的维数 , , / 2: d e f i n e f l o a t x l l c o r n e r l l c o r n e r c e l l s i z e/ y 定义格网的左下角的坐标和单元大小 / /定 义 3: d e f i n e I n t e r e r S AMP L E_ C OUNT g 样本个数 4: d e f i n e s t r u c t X Y Z{ f l o a t X; f l o a t Y; f l o a t Z} / /定义格网点的结构体

基于CUDA的并行计算技术研究与应用

基于CUDA的并行计算技术研究与应用

基于CUDA的并行计算技术研究与应用在计算机科学领域中,计算速度一直是人们关注的一个重要问题。

CUDA是一种高级的并行计算技术,可用于加速计算机处理速度。

CUDA是NVIDIA公司开发的一种通用并行计算平台和应用程序编程接口,旨在利用GPU的高并发实现高性能计算和加速应用程序。

CUDA的出现,给科学计算提速带来了不可估量的贡献。

1. CUDA的架构CUDA是一种高级的并行计算技术,可以利用GPU的高并发性来实现高性能计算和加速应用程序。

CUDA的架构是一个以数据流为中心的计算平台,并包括以下几个要素:(1)CUDA硬件体系结构——CUDA硬件体系结构是一种先进的、具有高计算效率的并行处理架构,可用于多核心GPU并行计算。

CUDA GPU的核心是由许多小的线程块组成的,每个线程块内部有多个线程;(2)CUDA编程模型——相比较传统的CPU编程模型,CUDA编程模型相对复杂,需要开发人员深入了解GPU的硬件机制并进行适当的编程;(3)CUDA运行时库——CUDA运行时库是一组与GPU、操作系统和硬件相关联的工具和库,用于支持CUDA程序运行。

2. CUDA的应用CUDA具有高效性、可扩展性和灵活性,具有广泛的应用前景,涉及科学计算、图形学、深度学习等领域。

(1)科学计算——科学计算是CUDA最主要的应用领域。

科学计算需要大量计算和数据处理,CUDA采用并行计算技术进行快速处理,提高了计算速度和效率。

CUDA可应用于分子模拟、天文学、医学影像处理等领域,有助于开展更深入的研究工作。

(2)图形学——近年来,图形学的应用越来越广泛,无论是游戏、影视、还是交互式设计等,都需要高性能图形处理。

CUDA通过加速图形处理,使得图形渲染能够实时完成,提高了图形处理速度和精度。

(3)深度学习——深度学习是人工智能领域的一个重要方向,用于处理自然语言处理、计算机视觉、语音识别等方面。

CUDA中包含训练和推断两个核心环节,采用并行计算技术能够快速处理神经网络模型,提高模型的训练效率和精度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

行双重递归遍历。假设对象 A 与 B 进行碰撞检测,
若树 A 根结点与树 B 根结点的包围盒相交,则树 A
向下遍历,当到达树 A 的某个叶结点时,用该叶结
点遍历树 B,如果能到达树 B 的叶结点,再进行含
有 n 个结点,对象 B 的包围树含有 m 个结点,那么
二叉树的集合 F = { T0 ,T1 ,…,Tn} ,其中每棵二叉树 中只有一个根结点,其左右子树均为空。
2) 从 F 中取出 Ti,并行计算其余根结点到 Ti 的距离,再用并行的方式找到与 Ti 距离最小的根结 点 Tj,将 Ti 和 Tj 加入到集合 H = { S0 ,S1 ,…,Sn} 中。 重复该过程直到 F 中所有的根结点全部加入 H 中,
第 27 卷 第 14 期 2011 年 7 月
甘肃科技 Gansu Science and Technology
Vol. 27 No. 14 Jul. 2011
基于 CUDA 的并行碰撞检测算法研究
田 园,万 毅
( 兰州大学 信息科学与工程学院,甘肃 兰州 730000)
摘 要: 碰撞检测是计算机图形仿真中的关键问题之一。尽管研究人员提出了许多优秀的碰撞检测算法,但是随着 仿真场景规模的增大,在单处理器上实现的碰撞检测算法已经难以达到实时性的要求。因此,当前研究的核心问题 是如何提高碰撞检测的速度。在对已有算法研究分析的基础上,提出了一种基于层次包围盒的并行碰撞检测算法。 该算法的核心思想是用多处理器并行遍历层次树以避免单处理器需要两棵树相互遍历的情况,并提出以并行的方 式生成层次包围盒树来进一步提高算法效率。结合 CUDA 平台提供的并行计算解决方案,整个算法在图形处理器 上得以实现。结果表明,该算法显著地提高了碰撞检测的速度,满足实时性的需求。 关键词: 计算机图形; 碰撞检测; 层次包围盒; 并行; CUDA 中图分类号: TP3 - 0
对象所有基本几何元素生成包围盒并存储在内存中
的一维结构体数组中,根据几何元素个数计算出包
围树深度 depth 及每层结点的个数。假设包围树每
层结点个数分别为 ni ,ni - 1 ,…,2,1 ( i = depth - 1) , 在显存中分配大小为 ni + ni -1 + … + 2 + 1 的结构体 数组用于存储生成的包围树。将包围盒数组从内存
为止。
并行生成树的过程如图 1 所示。对于有 n 个根
结点和 p 个处理器的情况,该算法在计算根结点之
间距离的时间复杂度是 O(
n p


在上述算法(
2)
中,
总共需要进行
n 2
次查找,并
行查找最小值的时
间复
杂度为 O(
n p
log2 n)
,那么得到集合
H
所需要的时间
复杂度为
O(
n2 p
log2 n)
第 14 期
田 园等: 基于 CUDA 的并行碰撞检测算法研究
29
CUDA 技术是一种基于 NVIDIA 图形处理器的
并行计算体系架构,并使用标准 C 语言作为其编程
语言。CUDA 程序分为在 host 执行和在 device 执行
两个部分,host 就是传统的 CPU,而 device 就是支持
CUDA 的 GPU。在执行 CUDA 程序时,host 将需要
并行计算的数据在内存中准备好,传入显存中由 de-
vice 进行处理,数据处理完成后再从显存传回内存
中供用户使用。
根据所提出的算法,首先是生成对象的包围树。
定义一个基本几何元素的包围盒为一个含有包围盒
顶点坐标、几何元素顶点坐标的结构体。由 host 为
近。这一过程的方法如图 2 所示。在 Step 1 中,指
定数组中第一个元素 T0 为目标包围盒,计算其余包
围盒到 T0 的距离并用并行查找最小值的方法找到
与 T0 距离最近的包围盒。查找结束后,与 T0 距离
最近的包围盒将被移至数组中 T1 的位置。再指定
T2 作为目标,用相同的方法找到与 T2 距离最近的
其中 S2i 与 Ssi + 1 之间的距离最小。
3)
用多个处理器
P0 ,P1 ,…,Pm(
m
=
n 2

对有序
集合 H 中的根结点进行处理,由处理器 Pi 将 H 中 S2i ,S2i + 1 作为左右子树构造一棵新的二叉树。
4) 删除 F 中原有的二叉树,将新生成的树全部
加入 F 中。
5) 重复( 2) 、( 3) 和( 4) ,直到 F 只含有一棵树
得到的
n 2

子序列
两两 合 并,……,如 此 反 复 直 到 合 并 成 一 个 序 列 为
止。整个过程结束后,数组的最小值将位于数组第
一个元素中。
图 3 并行查找最小值
3) 由多个线程生成包围树每层结点,并存储在 事先分配好的数组中。该过程如图 4 所示。
图 4 多线程生成包围树
假设对象 A 与 B 进行碰撞检测,并且 device 已 为对象 A 生成包围树,那么只需要为对象 B 所有基 本几何元素生成包围盒,用每个包围盒去遍历对象 A 的包围树。当 host 将对象 B 的包围盒数组从内 存中传入显存后,在 device 上建立与包围盒数目相 同的线程,由每个线程独立完成一个包围盒与包围 树的遍 历 问 题。由 于 CUDA 不 支 持 堆 栈 结 构,因 此,CUDA 线程深度遍历二叉树无法用递归或堆栈 的方式实现。文献[5]中给出了一种模拟堆栈[5]的 方法,使得 CUDA 线程深度遍历二叉树得以实现。
近年来,计算行业正在从只使用 CPU 的“中央 处理”向 CPU 与 GPU 并用的“协同处理”发展。为 了打造这一全新的计算模式,NVIDIA 公司开发了一 种称为 CUDA( Compute Unified Device Architecture, 统一计算设备架构) 的通用并行计算架构,该架构 使得 GPU 能够解决复杂的计算问题。得益于 CUDA 所带来的并行计算解决方案,并行碰撞检测算 法的研究迎来了新的机遇。并行计算是一种能够有 效提高碰撞检测速度的方法,经过分析研究,提出了 一种基于 CUDA 的并行碰撞检测算法。
加入 F 中。
4) 重复( 2) 和( 3) ,直到 F 只含有一棵树为止。 上述算法的时间复杂度为 O ( n2 log2 n) 。从生 成树的过程来看,处理器重复做相同的工作来处理
不同的数据,属于 SIMD 问题,因此,可以使用并行
的方式。
提出的并行生成包围树算法的基本思想是:
1) 根据 n 个基本几何元素的包围盒构成 n 棵
完成碰撞检测的时间复杂度为 O( n × m) 。
为了避免双重递归遍历所带来的系统消耗,减
少遍历的次数,我们的想法是只生成对象 A 的包围
树,在碰撞检测时,只为对象 B 的所有基本几何元
素生成包围盒,然后由多个处理器分别处理每个包
围盒与树 A 的遍历问题。该方法的时间复杂度是 O

n
×
m p


p
是处理器个数)
1 并行碰撞检测算法的基本思想
我们所提出的是一种基于层次包围盒的并行碰 撞检测算法。层次包围盒的碰撞检测算法由于具有 较好的性能,适用于复杂环境中的碰撞检测,因而受 到了广泛的研究。层次包围盒方法是利用体积略大 而形状简单的包围盒把复杂的几何对象包裹起来, 在进行碰撞检测时首先进行包围盒之间的相交测 试; 如果包围盒相交,再进行几何对象之间精确的碰 撞检测[2]。在单处理器的情况下,首先必须对两个 需要进行碰撞检测的对象分别生成层次包围盒树 ( 简称包围树) ,再通过双重递归遍历两棵包围树来 确定需要进行检测的部分。如果某个对象在模拟过 程中发生位移或形变,则必须在下一次进行碰撞检 测前对该对象的包围树进行更新,而更新过程依然 是一个遍历树的过程。由此可见,当一个对象含有 的基本几何元素越多时,生成包围树的时间越长,并 且包围树 的 深 度 越 大,遍 历 所 需 要 的 时 间 也 更 长。 为了减少碰撞检测的系统消耗,则利用并行的方法 来生成包围树和避免双重递归遍历。根据分析,层 次包围盒的碰撞检测是一种典型的单指令多数据 流[3]( Single Instruction Multiple Data,简称 SIMD) 问 题,即处理器多次执行重复的代码,每次处理不同的 数据。对于这类问题,可以使用多个处理器,每个处 理器同一时刻执行相同的代码但处理不同的数据, 从而实现并行化。 1. 1 并行生成包围树
,与 并 行 生 成 包 围 树 一
样,当 p 越接近 n 时,算法的效率越好。
2 并行碰撞检测算法的实现
自 2006 年 NVIDIA 公司推出统一渲染架构的 G80 核心以来,可编程流处理器已取代原有的固定 管线流程成为当今 GPU 发展的模式。G80 核心拥 有 128 个 Streaming Processor( 流处理器,简称 SP) , 每 8 个 SP 被 划 分 为 1 个 Streaming Multiprocessor ( 流多处理器,简称 SM) ,每个 SM 可容纳 768 个活 动线程,那么一个 G80 核心便可以同时建立 12280 个活动线程。而 NVIDIA 之后推出的 G200 核心,拥 有 240 个 SP,每个 SM 可容纳 1024 个线程,能够同 时建立的活动线程数更是高达 30720 个[4]。由此可 见,GPU 为并行计算提供了一个很好的解决方案。
2) 从 F 中取出 Ti,用贪婪算法在其余的二叉树 中找到与 Ti 距离最近的 Tj,将 Ti 与 Tj 作为左右子 树构造一棵新的二叉树,并且新二叉树根结点包围
盒大小由其左右子树决定。重复该过程直到 F 中
所有的二叉树被处理完。该过程的时间复杂度为 O ( n2) 。
相关文档
最新文档