论文笔记(二十二):GRiD: GPU-Accelerated Rigid Body Dynamics with Analytical Gradients

news2024/11/24 5:46:02

GRiD: GPU-Accelerated Rigid Body Dynamics with Analytical Gradients

  • 文章概括
  • 摘要
  • 1. 介绍
  • 2. 相关工作
  • 3. 背景
    • A. *计算硬件:CPU vs. GPU*
    • B. 刚体动力学
  • 4. GRiD库
    • A. 设计
    • B. 当前特征
    • C. 代码优化方法
  • 5. 性能基准
    • A. 方法
    • B. 多重计算延时
    • C. 单一计算延时扩展
  • 6. 结论和未来工作

文章概括

作者:Brian Plancher, Sabrina M. Neuman, Radhika Ghosal, Scott Kuindersma, Vijay Janapa Reddi
来源:2022 IEEE International Conference on Robotics and Automation (ICRA) May 23-27, 2022. Philadelphia, PA, USA
原文:https://ieeexplore.ieee.org/abstract/document/9812384
代码、数据和视频:
系列文章目录:
上一篇:
论文笔记(二十一):Fusing Joint Measurements and Visual Features for In-Hand Object Pose Estimation
下一篇:


摘要

我们介绍了 GRiD:一个 GPU 加速库,用于计算具有解析梯度的刚体动力学。 GRiD 旨在加速最先进的机器人规划、控制和机器学习中使用的非线性轨迹优化子问题,这需要在每次迭代中对刚体动力学及其梯度进行数十到数百次自然并行计算。 GRiD 利用 URDF 解析和代码生成来提供优化的动态内核,这些内核不仅公开了 GPU 友好的计算模式,而且还利用了每个计算中的细粒度并行性和计算之间的粗粒度并行性。通过这种方法,当执行刚体动力学算法的多个计算时,GRiD 提供了比最先进的多线程 CPU 实现高达 7.2 倍的加速,并且在计算时保持高达 2.5 倍的加速用于 I/O 开销。我们将 GRiD 作为开源库发布,供更广泛的机器人社区使用。


1. 介绍

刚体动力学及其梯度的有效实现已成为机器人应用的关键计算内核。 最初主要用于高自由度机器人 [1]、[2]、[3]、[4] 的基于模型的规划和控制系统的非线性轨迹优化子问题,这些计算内核也在不断增长 机器学习 (ML) 技术的重要性 [5]、[6]、[7]、[8]、[9]。

尽管高度精确和优化,但现有的基于空间代数的刚体动力学方法的实现[10]并没有利用算法中存在的并行机会,限制了其性能[11], [12], [13], [14]。这一点很关键,因为在机器人学中涉及刚体动力学的许多瓶颈计算中存在自然的并行性[15], [16], [9]。例如,前向动力学的梯度占典型的非线性模型预测控制(MPC)实现的30%到90%[17], [18], [12], [16],并且在轨迹的离散点上是自然并行的。

虽然对并行计算的需求越来越大,但多核CPU的性能一直受到热耗散的限制,强制执行的利用墙限制了单个芯片可以提供的性能[19], [20]。这促使人们越来越多地使用GPU,它可以通过在单个芯片内支持更大规模的并行性而提供更高的性能机会。

在这项工作中,我们介绍了GRiD,一个基于空间代数的刚体动力学及其分析梯度的GPU加速库。GRiD被设计用来加速最先进的机器人规划、控制和机器学习算法中使用的非线性轨迹优化子问题。GRiD经过优化,使用GPU线程块来计算这些算法中发现的几十到几百个刚体动力学及其梯度的自然并行计算,并实现了最先进的轨迹优化中使用的更精确的基于空间代数的刚体动力学公式[21], [22], [23], [24]。GRiD建立在最近的工作基础上,该工作设计了一个手动优化的GPU实现刚体动力学梯度的七连杆串行链操纵器[25],提供进一步的优化和概括,以支持多种动力学算法,URDF解析大多数常见的机器人模型,并优化代码生成。

GRiD不仅释放了非线性轨迹优化完全在GPU上运行的能力,而且在进行刚体动力学及其梯度的多重计算时,它还比在高性能工作站上运行的最先进的多线程CPU实现的速度快7.2倍。GRiD还可以使用GPU作为在主机CPU上计算的刚体物理学加速器,在考虑到CPU和GPU之间的I/O通信开销时,保持高达2.5倍的速度提升。

我们将GRiD作为一个开源库发布,使机器人研究人员能够更好地探索和利用GPU平台上大规模并行的性能收益。我们的库可以在https://github.com/robot-acceleration/grid。


2. 相关工作

GRiD旨在提供通用的、基于空间代数的、具有分析梯度的动力学,并通过GPU上的大规模并行性来加速它们。

虽然现有许多最先进的基于空间代数的刚体动力学库[26]、[11]、[13]、[27]、[28],但这些库都没有针对GPU进行优化[16]。最近发布的NVIDIA Isaac Sim[29]是个例外,它在GPU上支持基于空间代数的正向模拟,但不支持梯度。

因此,先前使用基于空间代数的方法对 GPU 进行规划和控制的工作要么仅限于汽车、无人机和其他低自由度系统 [15],要么依赖于手动优化的刚体动力学实现 及其特定机器人模型的梯度 [16]、[25]。 大多数利用基于空间代数的刚体动力学的机器学习方法都依赖于上述库 [9]、[29]。

历史上,GPU也被用来通过数值微分加速梯度计算[38], [39]。然而,这些方法在用于机器人规划、控制和机器学习时,已被证明具有不太有利的数值特性。


3. 背景

A. 计算硬件:CPU vs. GPU

与多核CPU相比,GPU有一套大得多的简单处理器,专门为并行计算进行了优化,以相同的指令对以常规模式访问的数据进行操作。每个GPU处理器有更多的算术逻辑单元(ALU),但控制逻辑减少,缓存也更小(见图1)。因此,GPU最擅长在大型数据工作集上进行高度规则和可分离的计算(例如,大型矩阵-矩阵乘法),其中大部分高速缓存(被称为共享内存)可以由程序员手动管理。我们还注意到,数据必须在CPU和GPU之间传输,产生I/O的开销。

在这里插入图片描述

图一: 多核CPU和GPU处理器的高层架构

我们的工作使用NVIDIA的CUDA[40]对C++的扩展,它使用线程的并行块来计算GPU上的函数。每个区块的线程都会访问一个共享的缓存,并保证在同一个处理器上运行,但区块的顺序并不保证。关于CUDA及其编程模型的更多信息,我们建议阅读NVIDIA CUDA编程指南[40]。

B. 刚体动力学

最先进的基于空间代数的刚体动力学算法[10]在最小坐标中运行,计算关节位置 q ∈ R n q∈\mathbb{R}^n qRn、速度 q ˙ ∈ R n \dot{q}∈\mathbb{R}^n q˙Rn、加速度 q ¨ ∈ R n \ddot{q}∈\mathbb{R}^n q¨Rn和输入扭矩 τ ∈ R m \tau∈\mathbb{R}^m τRm的函数,满足:

M ( q ) q ¨ + C ( q , q ˙ ) q ˙ + G ( q ) = B ( q ) τ + J ( q ) T F (1) M(q)\ddot{q} + C(q, \dot{q})\dot{q} + G(q) = B(q)\tau + J(q)^TF \tag{1} M(q)q¨+C(q,q˙)q˙+G(q)=B(q)τ+J(q)TF(1)

其中 M ( q ) ∈ R n × n M(q)∈\mathbb{R}^{n×n} M(q)Rn×n是质量矩阵, C ( q , q ˙ ) ∈ R n × n C(q, \dot{q})∈\mathbb{R}^{n×n} C(q,q˙)Rn×n是科里奥利矩阵, G ( q ) ∈ R n G(q)∈\mathbb{R}^{n} G(q)Rn是广义的引力, B ∈ R n × m B∈\mathbb{R}^{n×m} BRn×m将控制输入映射为一般化的力量,最后 J ( q ) ∈ R n × p J(q)∈\mathbb{R}^{n×p} J(q)Rn×p将任何外力或约束力 F ∈ R p F∈\mathbb{R}^p FRp映射为广义的力。常见的算法包括:正向动力学,当给定 q 、 q ˙ 、 τ q、\dot{q}、\tau qq˙τ和可选的 F F F时,计算 q ¨ \ddot{q} q¨;逆向动力学,当给定 q 、 q ˙ 、 q ¨ q、\dot{q}、\ddot{q} qq˙q¨和可选的 F F F时,计算 τ \tau τ;以及方程1中的各种项的计算。

在计算过程中,空间代数将大多数数量表示为对 R 6 R^6 R6中的向量和 R 6 × 6 R^{6×6} R6×6中的矩阵的操作,这些都是在每个刚体的框架中定义的。这些框架被编号为 i = 1 i=1 i=1 n n n,这样每个体的父体 λ i λ_i λi是一个较低的数字。大多数刚体动力学算法通过在这些框架上的外向和内向循环来操作,收集和转换力、加速度、速度和惯性。从框架 λ i λ_i λi i i i的变换矩阵表示为 i X λ i ^{i}X_{λ_i} iXλi,可以从两个坐标框架之间的旋转和平移中构建,这两个坐标框架本身是这些框架之间的联合位置 q i q_i qi和从机器人的拓扑结构中得到的常数的函数。每个环节的质量分布用其空间惯性 I i I_i Ii表示, S i S_i Si是一个与关节有关的项,表示一个关节可以在哪些方向移动(通常是一个常数)。最后,空间代数使用空间交叉积算子 × × × × ∗ ×^∗ ×,其中一个向量被重新排序为一个矩阵,然后进行标准的矩阵乘法。对于一个向量 v ∈ R 6 v∈\mathbb{R}^6 vR6,这种重新排序显示在公式2中。
在这里插入图片描述
关于基于空间代数的刚体动力学的更多信息,我们建议阅读Featherstone的刚体动力学算法[10]。

4. GRiD库

GRiD库的开源代码可以在https://github.com/robot-acceleration/grid中找到。在这一节中,我们我们描述了它的设计、特性和代码优化方法。

A. 设计

我们的首要设计方法是使GRiD容易被其他机器人研究人员采用和扩展。

因此,优化后的CUDA C++代码被设计成只有一个头,即标准的 c u d a _ r u n t i m e . h \mathrm{cuda\_runtime.h} cuda_runtime.h库。我们还提供了APIs,允许用户自动初始化和分配CPU和GPU上所有必要的内存,并将GRiD直接集成到他们现有的CUDA代码中或通过标准的CPU C++函数调用。

最后,GRiD库是用一套模块化的开源包建立的(如图2所示),以便于扩展,并被其他机器人研究人员重新使用。我们的GRiD软件包包装了我们的GPU代码生成引擎(GRiDCodeGenerator),一个独立的URDF解析器(URDFParser),以及一套可用于代码验证和测试的刚体动力学算法的参考实现(RBDReference)。我们还将第五节中描述的基准实验作为一个单独的包(GRiDBenchmarks)提供,因为它们需要额外的外部库支持。

在这里插入图片描述

图二:GRiD库包生态系统,展示了如何将用户的URDF文件转化为优化的CUDA C++代码,然后可以根据参考输出进行验证,并进行性能基准测试。

B. 当前特征

GRiD库目前完全支持任何由渐开线、棱柱线和固定关节组成的机器人模型,并实现了以下刚体动力学算法。

  • 递归牛顿-欧拉算法(RNEA)用于逆动力学[10];
  • 质量矩阵的直逆( M − 1 M^{-1} M1)[12];
  • 通过 − M − 1 ( τ − R N E A ( q , q ˙ , 0 ) ) -M^{-1}(\tau-\mathrm{RNEA}(q, \dot{q}, 0)) M1(τRNEA(q,q˙,0))的前向动力学[10];
  • 反动力学的分析梯度与机器人的位置和速度( q q q q ˙ \dot{q} q˙)有关[12]。
  • 通过 ∂ q ¨ ∂ u = − M − 1 ∂ R N E A ( q , q ˙ , q ¨ ) ∂ u \cfrac{∂\ddot{q}}{∂u} =-M^{-1}\cfrac{∂\mathrm{RNEA}(q, \dot{q},\ddot{q})}{∂u} uq¨=M1uRNEA(q,q˙,q¨)[12],得出关于机器人位置、速度和输入扭矩( q q q, q ˙ \dot{q} q˙, u u u)的前向动力学的分析梯度。

未来的工作方向包括用额外的算法和联合类型来扩展这个核心(见第六节)。

C. 代码优化方法

GRiD建立在最近的工作基础上,该工作设计了一个手动优化的刚体动力学梯度的GPU实现,用于一个七连杆的串行链操纵器[25]。本节将详细介绍GRiD如何利用先前工作中确定的优化,以及GRiD如何扩展和概括这些优化,以便通过URDF驱动的代码生成,对更大类的机器人模型和其他刚体动力学算法进行加速。

以前的工作表明,机器人的拓扑结构和关节类型直接定义了结构化的稀疏模式和由此产生的基于空间代数的刚体动力学算法的并行机会[41], [11], [13], [25], [42]。GRiD利用独立计算之间的多线程的粗粒度并行性,以及每个计算内部的细粒度并行性。例如,在每个独立的梯度计算中,该计算的每一列都可以被并行计算。同样,在这些计算中,每个矩阵-矩阵或矩阵-向量乘法的每个条目都可以并行计算。GRiD通过使用GPU上的并行线程块,利用这种细粒度的并行性,能够实现高性能。

然而,为了让GPU有效地利用这种细粒度的并行性,以前的工作也表明,目标算法需要重构以消除同步点,并凝聚内存访问和计算操作[25]。这对空间交叉乘积操作(公式2)尤为重要,因为它导致了内存访问的失序,并将输入矢量的维度扩展为输出矩阵。我们调整了先前工作中使用的重构方法[25],通过创建可以并行计算的临时变量,将计算从串行循环中移出。

GRiD对这些产生并行性的优化进行了扩展和概括,使其能够针对任何具有分支树形拓扑结构的机器人(例如,图3)。为了做到这一点,我们注入了额外的优化,以适应树的不同层次的多个分支点。例如,由于刚体动力学算法的串行传递中的依赖关系是在树中的父框架和子框架之间,我们可以并行计算 "兄弟姐妹 "框架。例如, ∇ R N E A ∇\mathrm{RNEA} RNEA的前向传递(算法1)计算帧 i i i的临时变量 ∂ v i ∂v_i vi ∂ a i ∂a_i ai是其父帧 λ i λ_i λi ∂ v λ i ∂v_{λ_i} vλi ∂ a λ i ∂a_{λ_i} aλi的函数(第2和第3行)。因此,我们可以通过在树的各个层次中串行计算每个 ∂ v i ∂v_i vi ∂ a i ∂a_i ai,同时并行计算每个层次中的所有框架。对于图3所示的机器人,我们将计算与第0帧相关的值,然后并行计算1和5,然后并行计算2、4和6,最后计算3。GRiD还对这些剩余的串行循环执行循环解卷,以使编译器能够轻松优化结果代码。然后,一旦所有的 ∂ v ∂v v ∂ a ∂a a都被计算出来,所有的 ∂ f ∂f f就可以被完全并行计算了。

在这里插入图片描述

图三:一个机器人拓扑结构的例子。

在这里插入图片描述


当支持任意大的机器人时,确保临时变量适合GPU缓存也很重要。在代码生成时,GRiD决定是否有必要放弃任何临时内存的计算,以支持具有许多自由度(dof)的机器人。例如,对于30个自由度的Atlas人形机器人,GRiD不会并行计算每个 v × v× v×矩阵,然后使用线程矩阵乘法(如以前的工作[25]),而是在几个并行线程中计算 v 1 × v 2 v_1×v_2 v1×v2,用轻微的延迟惩罚换取大量共享内存的使用。这就产生了算法2中所示的经过重构的 ∇ R N E A ∇\mathrm{RNEA} RNEA算法的前向传递。

在这里插入图片描述


GRiD还利用机器人的拓扑结构来确定梯度计算所需的许多临时变量的稀疏性模式。因此,将跳过全部为零的临时内存变量列,并对共享内存进行压缩以有效删除这些列。对于大多数机器人模型来说,这导致了显著的节约。例如,四足机器人HyQ[43]的共享内存用量减少了60%以上(大多数所需的内存偏移量都是在代码生成时计算和缓存的。GRiD采用了非分支的 i f / e l s e if/else if/else结构(例如, r e s u l t = f l a g ∗ v a l 1 + ! f l a g ∗ v a l 2 \mathrm{result = flag∗val1 + !flag∗val2} result=flagval1+!flagval2),以避免任何其他指针偏移或控制流切换的分支性能惩罚。)。

最后,GRiD对某些类别的机器人模型采用了进一步的优化。例如,对于所有的单链机器人,父方的帧号总是比子方的少一个。对于这些机器人,GRiD生成的代码将删除对父(或子)帧号的任何间接引用,而是简单地减去(或增加)一个。

GRiD将类似的重构模式、内存压缩和计算优化应用于IV-B节中描述的所有算法。

5. 性能基准

我们将GRiD库与Pinocchio库[13](我们使用了pinocchio3-preview分支的最新优化代码。)进行比较,后者是最先进的刚体动力学的CPU实现,支持刚体动力学及其分析梯度的优化CPU代码生成。这个评估的源代码可以在以下网址找到:
https://github.com/robot-acceleration/GRiDBenchmarks

A. 方法

我们使用了一台高性能的工作站,它配备了3.8GHz的八核英特尔酷睿i7-10700K CPU和1.44GHz的英伟达GeForce RTX 3080 GPU,运行Ubuntu 20.04和CUDA 11.4 (为了在CPU上进行干净的时间测量,我们禁用了TurboBoost,并将时钟频率固定为最高。代码是用Clang 12和g++9.4编译的,时间是用Linux系统调用clock_gettime()测量的,使用CLOCK_MONOTONIC作为源。)。我们比较了三种机器人模型的计时结果:7自由度(dof)的库卡LBR IIWA-14机械手[44],12自由度的HyQ四足动物[43],以及30自由度的Atlas人形机器人[45], [46]。对于单次计算和多次计算的延迟,我们分别取了一百万次和十万次试验的平均值。

B. 多重计算延时

为了描述我们在典型的非线性轨迹优化场景中的性能,其中使用了数十到数百个动力学算法的自然并行计算,我们在图4中评估了使用Pinocchio和GRiD对机器人模型进行的 N = 16 、 32 、 64 、 128 和 256 N=16、32、64、128和256 N=163264128256的前向动力学梯度计算的延迟情况。这些时间被分解为CPU或GPU上的计算时间和GPU的I/O开销。图中叠加了GRiD与Pinocchio相比在纯计算方面的提速(或减速),以及包括I/O开销的提速。我们使用前向动力学的梯度作为我们的代表内核,因为它使用许多其他内核作为子程序,是计算强度最高的内核,清楚地显示了扩展趋势。

在这里插入图片描述

图四:在Pinocchio CPU基线和GRiD GPU库对各种机器人模型(IIWA、HyQ和Atlas,如第V-A节所述)进行N=16、32、64、128和256的前向动力学梯度计算的延迟(包括GPU I/O开销)。叠加的是GRiD与Pinocchio相比,在纯计算和包括I/O开销方面的加速(或减速)。

除了一项多重计算延迟测试外,GPU在其他所有测试中都优于CPU,即使考虑到I/O。在CPU更快的一项测试中–包括I/O在内的计算量最少的IIWA(最小的只有一个肢体的机器人),GPU的速度仍然是0.9倍。

即使在CPU上,这个基准也显示了利用计算之间的粗粒度并行的优势是多么重要。例如,前向动力学内核的梯度(表I中的 ∇ F D ∇F D FD)在IIWA,HyQ和Atlas的单次计算中分别需要2.9,4.3和20.9微秒。如果我们连续运行256次,将花费超过742,1091和5355微秒。如图4所示,在8核上并行计算只需要123、172、865微秒,节省了83-84%的计算时间。

然而,由于CPU只有8个内核,它无法有效地扩展以利用大量的自然并行计算,与IIWA、HyQ和Atlas的N=16相比,N=256的计算时间分别为5.4倍、6.2倍和11.8倍。

另一方面,GPU的设计是通过为每个计算启动独立的线程块来扩展到更高的计算数量而不产生延迟惩罚。事实上,对于IIWA和HyQ,N=256只需要N=16的1.3倍和1.5倍时间。这导致GPU在N=256的情况下比CPU多出5.3倍和7.2倍,在包括I/O的情况下保持2.5倍和2.1倍的速度。

对于高得多的Atlas机器人,在N=256的情况下,GPU仍然比CPU高出5.0倍,如果包括I/O,则高出2.0倍。然而,与IIWA和HyQ不同的是,这一性能提升与N=128和N=64时的提升几乎相同。这种性能提升的停滞是由Atlas的30 dof所需的大量共享内存造成的,这开始限制了GPU硬件上可以同时容纳的平行线程块的数量。

最后,我们注意到,对于GPU来说,在N=256的情况下,I/O开销占到总时间的53-71%。这表明,如果将GRiD直接集成到一个完全基于GPU的算法中,而不是用来加速基于CPU的算法的一个步骤,那么GRiD可以提供最高的性能。然而,在这两种情况下,如果有足够的并行工作要做,GRiD可以减少整个计算延迟。

C. 单一计算延时扩展

为了进一步分析第V-B节中展示的GPU性能优势,我们在图5中绘制了从IIWA到HyQ和IIWA到Atlas的每种刚体动力学算法在CPU和GPU上的单一计算的延迟扩展,不包括I/O开销,并在表I中列出了绝对时间。我们还绘制了机器人的缩放比例,作为衡量其计算复杂性的标准。

我们发现,通过利用独立的机器人肢体和梯度计算的独立列所引起的细粒度并行性,GPU能够比CPU更好地扩展到更复杂的机器人和算法。正如预期的那样(与以前的工作[25]一致),GPU在单次计算上比CPU慢,但GPU在算法和机器人复杂度上都表现出更好的可扩展性。例如,如表I所示,对于 ∇ F D ∇FD FD,CPU比GPU快4.4倍(2.9µs vs. 12.9µs),但对于Atlas只快2.0倍(20.9µs vs. 42.1µs)。也就是说,在所有单独的计算中,CPU仍然比GPU快,这表明GPU加速只有在有足够的并行工作要做的时候才有意义。

在CPU上,每种算法的延迟直接与它的计算强度成正比,梯度需要明显更多的计算(见表一)。计算强度最大的算法,正向动力学梯度( ∇ F D ∇FD FD),在IIWA,HyQ和Atlas中需要2.9,4.3和20.9μs,而最简单的算法,逆向动力学(ID)需要0.3,0.3和1.1μs–9.7倍到19.0倍的延迟。

在这里插入图片描述

CPU的延迟也会随着机器人的摇摆度而变化(图5)。例如,从IIWA到HyQ,机器人的齿数增加了1.7倍,计算时间也增加了1.1倍,对于 O ( N ) I D O(N)ID O(N)ID算法,对于 O ( N 2 ) ∇ F D O(N^2)∇FD O(N2)FD算法,增加了1.5倍。似乎这种强大的性能是由于代码生成利用了梯度中的许多共享计算,以及HyQ的独立肢体所引起的稀疏性,这使得通过刚体树的最长路径从IIWA的7条减少到HyQ的3条。然而,这些优化被Atlas模型缓解了,它有一个更大的30 dof,通过刚体树的最长路径为8。Atlas有4.3倍于IIWA的dof,但在CPU上有3.9倍 ( I D ) (ID) ID到7.2倍 ( ∇ F D ) (∇FD) FD的减速。

在这里插入图片描述

图五:在Pinocchio CPU基线和GRiD GPU库中,各种刚体动力学算法(ID=逆向动力学,Minv=直接Minv,FD=正向动力学,∇表示该算法的梯度)的单一计算延迟从IIWA到HyQ和IIWA到Atlas的比例。我们还绘制了机器人的缩放比例,作为衡量其复杂性增加的一个标准。

相比之下,GPU不仅能够利用稀疏性和共享计算来提高其可扩展性,而且还能利用复杂机器人模型中的独立肢体和梯度计算的独立列造成的细粒度并行的机会。例如,表I显示,通过利用梯度计算中的并行性,GPU不仅能够比 F D FD FD更快地计算 ∇ I D ∇ID ID,而且只需要12.9,11.0和42.1微秒(对于IIWA,HyQ,Atlas),而ID只需要3.0,3.2和8.0微秒–速度只下降了3.4倍到5.3倍,与CPU的9.7倍到19.0倍的速度相比,这些算法的速度明显降低。同样,图5显示,通过利用基于肢体的并行性,GPU计算HyQ的前向动力学 ( F D ) (FD) FD和两个梯度 ( ∇ I D , ∇ F D ) (∇ID,∇FD) IDFD的速度比IIWA快,而且从IIWA到Atlas只有2.7倍到3.3倍的减速,同样比CPU的3.9倍到7.2倍有明显减少。

6. 结论和未来工作

在这项工作中,我们介绍了GRiD,一个具有分析梯度的GPU加速的刚体动力学库。我们发现,在对刚体动力学算法进行多次计算时,通过利用大规模的并行性,GRiD可以比最先进的多线程CPU实现提供多达7.2倍的速度,并且在包括I/O开销时保持多达2.5倍的速度。

未来的工作有许多有希望的方向,以扩展GRiD库的功能和多功能性。我们目前正在开发的工作是扩展GRiD,以支持目前最先进的基于CPU空间代数的刚体动力学库所支持的全部刚体动力学算法和机器人模型[26], [11], [13], [27], [28]。此外,我们正在开发更高级别的语言对我们的C++主机函数的封装,以使其更容易利用GRiD。

我们希望探索新兴的刚体动力学算法,以及刚体动力学的替代公式和实现,这可能通过暴露额外的并行性和计算效率来提高整体性能[47]、[48]、[49]、[50]、[51]、[52]、[53]、[54]、[55]。

我们还希望增加对通过模型参数[56]、[57]以及接触的支持,并希望将这些加速动力学的实现整合到现有的机器人软件框架中[58]、[59]、[60]、[16]、[61]。这将增加GRiD的易用性和对更多机器人研究者的适用性。

最后,为更多完全在GPU上运行的轨迹优化、MPC和ML算法建立更多的支持,将进一步提高将GRiD集成到这些方法中的性能优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

母线电容及其计算方法

母线电容及其计算方法 1.母线电容是什么? 2.母线电容有什么作用? 3.母线电容的参数。 4.母线电容参数计算。 1.母线电容是什么? 工程定义: (1)在电机控制器中,电池包的直流电作为输入电源&am…

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题

有朋友在技术讨论群里提问: 遇到 SYSTEM_SHM_OPEN_CHANGE_LOCK 的运行时错误:Open change lock on transactional area in COMMIT: 上图显示,错误在 SAP ABAP 标准程序 SAPMHTTP 里抛出,这说明是 ABAP 服务器进行 HTTP 请求处理或…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.23 SpringBoot 整合 RabbitMQ(direct 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.23 SpringBoot 整合 RabbitMQ(direct 模式)5.23.1…

web前端期末大作业——基于html+css+javascript+jquery+bootstrap响应式户外旅游网站

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

分析高数值孔径物镜的聚焦

摘要 高数值孔径物镜广泛用于光学光刻、显微镜等。因此,在聚焦模拟中考虑光的矢量性质是非常重要的。 VirtualLab非常容易支持这种镜头的光线和光场追迹分析。 通过光场追迹,可以清楚地展示不对称焦斑,这源于矢量效应。 照相机探测器和电磁场…

解决台式机麦克风不可用问题,只有音频输出,无音频输入

解决台式机麦克风不可用问题 戴尔灵越3880 最近因为需要开线上会议,发现戴尔台式机音频只有输出没有输入,也就是只能听见声音,无法输入声音。 先后尝试了各种驱动安装更新之类的调试,无果。 之后通过戴尔支持解决~ 这里多说一…

京东主图视频上传,如何关联商品投放?

京东主图视频怎么做,如何上传主图视频?大家都知道商品可以展示五张主图,主图可以帮助买家更好地了解产品卖点。而主图视频可以更全面的展示产品,对此京麦还设置了不同类型的视频模板,但是很多新手商家往往在上传视频的…

适配器模式(Gateway中GatewayFilter和GlobalFilter整合实现)

文章目录GlobalFilter(代表全局过滤器)GatewayFilter(代表路由过滤器)GlobalFilterAdapter(适配器关键)测试类执行结果在SpringCloud Gateway中有两个不同的过滤器接口,分别是GatewayFilter和GlobalFilter。 GlobalFilter:全局过滤器。不需要再配置文件…

在外公网调阅公司内网资料文件【内网穿透】

优盘体积小巧重量轻,是不少人移动存储数据的首选。但优盘虽然方便携带,但也正是因为小巧和轻便,导致一不留神就会丢失,并且存储的数据也会有损坏的风险,因此在云存储概念兴起后,就快速成为数据存储的新风尚…

网络安全之反序列化漏洞复现

0x01 Apereo cas简介 Apereo CAS 单点登陆系统是Java服务器环境下使用较为广泛的单点登陆系统。 CAS 全程Central Authentication Service(中心认证服务),是一个单点登录协议,Apereo CAS是实现该协议的软件包。 单点登录定义 …

【面试】Android 大厂必问的8大模块,你掌握了几个?

自15年毕业进入社会从事 Android 开发行业,,已经将近有八年的时光了; 在这将近八年的时间内, 我从 小厂打杂到进入到核心团队,再跳槽到大厂; 在华为呆过一段时间,18年四月份进了阿里一直到现在&…

体态识别算法在 Android 端部署实例

背景介绍 随着软硬件技术的发展,智能穿戴式设备逐渐从概念走向商用化。在过去几年内,Google、Apple以及Sony等科技公司在体积、功耗控制以及成本等方面做得越来越好,推出了一大批可穿戴产品,具有代表性的成果有:1. 智能…

Cy5 Alkyne,1223357-57-0,花青素Cyanine5炔基用于点击化学标记反应

CAS号:1223357-57-0 | 英文名: Cyanine5 alkyne,Cy5 Alkyne | 中文名:花青素CY5炔基 CASNumber:1223357-57-0 Molecular formula:C35H42ClN3O Molecular weight:556.19 Purity:9…

【CNN】ResNet——开启的深度学习从1到无限可能的新时代

前言 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,ResNet在2015年发表当年取得了图像分类,检测等等5项大赛第一,并又一次刷新了CNN模型在ImageNet上的历史记录。直到今天&#…

《看漫画学Python》1、2版分享,python最佳入门教程,中学生用业余时间都能学会,北大教授看完都这样定义它

前言 学习Python的小伙伴大部分应该都知道《看漫画学Python:有趣、有料、好玩、好用(全彩版)》这本书! 但是刚开始接触Python的朋友都会有一个共同的烦恼,自学好无聊,好枯燥,不想坚持了……所…

Ajax使用

简介: 全称:Asynchronous JavaScript And XML 中文名:异步js与XML 作用:网页使用JavaScript脚本实现前端与服务器的异步交互技术,可以在不刷新网页的前 提下实现和服务器的数据交互 注意:ajax不是一种编程语言,而是使用JS的一种技术。 使用步骤 步骤&am…

最佳镜像搬运工 Skopeo 指南

最佳镜像搬运工 Skopeo 指南 文章目录最佳镜像搬运工 Skopeo 指南1. 概述2. Skopeo 是如何工作的?3. 为什么要用 Skopeo?3.1 灵活性3.2 安全性和可访问性3.3 功能多样性4. 安装4.1 Fedora4.2 RHEL / CentOS Stream ≥ 84.3 RHEL/CentOS ≤ 7.x4.4 Ubuntu…

GPU显存占满但利用率却很低

来帕多瓦联培已经一个多月了,最近调代码跑实验又发现了这个问题。这里提供另外一个解决思路。一个原因还是 cpu没跟上gpu节奏。 通常我们都会用尽可能大的 batch 来占满显存。但是如果cpu的读取和传输跟不上的话就会导致gpu利用率时上时下,而且训练时间…

2022.3IDEA配置grep console

首先安装Grep Console (这个大家都会吧) 安装之后 打开File 选项的Setting→Other Settings→Grep Console 3. 打开之后默认的样式是下图(我做了一下标识) whole line:是否一整行都是这个样式。用于区分一个关键字和一行字case insensitive: 不勾选就行…

spring cache (ehcache方式)

目录前置pom: jar配置文件:ehcache.xmlapplication.ymlMyEhCacheCacheConfiguration.java效果图禁用 MyEhCacheCacheConfiguration.java启用 MyEhCacheCacheConfiguration.java前置 会演示springcache的使用方式 项目地址: https://gitee.com/xmaxm/test-code/blob/master/cha…