更新日志#

1.7.1 - 2025-04-30#

新增#

  • 添加使用 mpi4py 的分布式 Jacobi 求解器示例,位于 warp/examples/distributed/example_jacobi_mpi.py (GH-475)。

修改#

  • 改进 Warp 类型的 repr(),包括为 wp.array 添加 repr()

  • 更改 USD 渲染器使用 framesPerSecond 进行时间采样,而不是 timeCodesPerSecond,以避免某些查看器中的播放速度问题 (GH-617)。

  • Model.rigid_contact_tids 在非活动接触索引处现在是 -1,这允许检索网格碰撞的顶点索引,请参见 test_collision.py (GH-623)。

  • 改进对已弃用 JAX 特性的处理 (GH-613)。

修复#

  • 修复涉及 Warp 内核中返回语句的代码生成错误,该错误可能导致在 GPU 上处理时跳过 Warp 中的某些线程 (GH-594)。

  • 修复从 wp.fem.Trimesh3D 几何体构造 DeformedGeometry 的问题 (GH-614)。

  • 修复 wp.fem.Trimesh3Dlookup 运算符 (GH-618)。

  • 在 Cholesky 求解器的 LTO 文件哈希中包含块维度 (GH-639)。

  • 修复对于源内存对齐的小瓦片进行的瓦片加载问题 (GH-622)。

  • 修复 Python 作用域中向量和矩阵的长度/形状匹配问题。

  • 修复 wp.quaternion() 缺少 dtype 参数的问题。

  • 修复使用字面值和显式 dtype 参数时,wp.matrix()/wp.vector()/wp.quaternion() 构造函数中无效的 dtype 比较问题 (GH-651)。

  • 修复 wp.sim.collide() 后向传递中不正确的线程索引查找问题 (GH-459)。

  • 修复 wp.sim.ModelBuilder 以 -1 作为顶点索引添加弹簧的错误 (GH-621)。

  • 修复网格形状的质心和惯性计算问题 (GH-251)。

  • 修复计算物体质心时未考虑形状方向的问题 (GH-648)。

  • 修复 show_jointswp.sim.render.SimRenderer 设置为渲染到 USD 时不起作用的问题 (GH-510)。

  • 修复 OgnParticlesFromMesh 节点抖动计算不正确的问题。

  • 修复 wp.autograd.gradcheck()wp.autograd.gradcheck_tape() 的参数 atolrtol 的文档问题 (GH-508)。

1.7.0 - 2025-03-30#

新增#

  • 支持 JAX 外部函数接口 (FFI) (文档, GH-511)。

  • 通过在 CUDA-C 代码中发出 #line 指令,支持 Nsight Compute 报告中的 Python/SASS 关联。此设置由 wp.config.line_directives 控制,默认值为 True。 (文档, GH-437)

  • 支持在 wp.Volume.allocate_by_tiles() 中构造 vec4f 网格。

  • 添加 2D SVD wp.svd2() (GH-436)。

  • 添加 wp.randu() 用于生成随机 uint32

  • 添加矩阵构造函数 wp.matrix_from_cols()wp.matrix_from_rows() (GH-278)。

  • 添加 wp.transform_from_matrix() 以从 4x4 矩阵获取变换 (GH-211)。

  • 添加 wp.where() 以使用更直观的参数顺序 (cond, value_if_true, value_if_false) 有条件地在两个参数之间进行选择 (GH-469)。

  • 添加 wp.get_mempool_used_mem_current()wp.get_mempool_used_mem_high(),以查询内存池分配器的当前和最高水位标记内存使用情况。 (GH-446)。

  • 添加 Stream.is_completeEvent.is_complete 属性以查询完成状态 (GH-435)。

  • 支持在 CUDA 图中进行计时事件 (GH-556)。

  • 添加 LTO 缓存以加快使用 MathDx 瓦片函数的内核的编译时间。使用 wp.clear_lto_cache() 清除 LTO 缓存 (GH-507)。

  • 添加示例,演示在 warp/examples/optim/example_fluid_checkpoint.py 中进行流体优化的梯度检查点。

  • wp.sim.VBDIntegrator 添加基于铰链角度的弯曲力。

  • 添加示例以展示使用 CDF 进行网格采样 (GH-476)。

修改#

  • 重大变更:移除 CUTLASS 依赖项和 wp.matmul() 功能(包括批处理版本)。用户应改用瓦片原语进行矩阵乘法运算。

  • 弃用使用 wp.matrix() 从向量构造矩阵的方法。

  • 弃用 wp.select(),改用 wp.where()。用户应将其代码更新为使用 wp.where(cond, value_if_true, value_if_false),而不是 wp.select(cond, value_if_false, value_if_true)

  • wp.sim.Control 不再具有 model 属性 (GH-487)。

  • wp.sim.Control.reset() 已弃用,现在仅将控制器归零(之前会将控制器恢复到初始 model 状态)。请改用 wp.sim.Control.clear()

  • 向量/矩阵/四元数分量赋值操作(例如,v[0] = x)现在在后向传递中编译和运行速度更快。注意:为了正确的梯度计算,每个分量应仅赋值一次。

  • @wp.kernel 现在有一个可选的 module 参数,允许将 wp.context.Module 传递给内核,或者,如果设置为 "unique",则让 Warp 仅为此内核创建一个新的唯一模块。使用当前模块的默认行为保持不变。

  • 默认 PTX 架构现在根据系统中存在的设备自动确定,确保最佳兼容性和性能 (GH-537)。

  • 结构体现在具有简单的默认构造函数,允许在具有结构体数据类型的瓦片上使用 wp.tile_reduce()

  • 扩展 wp.tile_broadcast() 以支持广播到 1D、3D 和 4D 形状(除了现有的 2D 支持)。

  • wp.fem.integrate()wp.fem.interpolate() 现在可以在单元内并行评估高斯积分点。

  • wp.fem.interpolate() 现在可以构建插值函数相对于试探场的雅可比稀疏矩阵。

  • 多个 wp.sparse 例程 (bsr_set_from_triplets, bsr_assign, bsr_axpy, bsr_mm) 现在接受 masked 标志,以丢弃目标矩阵中尚不存在的任何非零值。

  • wp.sparse.bsr_assign() 不再要求源块形状和目标块形状彼此整除。

  • 扩展 wp.expect_near() 以支持所有向量和四元数。

  • 扩展 wp.quat_from_matrix() 以支持 4x4 矩阵。

  • 更新 OgnClothSimulate 节点以使用 VBD 积分器 (GH-512)。

  • OgnClothSimulate 节点移除 globalScale 参数。

修复#

  • 修复由不平衡 BVH 树导致的越界访问错误 (GH-536)。

  • 修复将一个 ModelBuilder 添加到另一个时,错误地将偏移量添加到 edge_indices 中 -1 元素的问题 (GH-557)。

1.6.2 - 2025-03-07#

修改#

  • 将项目许可证从 NVIDIA Software License 更新为 Apache License, Version 2.0(参见 LICENSE.md)。

1.6.1 - 2025-03-03#

新增#

  • 文档化 wp.Launch 对象 (文档, GH-428)。

  • 文档化覆盖先前计算结果如何导致不正确的梯度 (文档, GH-525)。

修复#

  • 修复在 wp.tile_load() 中使用偏移 2D 瓦片进行未对齐加载的问题。

  • 修复线程级矩阵乘法的 FP64 精度问题 (GH-489)。

  • 修复当目标设备是 CPU 时,wp.array() 未从定义 CUDA 数组接口的数组进行初始化的问题 (GH-523)。

  • 修复 wp.Launch 对象未能存储和重放伴随内核启动的问题 (GH-449)。

  • 修复 wp.config.verify_autograd_array_access 未能检测到泛型 Warp 函数中覆盖的问题 (GH-493)。

  • 修复在 Windows 上关闭 OpenGLRenderer 应用程序时出现错误的问题 (GH-488)。

  • 修复传递恒定颜色时,顶点颜色未正确写入 USD 网格的问题 (GH-480)。

  • 修复在启用 handle_self_contact 时,使用 CUDA 图捕获 wp.sim.VBDIntegrator 时出现错误的问题 (GH-441)。

  • 修复 wp.collide.TriMeshCollisionDetector 中 AABB 计算错误的问题。

  • 修复 URDF 导入的平面关节未按预期设置 target_ke, target_kdmode 参数的问题 (GH-454)。

  • 修复 ModelBuilder.add_builder() 未对 ModelBuilder.joint_parentModelBuilder.joint_child 使用正确偏移量的问题 (GH-432)

  • 修复盒-球体和盒-胶囊体碰撞接触点分配不足的问题。

  • 修复 wp.randi() 文档未显示正确输出范围 [-2^31, 2^31) 的问题。

1.6.0 - 2025-02-03#

新增#

  • 通过 wp.tile_cholesky(), tile_cholesky_solve()tile_diag_add() 添加瓦片 Cholesky 分解和求解 API 预览(预览 API 可能随时更改)。

  • 支持从形状不是瓦片维度倍数的数组加载瓦片。越界读取将填充零,越界写入将被跳过。

  • 支持更高维度(最高 4D)的瓦片形状和内存操作。

  • 通过传递 handle_self_contact=True,在 wp.sim.VBDIntegrator 中添加无交集自接触支持。有关用法示例,请参见 warp/examples/sim/example_cloth_self_contact.py

  • 为向量类型添加函数 wp.norm_l1(), wp.norm_l2(), wp.norm_huber(), wp.norm_pseudo_huber()wp.smooth_normalize() 到新的 wp.math 模块。

  • wp.sim.SemiImplicitIntegratorwp.sim.FeatherstoneIntegrator 现在有一个可选的 friction_smoothing 构造函数参数(默认为 1.0),用于控制摩擦范数计算的柔和度。

  • 支持在内核中使用 assert 语句 (文档)。断言只能在 "debug" 模式下触发 (GH-366)。

  • 支持 Linux 上的 CUDA IPC。调用 ipc_handle() 方法以获取 wp.Eventwp.array 的 IPC 句柄,并在另一个进程中调用 wp.from_ipc_handle()wp.event_from_ipc_handle() 以打开该句柄 (文档)。

  • 添加按模块选项以禁用融合浮点运算,使用 wp.set_module_options({"fuse_fp": False}) (GH-379)。

  • 添加按模块选项以添加用于性能分析的 CUDA-C 行信息,使用 wp.set_module_options({"lineinfo": True})

  • 通过定义 wp.func 函数,支持 wp.struct 对象的运算符重载 (GH-392)。

  • 添加内置函数 wp.len(),用于检索向量、四元数、矩阵和数组的元素数量 (GH-389)。

  • 添加 warp/examples/optim/example_softbody_properties.py 作为软体属性的优化示例 (GH-419)。

  • 添加 warp/examples/tile/example_tile_walker.py,它重写了现有的 example_walker.py 以使用 Warp 的瓦片 API 进行矩阵乘法。

  • 添加 warp/examples/tile/example_tile_nbody.py 作为使用 Warp 瓦片原语进行 N 体仿真的示例。

修改#

  • 重大变更:更改 wp.tile_load()wp.tile_store() 索引行为,使索引现在以数组元素而不是瓦片倍数来指定。

  • 重大变更:瓦片操作现在接受 shapeoffset 参数作为元组,例如:wp.tile_load(array, shape=(m,n), offset=(i,j))

  • 重大变更:更改瓦片函数抛出的异常类型和错误消息,以提高一致性。

  • 每当共享内存瓦片的数据被重新初始化时(例如在动态循环中),添加隐式瓦片同步。这可能导致性能下降。

  • wp.Bvh 构造函数现在通过 constructor 参数支持各种构造算法,包括 "sah"(表面积启发式)、"median""lbvh" (文档)

  • 提高 wp.Bvhwp.Mesh 的查询效率。

  • 在使用 enable_backward 设置为 False 的内核中进行就地向量/矩阵赋值时,改进内存消耗、编译和运行时性能 (GH-332)。

  • 向量/矩阵/四元数分量 +=-= 运算在后向传递中编译和运行速度更快 (GH-332)。

  • 根据目录命名内核缓存中的文件。以前,所有文件都以 module_codegen 开头 (GH-431)。

  • 更改 block_dim 时避免模块重新编译。

  • wp.autograd.gradcheck_tape() 现在具有额外的可选参数 reverse_launchesskip_to_launch_index

  • wp.autograd.gradcheck(), wp.autograd.jacobian()wp.autograd.jacobian_fd() 现在也接受以 Warp 数组作为输入和输出的任意 Python 函数。

  • OpenGL 渲染器中的 update_vbo_transforms 内核启动不再记录到 Tape 上。

  • enable_backward 设置为 False 时,跳过在生成的 C++/CUDA 代码中发出后向函数/内核。

  • 对在 wp.array 初始化器中使用 ownerlength 关键字发出弃用警告。

  • 对使用 wp.mlp(), wp.matmul()wp.batched_matmul() 发出弃用警告。请改用瓦片原语。

修复#

  • 修复后向传递过程中意外修改非 Warp 数组的问题 (GH-394)。

  • 修复 wp.Tape.zero()wp.Tape.backward() 中通过 grads 参数传递的梯度归零的问题 (GH-407)。

  • 修复模块卸载导致图捕获过程中出现错误的问题 (GH-401)。

  • 修复使用跨步分配数组时潜在的内存损坏错误 (GH-404)。

  • 修复当给定数据是具有 CUDA 接口的另一个数组时,wp.array() 未遵守目标 dtypeshape 的问题 (GH-363)。

  • 负常量被评估为编译时常量 (GH-403)

  • 修复在 Windows 上使用 OpenGL 渲染器时,解释器关闭期间抛出 ImportError 异常的问题 (GH-412)。

  • 修复 OpenGL 渲染器在多个实例同时存在时无法工作的问题 (GH-385)。

  • 修复在 OpenGL 渲染器中移动相机时出现的 AttributeError 崩溃问题 (GH-426)。

  • 修复 OpenGL 渲染器无法正确显示重复的胶囊体、圆锥体和圆柱体形状的问题 (GH-388)。

  • 修复 wp.sim.ModelBuilder 默认参数被覆盖的问题 (GH-429)。

  • 修复当块维度小于瓦片大小时 wp.tile_extract() 的索引问题。

  • 修复颗粒碰撞 SDF 示例中使用的岩石几何体的缩放和旋转问题 (GH-409)。

  • 修复 wp.autograd.jacobian() 中的自动微分雅可比计算问题,在某些情况下梯度未正确归零。

  • 修复 wp.autograd.jacobian_plot() 中的绘图问题。

  • 修复 len() 运算符返回矩阵总大小而非其第一维度的问题。

  • 修复 wp.sim.SemiImplicitIntegratorwp.sim.FeatherstoneIntegrator 中刚体接触处理的梯度不稳定性问题 (GH-349)。

  • 修复带有默认参数的泛型 Warp 函数的重载解析问题。

  • 修复在 OpenGLRenderer 中渲染不同 up_axis, color 箭头的 问题 (GH-448)。

1.5.1 - 2025-01-02#

新增#

  • 将 PyTorch 基础和自定义运算符 Notebook 添加到 notebooks 目录中。

  • 更新 PyTorch 互操作文档,增加关于自定义运算符的部分 (文档)。

修复#

  • warp.sim: 修复色彩平衡算法未更新着色的错误。

  • 修复在 OpenGL 中渲染静态拓扑网格时自定义颜色未更新的问题 (GH-343)。

  • 修复 wp.launch_tiled() 在传递 record_cmd=True 时未返回 Launch 对象的问题。

  • 修复从 Python 运行时调用 wp.func 时未解析默认参数的问题 (GH-386)。

  • 数组覆盖跟踪:修复未将传递给 wp.atomic_add(), wp.atomic_sub(), wp.atomic_max(), 或 wp.atomic_min() 的数组标记为已写入的问题 (GH-378)。

  • 修复在 Windows 上偶尔无法将 .meta 文件更新到 Warp 内核缓存的问题。

  • 修复 OpenGL 渲染器在没有可用的 CUDA 设备时无法运行的问题 (GH-344)。

  • 修复不正确的 CUDA 驱动程序函数版本问题 (GH-402)。

1.5.0 - 2024-12-02#

新增#

  • 支持使用 cuBLASDx 和 cuFFTDx 的协作式基于瓦片的原语,详情请参见瓦片 文档

  • 为迭代器公开一个内置的 reversed() 函数 (GH-311)。

  • 支持使用 save_to_nvdb 方法将 Volumes 保存到 .nvdb 文件中。

  • warp.fem: 为 3D 表面添加 wp.fem.Trimesh3Dwp.fem.Quadmesh3D 几何类型,并附带新的 example_distortion_energy 示例。

  • warp.fem: 为 wp.fem.integrate() 添加 "add" 选项,用于将积分结果累加到现有输出。

  • warp.fem: 为 wp.fem.integrate() 添加 "assembly" 选项,用于选择内存效率更高或计算效率更高的积分算法。

  • warp.fem: 添加 Nédélec(第一类)和 Raviart-Thomas 向量值函数空间,分别提供 curldiv 算子的符合条件的离散化。

  • warp.sim: 添加一个图着色模块,支持将三角网格转换为顶点图并应用着色。wp.sim.ModelBuilder 现在包含用于为粒子着色的方法,以便与 wp.sim.VBDIntegrator() 一起使用,用户应在最终确定资产之前调用 builder.color()

  • warp.sim: 支持使用 wp.sim.Model.particle_radius 数组 (文档) 为软体三角形接触添加每个粒子的半径,替换了之前硬编码的值 0.01 (GH-329)。

  • wp.sim.ModelBuilder.add_cloth_mesh()wp.sim.ModelBuilder.add_cloth_grid() 添加 particle_radius 参数,用于设置新增粒子的统一半径。

  • 文档化 wp.array 属性 (GH-364)。

  • 文档化在内核中使用向量分量赋值语句时的编译时间权衡。

  • notebooks 目录中添加入门级 Jupyter Notebook。

变更#

  • 停止支持 Python 3.7;Python 3.8 现在是最低支持版本。

  • wp.Int, wp.Float, 和 wp.Scalar 泛型注解类型提升为公共 API。

  • warp.fem: 使用新的 wp.fem.cells(), wp.fem.to_inner_cell(), wp.fem.to_outer_cell() 运算符,简化在侧面积分时查询相邻单元格量的工作。

  • 当函数返回类型与其注解不同时显示错误消息,这之前会导致编译阶段失败。

  • 澄清 wp.randn() 采样的是均值为 0、方差为 1 的正态分布。

  • 当向内置的 wp.printf() 传递超过 32 个可变参数时引发错误。

修复#

  • 修复 paddle 后端的 place 设置问题。

  • warp.fem: 修复四边形网格上的三三次形状函数问题。

  • warp.fem: 修复更改代码生成选项时被积函数内核的缓存问题。

  • 修复标量类型缺失 wp.expect_neq() 重载的问题。

  • 修复当 wp.kernelwp.func 对象被注解为返回 None 值时出现的错误。

  • 修复读取多卷、BLOSC 压缩的 .nvdb 文件时出现的错误。

  • 修复 wp.printf() 在未传递可变参数时报错的问题 (GH-333)。

  • 修复软体-刚体接触碰撞中的内存访问问题 (GH-362)。

  • 修复自定义向量类型数组原地加/减操作的梯度传播问题。

  • 修复点击 X 按钮时 OpenGL 渲染器窗口未关闭的问题。

  • 修复 OpenGL 渲染器在首次环顾四周时相机方向突然跳到与初始相机方向不同的问题。

  • 修复在 OpenGL 中渲染网格时忽略自定义颜色问题 (GH-343)。

  • 修复 OpenGL 渲染器不支持拓扑更新的问题。

1.4.2 - 2024-11-13#

变更#

  • 使 wp.print() 在反向传播内核中的输出对于所有支持的数据类型保持一致。

修复#

  • 修复在索引数组时放宽预期整数类型的问题(1.3.0 中的回归)。

  • 修复在反向传播内核中打印向量和矩阵伴随矩阵的问题。

  • 修复打印结构体时内核编译错误问题。

  • 修复当存在多个带有不同 dtype 值的数组参数重载时,有时解析到不正确的用户函数的问题。

  • 修复当静态和动态 for 循环以相同的迭代变量名顺序编写时引发错误的问题 (GH-331)。

  • 修复 Mandelbrot Omniverse 示例中使用的 Texture Write 节点有时在多 GPU 环境中报错的问题。

  • 原地乘法和除法操作的代码生成问题(在 a69d061 中引入的回归)(GH-342)。

1.4.1 - 2024-10-15#

修复#

  • 修复 iter_reverse() 对于步长不为 1 的范围无法按预期工作的问题 (GH-311)。

  • 修复当 wp.sparse.BsrMatrix 对象被重复用于存储不同形状的矩阵时可能出现的越界内存访问问题。

  • 修复 wp.fem.utils.symmetric_eigenvalues_qr 在非常低期望容差下的鲁棒性问题。

  • 修复嵌套动态和静态 for 循环时无效代码生成错误消息问题。

  • 修复带有静态表达式的内核的缓存问题。

  • 修复 ModelBuilder.add_builder(builder)builder 包含多个关节时无法正确更新 articulation_start 并因此更新 articulation_count 的问题。

  • wp.rand*(), wp.sample*(), 和 wp.poisson() 重新引入到 Python 作用域,以恢复一个破坏性变更。

1.4.0 - 2024-10-01#

新增#

  • 支持一个新的 wp.static(expr) 函数,允许在函数/内核定义时评估任意 Python 表达式 (文档)。

  • 支持流优先级,以提示设备在可能的情况下优先处理高优先级流中的待处理工作,而不是低优先级流中的待处理工作 (文档)。

  • warp.fem 添加自适应稀疏网格几何体 (文档)。

  • 支持在闭包内部定义 wp.kernelwp.func 对象。

  • 支持定义多个版本的内核、函数和结构体,而无需手动分配唯一键。

  • 支持使用 wp.func 修饰的用户函数的默认参数值。

  • 允许向 jax_kernel() 传递自定义启动维度 (GH-310)。

  • JAX 分片和矩阵乘法的互操作示例 (文档)。

  • 支持与 PaddlePaddle 机器学习框架的互操作 (GH-318)。

  • 支持向量类型的 wp.mod() (GH-282)。

  • 将模运算符 % 公开给 Python 运行时的标量和向量类型。

  • 支持 fp64 atomic_addatomic_maxatomic_min (GH-284)。

  • 支持四元数索引(例如 q.w)。

  • 支持遮蔽内置函数 (GH-308)。

  • 支持重新定义函数重载。

  • omni.warp 扩展添加一个海洋示例。

  • warp.sim.VBDIntegrator 现在支持刚体-粒子碰撞。

  • 在 Sphinx 文档中添加一个贡献指南

  • 添加动态代码生成的文档 (文档)。

变更#

  • wp.sim.Model.edge_indices 现在包含边界边。

  • 从 Python 作用域中移除对 wp.rand*(), wp.sample*(), 和 wp.poisson() 的暴露。

  • 在模块代码生成中跳过未使用的函数,提高性能。

  • 如果模块内容未更改,则避免重新加载模块,提高性能。

  • wp.Mesh.points 现在是一个属性,而不是原始数据成员,其引用可以在网格初始化后更改。

  • 改进在 Warp 内核中引用无效对象时的错误消息。

  • 带有常量条件的 if/else/elif 语句在编译时被解析,生成的代码中不会插入分支。

  • 在存根文件中包含所有非隐藏的内置函数。

  • 提高 warp.fem 中对称特征值例程的精度。

修复#

  • 修复 wp.func 在定义 Tuple 作为返回类型提示时报错的问题 (GH-302)。

  • 修复数组原地操作 (+=, -=) 伴随矩阵在反向传播中正确计算梯度的问题

  • 修复向量、矩阵原地赋值伴随矩阵在反向传播中正确计算梯度的问题,例如:v[1] = x

  • 修复 Python 文档字符串在生成的代码中被创建为局部函数变量的错误。

  • 修复不同模块函数中 autograd 数组访问验证的错误。

  • 修复在某些系统上由于 glibc 不匹配导致的错误报告时的罕见崩溃问题。

  • 处理 --num_tiles 1example_render_opengl.py 中 (GH-306)。

  • 修复 FeatherstoneIntegrator 中刚体与粒子碰撞时刚体接触力计算的问题。

  • 修复 FeatherstoneIntegrator 中的错误,该错误会导致当刚体和关节索引顺序不同时,eval_rigid_jacobian 可能给出不正确的结果或陷入无限循环。添加了 Model.joint_ancestor 以修复关节到其父关节在关节结构中的索引问题。

  • 修复从 ModelBuilder.add_cloth_mesh() 调用 add_edges() 时传递了错误的顶点索引的问题 (GH-319)。

  • 在使用 wp.Mesh 时,在 compute-sanitizer 初始化检查工具中添加了未初始化内存读取警告的临时解决方案。

  • 修复当 Warp 函数和结构体多次从 Python 函数返回时出现的名称冲突问题。

  • 修复在不同模块中定义的 Warp 函数和结构体之间的名称冲突问题。

  • 修复在 Python 函数中重载泛型内核时出现的代码生成错误问题。

  • 修复不相关的函数被视为重载(例如,闭包)的问题。

  • 修复 array.__dlpack__()stream 参数的处理问题。

  • 修复与重新加载 CPU 模块相关的错误。

  • 修复在 CPU 模块中找不到内核函数时发生的崩溃问题。

  • 修复 while 语句中条件未按预期评估的问题。

  • 修复打印布尔值和 8 位整数值的问题。

  • 修复用于布尔值和 8 位整数值的数组接口类型字符串问题。

  • 修复设置结构体成员时出现的初始化错误问题。

  • 修复进入 wp.Tape 上下文时 Warp 未初始化的问题。

  • 对于布尔值的 DLPack 互操作,使用 kDLBool 而不是 kDLUInt

1.3.3 - 2024-09-04#

  • Bug 修复

    • 修复 Warp 1.3.0 中引入的从 NumPy 进行零拷贝数组初始化时出现的别名问题。

    • 修复当 bg_value 是值序列时 wp.Volume.load_from_numpy() 的行为问题 (GH-312)。

1.3.2 - 2024-08-30#

  • Bug 修复

    • 修复使用 fp64 数字时 3x3 SVD wp.svd3 的精度问题 (GH-281)。

    • 修复当内核参数包含结构体数组时模块哈希的问题 (GH-287)。

    • 修复 wp.bvh_query_ray() 中的一个 bug,该 bug 会使用方向而不是倒数方向 (GH-288)。

    • 修复模块重新加载后启动 CUDA 图时出现的错误。在图捕获期间使用的模块在图释放之前将不再卸载。

    • 修复 wp.sim.collide.triangle_closest_point_barycentric() 中的一个 bug,该 bug 会导致当最近点位于边缘时,返回的重心坐标可能不正确。

    • 修复使用 np.int32 指定数组形状时出现的 32 位溢出问题。

    • 修复 autograd.jacobianautograd.jacobian_fdinput_output_mask 参数中整数索引的处理问题 (GH-289)。

    • 修复 ModelBuilder.collapse_fixed_joints() 无法正确更新刚体质心和 ModelBuilder.articulation_start 数组的问题。

    • 修复闭包常量优先于全局常量的问题。

    • 修复 wp.fem.ExplicitQuadrature 中的求积点索引问题(1.3.0 中的回归)。

  • 文档改进

    • 为内置函数添加缺失的返回类型。

    • 澄清原子操作也返回之前的值。

    • 澄清 wp.bvh_query_aabb() 返回与边界体积重叠的部分。

1.3.1 - 2024-07-27#

  • 从 PyTorch autograd 函数示例中移除 wp.synchronize()

  • Tape.check_kernel_array_access()Tape.reset_array_read_flags() 现在是私有方法。

  • 修复报告不匹配参数类型的问题

1.3.0 - 2024-07-25#

  • Warp Core 改进

    • 默认更新到 CUDA 12.x(需要 NVIDIA 驱动程序 525 或更高版本),请参见 README.md 获取适用于旧驱动程序的 CUDA 11.x 二进制文件安装命令

    • 在模块加载的打印输出中添加信息,指示模块是已编译 (compiled)、从缓存加载 (cached),还是无法加载 (error)。

    • wp.config.verbose = True 现在在进入 wp.ScopedTimer 时也会打印一条消息。

    • wp.clear_kernel_cache() 添加到公共 API。这等同于 wp.build.clear_kernel_cache()

    • wp.config 变量添加代码补全支持。

    • 移除 CPU 内核使用静态任务(线程)索引来解决多线程问题的方式 (GH-224)

    • 改进内核中对不受支持的 Python 操作(如序列构造)的错误消息

    • 更新 wp.matmul() CPU 回退,在 np.matmul() 调用中显式使用 dtype

    • 添加对 PEP 563 的 from __future__ import annotations 的支持 (GH-256)。

    • 允许通过 __cuda_array_interface____array_interface__ 直接将外部数组/张量传递给 wp.launch(),从 PyTorch 转换速度提高达 2.5 倍

    • 使用 return_ctype 参数向 wp.from_torch() 添加更快的 Torch 互操作路径

    • 优雅地处理不兼容的 CUDA 驱动程序版本

    • 为向量类型添加 wp.abs()wp.sign()

    • 将标量算术运算符公开给 Python 运行时(例如:wp.float16(1.23) * wp.float16(2.34)

    • 添加支持创建具有各向异性变换的 Volume

    • 允许用户在内核中使用标准的 Python 调用语义,通过关键字传递函数参数

    • 添加额外文档和示例,演示 wp.copy(), wp.clone(), 和 array.assign() 的可微性

    • 为所有类的 __del__() 方法添加 __new__() 方法,以处理在垃圾回收之前创建但未实例化类实例的情况

    • wp.quat 实现赋值运算符

    • 使几何相关的内置函数仅在内核内部可用

    • 重命名面向 API 的查询类型以移除其 _t 后缀:wp.BVHQuery, wp.HashGridQuery, wp.MeshQueryAABB, wp.MeshQueryPoint, 和 wp.MeshQueryRay

    • 添加 wp.array(ptr=...) 允许在内核内部从指针地址初始化数组 (GH-206)

  • warp.autograd 改进

    • 新的 warp.autograd 模块,包含实用函数 gradcheck(), jacobian(), 和 jacobian_fd(),用于调试内核雅可比矩阵 (文档)

    • 添加数组覆盖检测,如果 wp.config.verify_autograd_array_access 为 True,则会检测到 Tape 上可能破坏梯度计算的数组原地操作 (文档)

    • 修复修改 @wp.func_replay 函数和原生代码片段不会触发模块重新编译的 bug

    • 添加动态循环 autograd 限制的文档

  • warp.sim 改进

    • 改进当 self.rigid_mesh_contact_max 为零(默认行为)时刚体接触处理的内存使用和性能。

    • wp.sim.eval_fk()mask 参数现在接受整数和布尔数组来掩盖关节。

    • 修复 ModelBuilder.collapse_fixed_joints() 中对 ModelBuilder.joint_act 的处理问题(影响浮动基系统)

    • 修复并改进 ModelBuilder.plot_articulation() 的实现,以可视化刚体机构的关节树

    • 修复 ShapeInstancer 的 __new__() 方法(缺少实例返回和 *args 参数)

    • 修复 ModelBuilder 中对 upaxis 变量的处理以及在 OpenGLRenderer 中的渲染问题

  • warp.sparse 改进

    • 稀疏矩阵分配(来自 bsr_from_triplets(), bsr_axpy() 等)现在可以在 CUDA 图中捕获;可以异步选择性地请求非零元素的精确数量。

    • bsr_assign() 现在支持更改块形状(包括 CSR/BSR 转换)

    • 为常见的稀疏矩阵操作添加 Python 运算符重载,例如 A += 0.5 * B, y = x @ C

  • warp.fem 新功能和修复

    • 支持每个元素的可变节点数

    • 全局 wp.fem.lookup() 运算符现在支持 wp.fem.Tetmeshwp.fem.Trimesh2D 几何体

    • 简化了自定义子域 (wp.fem.Subdomain) 的定义,自由滑移边界条件

    • 新增字段类型:wp.fem.UniformField, wp.fem.ImplicitFieldwp.fem.NonconformingField

    • 新增 streamlines, magnetostaticsnonconforming_contact 示例,更新了 mixed_elasticity 以使用非线性模型

    • 函数空间现在可以导出与 VTK 兼容的单元格用于可视化

    • 修复 NanoVDB 函数空间的边缘情况问题。

    • 修复 wp.fem.PicQuadrature 相对于位置和度量的可微性问题。

1.2.2 - 2024-07-04#

  • 修复 replay 函数和代码片段的哈希问题。

  • 添加额外文档和示例,演示 wp.copy(), wp.clone(), 和 array.assign() 的可微性

  • 为所有类的 __del__() 方法添加 __new__() 方法,以处理在垃圾回收之前创建但未实例化类实例的情况。

  • 添加动态循环 autograd 限制的文档

  • 允许用户在内核中使用标准的 Python 调用语义,通过关键字传递函数参数

  • wp.quat 实现赋值运算符

1.2.2 - 2024-07-04#

  • 支持 NumPy >= 2.0

1.2.1 - 2024-06-14#

  • 修复泛型函数缓存问题。

  • 修复使用 wp.array() 构造数组时 Warp 未初始化的问题。

  • 修复 wp.is_mempool_access_supported() 未将提供的设备参数解析为 wp.context.Device 的问题。

1.2.0 - 2024-06-06#

  • 添加一个非数字浮点常量,可用作 wp.NANwp.nan

  • 为标量、向量、矩阵等添加 wp.isnan(), wp.isinf(), 和 wp.isfinite()

  • 通过仅哈希本地模块常量来提高内核缓存的复用。之前,模块的哈希值受 Warp 程序中声明的所有 wp.constant() 变量影响。

  • 修改了模块编译过程,允许多个进程使用同一个内核缓存目录。缓存的内核现在将存储在特定哈希的子目录中。

  • wp.MarchingCubes 添加字段维度和大小的运行时检查。

  • 修复 wp.Mesh BVH 中的内存泄漏问题 (GH-225)。

  • 构建 Warp 库和用户内核时使用 C++17。

  • 将 PTX 目标架构提高到 sm_75(从 sm_70),启用 Turing ISA 特性。

  • 扩展了 NanoVDB 支持(参见 warp.Volume)。

    • 添加对数据无关索引网格的支持,按体素粒度进行分配。

    • 新增 wp.volume_lookup_index()wp.volume_sample_index() 以及通用的 wp.volume_sample()/wp.volume_lookup()/wp.volume_store() 内核级函数

    • 内存中网格的零拷贝别名,支持多网格缓冲区

    • 网格内省和盲数据访问功能

    • warp.fem 现在可以使用 warp.fem.Nanogrid 直接在 NanoVDB 网格上工作

    • 修复了 wp.volume_sample_v()wp.volume_store_*() 的伴随

    • 阻止 wp.volume_store() 覆盖网格背景值

  • 改进 warp.fem 中用户提供的字段和值的验证

  • 通过设置 pyglet.options["headless"] = True 支持 wp.render.OpenGLRenderer 的无头渲染

  • 如果 CUDA/OpenGL 互操作不可用,wp.render.RegisteredGLBuffer 可以回退到 CPU 绑定复制

  • 澄清外部贡献条款,详情请参阅 CONTRIBUTING.md

  • 在基准测试问题上将 wp.sparse.bsr_mm() 的性能提高了约 5 倍

  • 修复了 XPBD 错误索引关节致动 joint_act 数组的问题

  • 修复了 wp.sim.FeatherstoneIntegrator() 中质量矩阵梯度计算的问题

  • 修复了构建脚本中 --msvc_path 的处理问题

  • 修复了 wp.copy() 参数在 wp.Tape() 上记录目标和源偏移参数的问题

  • 修复了 wp.randn() 以确保返回值是有限的

  • 修复了内核中带有梯度的数组切片问题

  • 修复了函数重载缓存问题,确保如果任何函数重载被修改,模块将重新构建

  • 修复了通用内核中 bool 类型的处理问题

  • 发布支持 Hopper 的 CUDA 12.5 二进制文件,详情请参阅 https://github.com/nvidia/warp?tab=readme-ov-file#installing

1.1.1 - 2024-05-24#

  • wp.init() 不再需要显式调用,将在首次调用 API 时执行

  • 加快 omni.warp.core 的启动时间

1.1.0 - 2024-05-09#

  • 支持使用类型提示从 @wp.func_native CUDA 函数返回值

  • 改进了 wp.sim.FeatherstoneIntegrator 的可微分性

  • 修复了 wp.sim.collide() 中刚体接触的梯度传播问题

  • 增加了基于事件的计时支持,请参阅 wp.ScopedTimer()

  • 增加了 Tape 可视化和调试函数,请参阅 wp.Tape.visualize()

  • 支持从定义了 __cuda_array_interface__ 属性的对象构建 Warp 数组

  • 支持将结构体复制到另一个设备,使用 struct.to(device) 迁移结构体数组

  • 允许刚体形状在 wp.sim.Model 中不与任何其他形状发生碰撞

  • 更改默认测试行为,以测试冗余 GPU(最多 2 个)

  • 在单独的子进程中测试每个示例

  • 润色和优化各种示例和测试

  • 允许将非连续点数组传递给 wp.HashGrid.build()

  • 从源代码构建和 Linux x86-64 构建时,将 LLVM 升级到 18.1.3

  • 将 DLL 源代码构建为 C++17 并要求最低版本为 GCC 9.4

  • 数组克隆、赋值和复制现在是可微分的

  • 使用 Ruff 进行格式化和 linting

  • 各种文档改进(无穷大、数学常数等)

  • 改进 URDF 导入器,处理关节电枢

  • 允许在 Warp 数据结构中使用 builtins.bool

  • 在向 wp.launch() 传递时,在反向传播中使用外部梯度数组

  • 添加 Conjugate Residual 线性求解器,请参阅 wp.optim.linear.cr()

  • 修复了内核中变量别名副本的梯度传播问题

  • 通过消除引发任何异常,方便调试并加速 import warp

  • 改进对结构体中嵌套向量/矩阵赋值的支持

  • 推荐使用 Python 3.9 或更高版本,JAX 和即将发布的 PyTorch 需要此版本。

  • 支持索引切片多维数组的梯度传播,即 a[i][j] 对比 a[i, j]

  • 如果设置 DLL C 类型失败,提供一条信息丰富的消息,指导用户尝试重新构建库

1.0.3 - 2024-04-17#

  • 在扩展的配置文件中添加 support_level 条目

1.0.2 - 2024-03-22#

  • 使示例可以在任何位置运行

  • 修复示例无法直接从其 Python 文件运行的问题

  • 将示例图库添加到文档中

  • 更新 README.md 示例 USD 位置

  • 更新 example_graph_capture.py 描述

1.0.1 - 2024-03-15#

  • 文档说明 Device 的 total_memoryfree_memory

  • 关于分配器、流、对等访问和泛型的文档

  • 将示例输出目录更改为当前工作目录

  • 添加了 python -m warp.examples.browse 用于浏览示例文件夹

  • 打印 USD 场景文件保存的位置

  • 添加了 examples/optim/example_walker.py 示例

  • 使无人机示例不特定于 USD

  • 减少运行某些示例所需的时间

  • 优化使用单色渲染点

  • 澄清需要 USD 的错误消息

  • 在图捕捉期间模块卸载时引发异常

  • 添加了 wp.synchronize_event() 用于阻塞主机线程直到记录的事件完成

  • 结束 stdout 捕捉时刷新 C 打印缓冲区

  • 移除更多不必要的 CUTLASS 文件

  • 允许将内存池释放阈值设置为分数

1.0.0 - 2024-03-07#

  • 添加 FeatherstoneIntegrator,它在广义坐标中提供了更稳定的关节刚体动力学仿真(State.joint_qState.joint_qd

  • 引入 warp.sim.Control 结构体来存储仿真的控制输入(可选,默认情况下使用之前的 Model 控制输入);积分器现在具有不同的仿真签名:integrator.simulate(model: Model, state_in: State, state_out: State, dt: float, control: Control)

  • joint_act 现在可以以 3 种模式运行:将 joint_axis_mode 设置为 JOINT_MODE_FORCE 时,它表现为力/扭矩;设置为 JOINT_MODE_VELOCITY 时,它表现为速度目标;设置为 JOINT_MODE_POSITION 时,它表现为位置目标;joint_target 已移除

  • 通过 Model.shape_materials.ka 向欧拉积分器添加粘性接触,该参数控制应用粘性力时的接触距离

  • 改进 URDF 导入器中对视觉/碰撞形状的处理,以便视觉形状不参与接触动力学

  • 实验性 JAX 内核回调支持

  • 改进模块加载异常消息

  • 添加 wp.ScopedCapture

  • 移除对可调用对象的 enable_backward 警告

  • 从包装的内核、函数、结构体复制 docstring 和注释

0.15.1 - 2024-03-05#

  • 将示例资产添加到 wheel 包中

  • 修复文档中损坏的图片链接

  • 修复调用其相应前向函数的自定义梯度函数的代码生成问题

  • 修复没有输出的自定义梯度函数处理问题

  • 修复设置 wp.config.quiet = True 时的问题

0.15.0 - 2024-03-04#

  • 为示例图库添加缩略图

  • 对示例应用彩色照明

  • examples 目录移动到 warp/

  • python -m warp.tests --help 中添加示例用法

  • 添加 torch.autograd.function 示例 + 文档

  • 在创建数组时添加错误检查

  • 添加 example_graph_capture

  • 添加一个无人机微分仿真示例

  • 修复 verify_fp 导致编译器错误的问题,并支持 CPU 内核

  • 修复以使 matmul 可以在 CUDA 图捕捉中调用

  • 默认启用内存池

  • 更新 wp.launch 以支持元组参数

  • 修复 BiCGSTAB 和 GMRES 在提前收敛时产生 NaNs 的问题

  • 修复 test_fem 中关于禁用反向代码生成的警告

  • 修复涉及 NaN 和容差时 assert_np_equal 的问题

  • 改进错误消息以区分 CUDA 被禁用或不支持的情况

  • 支持带有用户定义梯度的跨模块函数

  • 在错误后结束捕捉时抑制多余的 CUDA 错误

  • 使初始化期间的输出原子化

  • 添加 warp.config.max_unroll,修复自定义梯度展开

  • 使用 @wp.func_native(snippet, replay_snippet=replay_snippet) 支持原生重放片段

  • 如果未使用 CUDA_PATH 环境变量或 --cuda_path 构建选项,则在默认位置查找 CUDA Toolkit

  • 添加了 wp.ones() 以高效创建初始化为 1 的数组

  • wp.config.graph_capture_module_load_default 重命名为 wp.config.enable_graph_capture_module_load_by_default

0.14.0 - 2024-02-19#

  • 添加了对 CUDA 池化(流有序)分配器的支持

    • 支持图捕捉期间的内存分配

    • 支持图捕捉期间复制非连续 CUDA 数组

    • 改进了使用池化分配器时的内存分配/释放性能

    • 使用 wp.config.enable_mempools_at_init 在 Warp 初始化期间启用池化分配器(如果支持)

    • wp.is_mempool_supported() - 检查设备是否支持池化分配器

    • wp.is_mempool_enabled()wp.set_mempool_enabled() - 按设备启用或禁用池化分配器

    • wp.set_mempool_release_threshold()wp.get_mempool_release_threshold() - 配置内存池释放阈值

  • 添加了对设备之间直接内存访问的支持

    • 如果启用了对等访问,则改进了对等内存传输性能

    • 注意:启用对等访问可能会影响内存分配/释放性能并增加内存消耗

    • wp.is_peer_access_supported() - 检查对等设备是否可以访问设备的内存

    • wp.is_peer_access_enabled()wp.set_peer_access_enabled() - 管理使用默认 CUDA 分配器分配的内存的对等访问

    • wp.is_mempool_access_supported() - 检查对等设备是否可以访问设备的内存池

    • wp.is_mempool_access_enabled()wp.set_mempool_access_enabled() - 管理使用池化 CUDA 分配器分配的内存的访问

  • 改进了流同步语义

    • wp.ScopedStream 可以在进入和/或退出时与上一个流同步(默认只在进入时同步)

    • 接受可选流参数的函数不会进行隐式同步以实现最大性能(例如,wp.copy()wp.launch()wp.capture_launch()

  • 支持在构建数组时传递自定义 deleter 参数

    • 弃用 owner 参数 - 使用 deleter 转移所有权

  • 优化各种核心 API 函数(例如,wp.zeros()wp.full() 等)

  • 修复 wp.matmul() 以始终使用正确的 CUDA 上下文

  • 修复 BSR 转置中的内存泄漏

  • 修复复制非连续数组时的流同步问题

  • API 更改:wp.matmul() 不再接受设备作为参数;而是从要相乘的数组推断出正确的设备

  • DLPack 工具已更新到最新发布的标准

    • 外部数组可以直接导入到 Warp 中,例如:wp.from_dlpack(external_array)

    • Warp 数组可以直接导出到消费框架中,例如:jax.dlpack.from_dlpack(warp_array)

    • 添加了 CUDA 数组的 CUDA 流同步

    • 当不需要流同步时,仍可使用原始 DLPack 协议以获得更好的性能,详情请参阅互操作性文档

    • 在常见情况下,warp.to_dlpack() 速度提高了约 3-4 倍

    • 使用 DLPack capsule 调用时,warp.from_dlpack() 速度提高了约 2 倍

    • 修复了与 DLPack 互操作相关的少量 CPU 内存泄漏

  • 提高了创建数组的性能

0.13.1 - 2024-02-22#

  • 确保 Noise Deform 的结果在不同的 Kit session 中是确定性的

0.13.0 - 2024-02-16#

  • 将许可证更新为 NVIDIA Software License,允许商业使用(请参阅 LICENSE.md

  • 添加 CONTRIBUTING.md 指南(针对 NVIDIA 员工)

  • 对 CUDA snippetadj_snippet 字符串进行哈希以修复缓存问题

  • 修复 Windows 上 build_docs.py 的问题

  • warp/tests/walkthrough_debug 添加缺失的 .py 扩展名

  • 允许在向量和矩阵类型中使用 wp.bool

0.12.0 - 2024-02-05#

  • 在调用 wp.Tape.backward() 时,如果 enable_backward 设置为 False,则添加警告

  • 修复了使用闭包定义的内核未按预期重新编译的问题

  • 将内核缓存 appauthor 子目录更改为仅“NVIDIA”

  • 确保附加到 PyTorch 张量的梯度在调用 wp.from_torch() 时具有兼容的步长

  • 为 OmniGraph 添加一个 Noise Deform 节点,该节点使用 Perlin/Curl 噪声变形点

0.11.0 - 2024-01-23#

  • 将 1.0.0-beta.7 重新发布为非预发布的 0.11.0 版本,以便 pip install warp-lang 可以选中它。

  • 引入新的版本控制和发布流程,详情请参阅 PACKAGING.md,该流程类似于 Python 本身的版本控制

    • 0.11 版本(如果发布)可在 release-0.11 分支上找到。

    • 点发布(如果发布)将在同一子版本分支上进行,并且仅包含错误修复,不包含新功能。

    • 之前用于合并发布的 public 分支,与 GitHub main 分支相对应,现已停用。

1.0.0-beta.7 - 2024-01-23#

  • 确保捕捉始终包含在 try/finally

  • 仅将 warp 子目录中的 .py 文件包含到 wheel 包中

  • 修复扩展的示例节点在解析某些版本号时失败的问题

  • 允许示例在可能的情况下无需 USD 即可运行

  • 添加一个设置以禁用 Kit 中的主 Warp 菜单

  • 添加迭代线性求解器,请参阅 wp.optim.linear.cgwp.optim.linear.bicgstabwp.optim.linear.gmreswp.optim.linear.LinearOperator

  • 改进关于全局变量的错误消息

  • 改进关于矩阵/向量赋值的错误消息

  • 支持将标量转换为原生/ctypes,例如:float(wp.float32(1.23))ctypes.c_float(wp.float32(1.23))

  • 添加无穷大常数,请参阅 wp.inf

  • 添加关于数组赋值的常见问题解答条目

  • 添加质量弹簧笼微分仿真示例,请参阅 examples/example_diffsim_mass_spring_cage.py

  • 添加 -s--suite 选项,仅运行属于给定套件的测试

  • 修复常见拼写错误

  • 修复生成代码的缩进问题

  • 仅显示一次弃用警告

  • 改进 wp.render.OpenGLRenderer

  • 在运行时创建扩展到核心库的符号链接

  • 修复一些内置函数在嵌套在 if/else 块中时无法编译反向传播的问题

  • 更新示例以使用 mesh query 内置函数的新变体

  • 修复未归零初始化的类型成员

  • 修复 wp.mesh_query_ray() 缺失的伴随函数

1.0.0-beta.6 - 2024-01-10#

  • 调用 array.numpy() 时不创建 grad 数组的 CPU 副本

  • 修复 assert_np_equal() 错误

  • 支持 Linux AArch64 平台,包括 Jetson/Tegra 设备

  • 添加并行测试运行器(使用 python -m warp.tests 调用,使用 warp/tests/unittest_serial.py 进行串行测试)

  • 修复对 range() 中函数调用的支持

  • wp.matmul() 伴随现在会累积

  • 扩展可用运算符(例如向量 @ 矩阵,标量作为被除数)并改进对调用原生内置函数的支持

  • 修复 sparse.py 中的多 GPU 同步问题

  • wp.render.OpenGLRenderer 添加深度渲染,并文档说明 wp.render

  • 使 wp.atomic_min()wp.atomic_max() 可微分

  • 使用精确的源代码段修复错误报告

  • 添加用户友好的 mesh query 重载,返回结构体而不是覆盖参数

  • 解决了多个可微分性问题

  • 修复返回数组元素引用的反向传播问题

  • 支持将返回值传递给伴随

  • wp.fem 添加点基空间和显式基于点的积分

  • 支持使用 build_lib.py --build_llvm --llvm_source_path= 覆盖 LLVM 项目源代码目录路径

  • 修复访问不存在属性的错误消息

  • 在 URDF 解析器中为 Mesh 构造函数平坦化面数组

1.0.0-beta.5 - 2023-11-22#

  • 修复函数参数类型更改时的内核缓存问题

  • 修复依赖结构体的代码生成顺序

  • 修复 MGPU 系统上 wp.Mesh 的构建问题

  • 修复与伴随代码的名称冲突错误:https://github.com/NVIDIA/warp/issues/154

  • 添加 wp.frac() 以返回浮点值的小数部分

  • 添加使用 @wp.func_native 装饰器支持自定义原生 CUDA 片段

  • 添加支持批大小 > 2^16-1 的批量矩阵乘法

  • 添加支持转置 CUTLASS wp.matmul() 和额外的错误检查

  • 添加支持 wp.fem 中的四边形和六面体网格

  • 检测并警告构建时 C++ 运行时与编译器不匹配,例如:libstdc++.so.6: version `GLIBCXX_3.4.30' not found

  • 更新 wp.BVH 的文档

  • 关于运行时内核特化 wp.Kernel 的文档和简化 API

1.0.0-beta.4 - 2023-11-01#

  • 添加 wp.cbrt() 用于计算立方根

  • 添加 wp.mesh_furthest_point_no_sign() 以计算曲面上离查询点最远的点

  • 添加对 GPU BVH 构建的支持,大型网格比 CPU 构建快 10-100 倍

  • 添加对链式比较的支持,即:0 < x < 2

  • 添加支持无头运行 wp.fem 示例

  • 修复单元测试确定性问题

  • 修复图捕捉期间可能发生的数组 GC 回收问题

  • 修复 wp.utils.array_sum() 在与向量类型一起使用时的输出初始化问题

  • 覆盖率和文档更新

1.0.0-beta.3 - 2023-10-19#

  • 添加对代码覆盖率扫描的支持 (test_coverage.py),omni.warp.core 的覆盖率达到 85%

  • 添加对向量类型的命名组件访问支持,例如:a = v.x

  • 添加对左值表达式的支持,例如:array[i] += b

  • 添加矩阵和向量类型的强制类型转换构造函数

  • 添加对 type() 运算符的支持,该运算符可用于在内核内部返回类型

  • 添加对网格跨步内核的支持,以支持具有 > 2^31-1 个线程块的内核

  • 修复多进程初始化警告

  • 修复空 wp.struct 的对齐问题

  • 修复带有返回元组的函数的 return 语句警告

  • 修复 wp.batched_matmul() 在 Tape 中注册错误函数的问题

  • 修复和文档说明 wp.sim 前向 + 逆运动学

  • 修复 wp.func 在函数并非所有控制路径都返回值时返回默认值的问题

  • 重构 wp.fem 支持新的基函数和解耦的函数空间

  • 优化 wp.noise 函数,在大多数情况下速度提高达 10 倍

  • 优化数组构造中使用的 type_size_in_bytes()

重大变更#

  • 为了支持网格跨步内核,wp.tid() 不再可以在 wp.func 函数内部调用。

1.0.0-beta.2 - 2023-09-01#

  • 修复将 bool 传递给 wp.func 函数的问题

  • 修复弃用警告显示在 stderr 上,现已重定向到 stdout

  • 修复使用 for i in wp.hash_grid_query(..) 语法的问题

1.0.0-beta.1 - 2023-08-29#

  • 修复 wp.float16 作为内核参数传递的问题

  • 修复反向传播中使用结构体的内核编译错误

  • 修复 wp.Mesh.refit() 由于同步临时分配而无法进行 CUDA 图捕捉的问题

  • 通过重用 ui.DynamicImageProvider 实例,修复 Kit 中动态纹理示例闪烁/MGPU 演示崩溃的问题

  • 修复了禁用示例中捆绑包变更跟踪的回归问题

  • 修复 OgnClothSimulate 中网格变形时表面速度不正确的问题

  • 修复示例中设置 USD stage “up_axis” 时大小写不正确的问题

  • 修复将 PyTorch 张量包装为向量或矩阵类型时,梯度类型不兼容的问题

  • 修复在 wp.sim.ModelBuilder.add_cloth_mesh() 中从网格构建布料约束时添加开放边缘的问题

  • 添加对 wp.fabricarray 的支持,可以直接从 Warp 内核访问 Fabric 数据,示例请参阅 https://docs.omniverse.nvidia.com/kit/docs/usdrt/latest/docs/usdrt_prim_selection.html

  • 添加对用户定义梯度函数的支持,请参阅 @wp.func_replay@wp.func_grad 装饰器

  • 添加支持 omni.warp.from_omni_graph() 中的更多 OG 属性类型

  • 添加支持从密集 NumPy 数组创建 NanoVDB wp.Volume 对象

  • 添加对 wp.volume_sample_grad_f() 的支持,该函数可以高效地从 NVDB 体积返回值 + 梯度

  • 添加对 LLVM fp16 内在函数的支持,用于半精度算术

  • 添加随机梯度下降的实现,请参阅 wp.optim.SGD

  • 添加 wp.fem 框架,用于解决弱形式偏微分方程问题(参见 https://nvda.org.cn/warp/modules/fem.html)

  • 优化 omni.warp 扩展加载时间(冷启动从 2.2 秒缩短至 625 毫秒)

  • 使所有 omni.ui 依赖项成为可选,以便 Warp 单元测试可以在无头模式下运行

  • 弃用在内核函数外部使用 wp.tid() 的方式,用户应将 tid() 值显式传递给 wp.func 函数

  • 弃用 wp.sim.Model.flatten() 方法,该方法曾用于返回模型中包含的所有张量

  • wp.sim.Model.particle_max_velocity 中添加对限制粒子最大速度的支持

  • 移除对 urdfpy 包的依赖,改进 MJCF 解析器对默认值的处理

0.10.1 - 2023-07-25#

  • 修复大型多维内核启动(> 2^32 线程)的问题

  • 修复使用泛型时模块哈希计算的问题

  • 修复包含 break 或 continue 语句的循环展开问题(将跳过展开)

  • 修复向 build_lib.py 传递布尔参数的问题(之前会被忽略)

  • 修复 Linux 上的构建警告

  • 修复从 NumPy 结构化数组创建结构体数组的问题

  • 修复在 Kit 中使用 wp.sim 时内核加载时间退化的问题

  • 更新 wp.array.reshape() 以支持处理 -1 维度

  • 更新在使用 wp.sim.create_soft_body_contacts() 进行网格查询时使用的边距

  • 改进使用 wp.from_torch()wp.to_torch() 处理梯度,并更新文档

0.10.0 - 2023-07-05#

  • 添加对 macOS 通用二进制文件(x86 + aarch64)的支持,以支持 M1+ 芯片

  • 添加更多 SDF 生成方法,请参阅以下新方法

    • wp.mesh_query_point_nosign() - 不进行符号确定的最近点查询

    • wp.mesh_query_point_sign_normal() - 通过角度加权法线确定符号的最近点查询

    • wp.mesh_query_point_sign_winding_number() - 通过快速缠绕数确定符号的最近点查询

  • 添加 CSR/BSR 稀疏矩阵支持,详见 wp.sparse 模块

    • wp.sparse.BsrMatrix

    • 使用 wp.sparse.bsr_zeros()wp.sparse.bsr_set_from_triplets() 进行构建

    • 使用 wp.sparse.bsr_mm()wp.sparse_bsr_mv() 分别进行矩阵-矩阵和矩阵-向量乘积计算

  • 添加数组范围内的实用函数

    • wp.utils.array_scan() - 前缀和(包含或不包含)

    • wp.utils.array_sum() - 数组求和

    • wp.utils.radix_sort_pairs() - 对 (key,value) 对进行原地基数排序

  • 添加从 Python 中调用 @wp.func 函数的支持(在内核范围之外)

  • 添加对使用 wp.Launch 对象记录内核启动的支持,该对象可以以低开销重放;使用 wp.launch(..., record_cmd=True) 生成命令对象

  • 优化 wp.struct 内核参数,对于包含大型结构体或大量参数的内核,启动速度最高可提升 20 倍

  • 更新 USD 示例,使用基于 bundle 的工作流程 + 变更跟踪

  • 添加用于操作 OmniGraph 中网格和点 bundle 数据的 Python API,详见 omni.warp.nodes 模块,以及 omni.warp.nodes.mesh_create_bundle()omni.warp.nodes.mesh_get_points() 等函数

  • 改进 wp.array

    • 修复多个数组方法在处理空数组时行为异常的问题

    • 修复与梯度数组相关的多个 bug 和内存泄漏

    • 修复从可分页内存中的数据源创建固定内存数组时的数组构造问题

    • wp.empty() 不再清零内存,而是返回未初始化的数组,这是预期的行为

    • array.zero_()array.fill_() 支持非连续数组

    • 支持无需复制即可封装非连续的 NumPy 数组

    • 将 NumPy 数组封装为 Warp 的向量或矩阵类型数组时,支持保留外部维度

    • 改进 PyTorch 和 DLPack 与任意向量和矩阵的 Warp 数组的互操作性

    • array.fill_() 现在在填充向量或矩阵数组时可以接受列表或其他序列,例如 arr.fill_([[1, 2], [3, 4]])

    • array.fill_() 现在支持结构体数组(传递一个结构体实例)

    • wp.copy() 可以妥善处理不同设备上非连续数组之间的复制

    • 添加 wp.full()wp.full_like() 函数,例如 a = wp.full(shape, value)

    • wp.empty_like()wp.zeros_like(), wp.full_like()wp.clone() 添加可选的 device 参数

    • indexedarray 添加方法 .zero_().fill_().assign()

    • 修复 indexedarray.numpy().list() 方法

    • 修复 array.list() 以支持任何 Warp 数据类型的数组

    • 修复 array.list() 在处理 CUDA 数组时的同步问题

    • 对结构体数组调用 array.numpy() 将返回一个带有命名字段的结构化 NumPy 数组

    • 提高创建数组的性能

  • 修复在运行某些 Kit 配置(例如:stubgen)时出现 Error: No module named 'omni.warp.core' 的问题

  • 修复 wp.struct 实例地址被包含在模块内容哈希中的问题

  • 修复函数名被覆盖时的代码生成问题

  • 修复内核哈希计算问题,使其在代码生成后和加载前进行,以解决内核缓存过时的问题

  • 修复在 CPU 上执行 wp.BVH.refit() 的问题

  • 修复 wp.struct 构造函数的伴随矩阵计算

  • 修复 Python 中访问 wp.float16 向量和矩阵元素的问题

  • 修复结构体中的 wp.float16 成员问题

  • 移除已弃用的 wp.ScopedCudaGuard(),请改用 wp.ScopedDevice()

0.9.0 - 2023-06-01#

  • 添加在内核内部对向量、矩阵和结构体类型进行原地修改的支持(如果在反向传播中使用梯度,使用 wp.verbose 时将发出警告)

  • 添加使用独立 LLVM 编译器对内核代码进行 VSCode 步进调试的支持,详见 wp.breakpoint()walkthrough_debug.py

  • 添加对内置函数默认值的支持

  • 添加对多值 @wp.func 函数的支持

  • 添加对 passcontinuebreak 语句的支持

  • 添加 macOS 缺失的 __sincos_stret 符号

  • 添加通过 wp.Mesh.points 以及将数组传递给原生函数的其他情况进行梯度传播的支持

  • 添加对 Python @ 运算符的支持,作为 wp.matmul() 的别名

  • 为粒子-粒子碰撞添加 XPBD 支持

  • 添加对单独粒子半径的支持:ModelBuilder.add_particle 现在有一个新的 radius 参数,Model.particle_radius 现在是 Warp 数组

  • 添加作为 Model.particle_flags Warp 数组的每个粒子标志,引入 PARTICLE_FLAG_ACTIVE 用于定义粒子是否正在模拟并参与接触动力学

  • 添加对 Python 按位运算符 &|~<<>> 的支持

  • 对于 cpu 设备,默认切换到使用独立 LLVM 编译器

  • omni.warp 拆分为 omni.warp.core,供希望使用 Warp Python 模块且只需要最少额外依赖项的 Omniverse 应用程序使用

  • 在 Omniverse 内部默认禁用内核梯度生成,以提高编译速度

  • 修复访问向量/矩阵类型元素时的边界检查问题

  • 修复当在调用线程上设置了自定义(非主要)外部 CUDA 上下文时流初始化的问题

  • 修复热重载期间 @wp.struct 重复注册的问题

  • 修复数组 unot() 运算符,以便内核编写者可以使用 if not array: 语法

  • 修复动态循环嵌套在展开循环中的情况

  • 更改 wp.hash_grid_point_id(),如果 wp.HashGrid 之前未保留,则现在返回 -1

  • 弃用 wp.Model.soft_contact_distance,现已被 wp.Model.particle_radius 替代

  • 弃用单个标量粒子半径(应改为每个粒子的数组)

0.8.2 - 2023-04-21#

  • 添加 ModelBuilder.soft_contact_max 以控制可以注册的最大软接触数。使用 Model.allocate_soft_contacts(new_count) 更改现有 Model 对象的计数。

  • 添加对 bool 参数的支持

  • 添加对 int 类型的逻辑布尔运算符的支持

  • 修复 wp.quat() 默认构造函数的问题

  • 修复条件重赋值问题

  • 添加使用角度加权法线确定符号的 wp.mesh_query_point() 版本,即 wp.mesh_query_sign_normal()

  • 添加使用缠绕数确定符号的 wp.mesh_query_point() 版本,即 wp.mesh_query_sign_winding_number()

  • 添加不进行符号确定的查询点函数 wp.mesh_query_no_sign()

0.8.1 - 2023-04-13#

  • 修复将展平的数字列表作为矩阵参数传递给内核时出现的回归问题

  • 修复在传递包含未初始化(None)成员属性的 wp.struct 类型时出现的回归问题

0.8.0 - 2023-04-05#

  • 添加 Texture Write 节点,用于从 Warp 内核/节点更新动态 RTX 纹理

  • 为 Warp Kernel Node 添加多维内核支持

  • 添加 wp.load_module() 以预加载特定模块(传递 recursive=True 进行递归加载)

  • 添加 wp.poisson() 用于采样泊松分布

  • 添加对 UsdPhysics schema 的支持,详见 wp.sim.parse_usd()

  • 添加 XPBD 刚体实现以及微分模拟示例

  • 添加支持使用 LLVM 后端进行独立 CPU 编译(无需主机编译器),通过 --standalone 构建选项启用

  • wp.ScopedTimer() 中添加支持按计时器设置颜色

  • 添加支持在内核外部进行基于行的矩阵类型构造

  • 添加对 Python 矩阵设置和获取行向量的支持,详见 matrix.get_row()matrix.set_row()

  • 添加支持在内核中实例化 wp.struct 类型

  • 添加对索引数组的支持,slice = array[indices] 现在将生成数组数据的稀疏切片

  • 添加对泛型内核参数的支持,使用 def compute(param: Any):

  • 添加支持 with wp.ScopedDevice("cuda") as device: 语法(wp.ScopedStream()wp.Tape() 也相同)

  • 添加支持在内核中创建自定义长度的向量/矩阵,详见 wp.vector()wp.matrix()

  • 添加支持在内核中创建单位矩阵,例如:I = wp.identity(n=3, dtype=float)

  • 添加对一元加号运算符 (wp.pos()) 的支持

  • 添加支持在 Python 中直接使用 wp.constant 变量,而无需使用 .val 成员

  • 添加对嵌套 wp.struct 类型的支持

  • 添加支持从函数返回 wp.struct 类型

  • 添加 --quick 构建选项,用于加快本地开发迭代(使用减少的 SASS 架构集)

  • wp.from_torch() 添加可选的 requires_grad 参数,以覆盖梯度分配

  • 在 Python stub 文件中添加泛型向量/矩阵类型的类型提示

  • 添加支持在 wp.Tape() 中记录自定义用户函数

  • 添加支持将 CUTLASS wp.matmul() 注册到 Tape 的反向传播中

  • 添加支持线程数 > 2^31 的网格(每个维度长度可达 INT_MAX)

  • wp.matmul() 添加 CPU 回退支持

  • 优化 wp.launch(),在常见情况下启动速度最高可提升 3 倍

  • 修复 wp.randf() 转换为浮点数时减少均匀采样偏差的问题

  • 修复从 Python 闭包内部捕获 wp.funcwp.constant 类型的问题

  • 修复 WSL 上的 CUDA 问题

  • 修复结构体中的矩阵问题

  • 修复某些非方阵的转置索引问题

  • 默认启用 Python faulthandler

  • 更新至 VS2019

不兼容变更#

  • wp.constant 变量现在可以被视为其真实类型,不再支持通过 constant.val 访问底层值

  • wp.sim.model.ground_plane 现在是一个 wp.array 以支持梯度,用户应调用 builder.set_ground_plane() 来创建地面

  • wp.sim 的胶囊体、圆锥体和圆柱体现在与默认的 USD 上轴对齐

0.7.2 - 2023-02-15#

  • 缩短 vec/math 类型的测试时间

  • 清理禁用 CUDA 的构建管道

  • 移除 extension.gen.toml,使 Kit 包不受 Python 版本限制

  • 处理 Python 中数组索引的额外情况

0.7.1 - 2023-02-14#

  • 为 Kit 禁用一些耗时测试

  • 默认使单元测试仅在第一个 GPU 上运行

0.7.0 - 2023-02-13#

  • 添加对任意长度/类型的向量和矩阵的支持,例如:wp.vec(length=7, dtype=wp.float16),详见 wp.vec()wp.mat()

  • 添加支持具有 NumPy 语义的 array.flatten()array.reshape()array.view()

  • 添加对 Python 中 wp.array 类型切片的支持

  • 添加 wp.from_ptr() 助手函数,用于从现有分配构造数组

  • 添加支持在 ranged-for 和 while 循环中使用 break 语句(反向传播支持目前未实现)

  • 添加内置数学常量,详见 wp.piwp.ewp.log2e

  • 添加内置的度与弧度之间的转换函数,详见 wp.degrees()wp.radians()

  • 为 Kernel Node 添加安全弹出窗口

  • 改进内核返回值的错误处理

0.6.3 - 2023-01-31#

  • 添加 DLPack 实用函数,详见 wp.from_dlpack()wp.to_dlpack()

  • 添加 Jax 实用函数,详见 wp.from_jax()wp.to_jax()wp.device_from_jax()wp.device_to_jax()

  • 修复 Linux Kit 扩展 OM-80132、OM-80133 的问题

0.6.2 - 2023-01-19#

  • 更新 wp.from_torch() 以支持更多数据类型

  • 更新 wp.from_torch(),如果未指定目标 Warp 数据类型,则自动确定

  • 更新 wp.from_torch() 以支持具有任意步长的非连续张量

  • 添加 CUTLASS 集成以支持密集 GEMM,详见 wp.matmul()wp.matmul_batched()

  • mat33 类型添加 QR 分解和特征分解,详见 wp.qr3()wp.eig3()

  • 为矩阵类型添加默认(零)构造函数

  • 添加一个标志以抑制除错误和警告之外的所有输出(设置 wp.config.quiet = True

  • 编辑 Kernel Node 属性时跳过重新编译

  • 允许 Kernel Node 使用可选属性

  • 允许按内核禁用反向传播代码生成,使用 @wp.kernel(enable_backward=False)

  • 将 Python imp 包替换为 importlib

  • 修复四元数球面线性插值梯度(wp.quat_slerp())的问题

0.6.1 - 2022-12-05#

  • 修复非 CUDA 构建的问题

  • 修复 array_t 构造函数中的步长计算问题,解决了通过 mesh.indices[] 访问网格索引时的 bug

  • 禁用 Kernel Node 的反向传播代码生成(编译速度提高 4-6 倍)

  • 对于通用 Linux 二进制文件,切换到 linbuild(仅影响 TeamCity 构建)

0.6.0 - 2022-11-28#

  • 添加对 CUDA 流的支持,详见 wp.Streamwp.get_stream()wp.set_stream()wp.synchronize_stream()wp.ScopedStream

  • 添加对 CUDA 事件的支持,详见 wp.Eventwp.record_event()wp.wait_event()wp.wait_stream()wp.Stream.record_event()wp.Stream.wait_event()wp.Stream.wait_stream()

  • 添加对 PyTorch 流互操作的支持,详见 wp.stream_from_torch()wp.stream_to_torch()

  • 添加支持在固定内存中分配主机数组以进行异步数据传输,使用 wp.array(..., pinned=True)(默认为非固定)

  • 添加对所有标量类型之间直接转换的支持,例如:x = wp.uint8(wp.float64(3.0))

  • 添加按模块启用快速数学运算的选项,使用 wp.set_module_options({"fast_math": True}),快速数学运算现在默认禁用

  • 在驱动程序较旧的系统上,添加支持生成 CUBIN 内核而不是 PTX

  • 添加 CUDA 内核输出的用户首选项选项(“ptx”或“cubin”,例如:wp.config.cuda_output = "ptx" 或按模块设置 wp.set_module_options({"cuda_output": "ptx"})

  • 为 OmniGraph 添加内核节点

  • 添加 wp.quat_slerp()wp.quat_to_axis_angle()wp.rotate_rodriquez() 以及所有剩余四元数操作的伴随计算

  • 添加支持当范围是 wp.constant 时展开 for 循环

  • 添加支持在 wp.kernel 之外对内置向量/矩阵类型使用算术运算符

  • wp.optim Adam 优化器中添加对多个解变量的支持

  • wp.struct 属性添加嵌套属性支持

  • 为空间数学类型添加缺失的伴随实现,并记录所有缺失伴随的函数

  • 添加支持检索 NanoVDB tiles 和体素大小,详见 wp.Volume.get_tiles()wp.Volume.get_voxel_size()

  • 添加支持对整数 NanoVDB 体积进行存储操作,详见 wp.volume_store_i()

  • 在内核中将 wp.Mesh 的点、索引公开为数组,详见 wp.mesh_get()

  • 优化 wp.array 构造,平均速度提升 2-3 倍

  • 优化 URDF 导入

  • 通过静态链接所有 CUDA 库修复各种部署问题

  • 将 warp.so/warp.dll 更新到 CUDA Toolkit 11.5

0.5.1 - 2022-11-01#

  • 修复 Kit 中的单元测试问题

0.5.0 - 2022-10-31#

  • 添加光滑粒子流体动力学(SPH)示例,详见 example_sph.py

  • 添加支持在内核中访问 array.shape,例如:width = arr.shape[0]

  • 添加依赖跟踪,如果依赖项被修改,则热重载模块

  • 添加 CUDA 内核上下文的延迟获取(在 MGPU 环境中节省约 300Mb 显存)

  • 添加 BVH 对象,详见 wp.Bvh 以及 bvh_query_ray()bvh_query_aabb() 函数

  • spatial_vectorspatial_matrix 类型添加分量索引操作

  • 添加 wp.lerp()wp.smoothstep() 内置函数

  • 添加 wp.optim 模块,实现用于浮点和向量类型的 Adam 优化器

  • 添加对瞬态 Python 模块的支持(修复 Houdini 集成问题)

  • 分别为向量/矩阵类型添加 wp.length_sq()wp.trace()

  • wp.quat_rpy()wp.determinant() 添加缺失的伴随计算

  • 添加 wp.atomic_min()wp.atomic_max() 运算符

  • 添加 wp.sim.model.add_cloth_mesh() 的向量化版本

  • 添加 NVDB 体积分配 API,详见 wp.Volume.allocate()wp.Volume.allocate_by_tiles()

  • 添加 NVDB 体积写入方法,详见 wp.volume_store_i()wp.volume_store_f()wp.volume_store_v()

  • 添加 MGPU 文档

  • 添加并行计算多个环境雅可比矩阵的示例,详见 example_jacobian_ik.py

  • wp.struct 类型添加 wp.Tape.zero() 支持

  • 使 SampleBrowser 成为 Kit 扩展的可选依赖项

  • 使 wp.Mesh 对象同时接受 1d 和 2d 的面顶点索引数组

  • 修复使用 importlib.reload() 重新加载类成员内核/函数定义的问题

  • 修复 wp.constants() 散列未导致内核失效的问题

  • 修复存在多个 .ptx 版本时的重新加载问题

  • 改进代码生成过程中的错误报告

0.4.3 - 2022-09-20#

  • 默认更新所有样本以使用 GPU 互操作路径

  • 修复长度大于 2GB 的数组问题

  • wp.render 类添加对每顶点 USD 网格颜色的支持

0.4.2 - 2022-09-07#

  • 在 Kit 的样本浏览器中注册 Warp 样本

  • 在发布模式内核构建中添加 NDEBUG 标志

  • 修复粒子求解器节点在使用大量粒子时的问题

  • 修复 Warp 样本场景中损坏的相机问题

0.4.1 - 2022-08-30#

  • 添加几何体采样方法,参见 wp.sample_unit_cube()wp.sample_unit_disk()

  • 添加用于搜索排序数组的 wp.lower_bound()

  • 添加一个选项用于禁用反向传播的代码生成以改善编译时间,参见 wp.set_module_options({"enable_backward": False}),默认值为 True

  • 修复从 Script Editor 或模块没有 __file__ 属性时使用 Warp 的问题

  • 修复包含 wp.func() 定义的模块热重载问题

  • 修复 wp.config.mode == "debug" 时 CUDA 上未正确设置调试标志的问题,这使得在调试模式下 CUDA 内核启用边界检查

  • 修复不返回值的函数的代码生成问题

0.4.0 - 2022-08-09#

  • 修复没有硬件支持的 GPU 上的 FP16 转换问题

  • 修复重新加载 Warp 模块时出现的 runtime = None 错误

  • 修复使用旧驱动程序运行时 PTX 架构版本的问题,参见 wp.config.ptx_target_arch

  • 修复从 __init__.py 导入 USD 的问题,将其延迟到需要它们的单个函数中

  • 修复 wp.mesh_query_point() 确定符号的鲁棒性问题

  • 修复创建/销毁网格时 wp.HashGrid 内存泄漏问题

  • 添加工具包和驱动程序的 CUDA 版本检查

  • 添加跨模块 @wp.struct 引用的支持

  • 即使 CUDA 初始化失败也支持运行,使用 wp.is_cuda_available() 检查可用性

  • 静态链接 CUDA 运行时库以避免部署问题

破坏性更改#

  • 从顶层模块中移除 wp.runtime 引用,应将其视为私有

0.3.2 - 2022-07-19#

  • __init__.py 中移除 Torch 导入,将导入延迟到 wp.from_torch()wp.to_torch()

0.3.1 - 2022-07-12#

  • 修复初始化后行进立方体重新分配的问题

  • 添加支持线段之间的最近点测试,参见 wp.closest_point_edge_edge() 内置函数

  • 添加支持模拟中每个三角形弹性系数的功能,参见 wp.sim.ModelBuilder.add_cloth_mesh()

  • 添加支持指定默认设备的功能,参见 wp.set_device()wp.get_device()wp.ScopedDevice

  • 添加支持多 GPU(例如 "cuda:0""cuda:1")的功能,参见 wp.get_cuda_devices()wp.get_cuda_device_count()wp.get_cuda_device()

  • 添加支持使用设备别名 "cuda" 显式指定当前 CUDA 上下文的功能

  • 添加支持使用任意外部 CUDA 上下文的功能,参见 wp.map_cuda_device()wp.unmap_cuda_device()

  • 添加 PyTorch 设备别名函数,参见 wp.device_from_torch()wp.device_to_torch()

破坏性更改#

  • 默认使用 CUDA 设备(如果可用)(与 wp.get_preferred_device() 对齐)

  • wp.ScopedCudaGuard 已弃用,请改用 wp.ScopedDevice

  • wp.synchronize() 现在同步所有设备;如需更精细控制,请使用 wp.synchronize_device()

  • 设备别名 "cuda" 现在指代当前 CUDA 上下文,而非特定设备(例如 "cuda:0""cuda:1"

0.3.0 - 2022-07-08#

  • 添加对 FP16 存储类型的支持,参见 wp.float16

  • 添加对每维度字节步长的支持,参见 wp.array.strides

  • 添加支持将 Python 类作为内核参数传递的功能,参见 @wp.struct 修饰器

  • 为内置矩阵类型添加额外的边界检查

  • 添加额外的浮点检查,参见 wp.config.verify_fp

  • 添加交错的用户源代码与生成的代码,以帮助调试

  • 添加通用的 GPU 行进立方体实现,参见 wp.MarchingCubes

  • 添加额外的标量*矩阵向量运算符

  • 添加支持从内置类型检索单行,例如:r = m33[i]

  • 添加 wp.log2()wp.log10() 内置函数

  • 添加支持快速实例化 wp.sim.ModelBuilder 对象的功能,以提高 RL 的环境创建性能

  • 移除自定义 CUB 版本并改进与 CUDA 11.7 的兼容性

  • 修复调用 wp.Tape.zero() 时保留外部用户梯度的问题

  • 修复仅在 requires_grad=True 时才分配 Torch 张量梯度的问题

  • 修复缺少 wp.mat22 构造函数伴随的问题

  • 修复 GPU 边缘情况下光线投射精度的问题(水密性问题)

  • 修复定义更改时内核热重载的问题

  • 修复 Linux 上的 NVCC 警告问题

  • 修复内核定义为类函数时生成的函数名称问题

  • 修复 Linux 上生成的 CPU 内核代码重载问题

  • 修复示例脚本输出 USD 为每秒 60 时间码(更好的 Kit 兼容性)的问题

0.2.3 - 2022-06-13#

  • 修复不正确的 4d 数组边界检查问题

  • 修复 wp.constant 更改未更新模块散列的问题

  • 修复先启动 CPU 内核时 CUDA 内核缓存过时的问题

  • 数组梯度现在与数组一起分配,可通过 wp.array.grad 访问,用户应注意始终调用 wp.Tape.zero() 来清除不同 wp.Tape.backward() 调用之间的梯度

  • 添加 wp.array.fill_() 以将所有条目设置为标量值(目前仅限 4 字节值)

破坏性更改#

  • Tape capture 选项已移除,用户现在可以在现有 CUDA 图(例如 Torch 内部)中捕获 Tape

  • 标量损失数组现在应在创建时显式设置 requires_grad=True

0.2.2 - 2022-05-30#

  • 修复 Warp 初始化内部 from import * 的问题

  • 修复使用带缩放的变形 Mesh 对象时的体空间速度问题

  • 修复影响 wp.curlnoise() 的噪声梯度不连续性问题

  • 修复 wp.from_torch() 未正确保留形状的问题

  • 修复 URDF 解析器错误地将密度传递给缩放参数的问题

  • 启动时间优化,从 3 秒缩短到 0.3 秒

  • 添加自定义内核缓存位置支持,Warp 现在将生成的二进制文件存储在用户应用程序目录中

  • 添加跨模块函数引用支持,例如:调用另一个模块的 @wp.func 函数

  • 添加支持基于参数类型重载 @wp.func 函数的功能

  • 添加支持从内核外部的 Python 解释器直接调用内置函数的功能(实验性)

  • 添加支持在 VSCode、PyCharm 等 IDE 中进行内置函数的自动完成和文档字符串查找

  • 添加支持进行部分数组复制的功能,详情参见 wp.copy()

  • 添加支持直接在内核中访问网格数据的功能,参见 wp.mesh_get_point()wp.mesh_get_index()wp.mesh_eval_face_normal()

  • 更改为仅针对启动内核的目标进行编译(例如:除非明确请求,否则不会编译 CPU)

破坏性更改#

  • 内置方法(例如 wp.quat_identity())现在直接调用 Warp 原生实现,并将返回一个 wp.quat 对象,而不是 NumPy 数组

  • 许多内置方法的 NumPy 实现已移至 wp.utils 并将被弃用

  • 调用本地 @wp.func 函数时不应使用命名空间,例如:以前即使 myfunc() 不是内置函数,wp.myfunc() 也会工作

  • 移除 wp.rpy2quat(),请改用 wp.quat_rpy()

0.2.1 - 2022-05-11#

  • 修复 Kit 中的单元测试问题

0.2.0 - 2022-05-02#

Warp Core#

  • 修复带有负边界的循环展开问题

  • 修复在未编译 CUDA 支持的情况下编译库时找不到未解析符号 hash_grid_build_device() 的问题

  • 修复用户机器上安装了较新 CUDA 工具包时无法加载 nvrtc-builtins64_113.dll 的问题

  • 修复将 Torch 张量转换为带有向量 dtype 的 wp.array 时的问题(行数不正确)

  • 修复在某些 Windows 安装中找不到 warp.dll 的问题

  • 修复 Clang 13.x 上 macOS 构建问题

  • 修复 Linux 上内核的单步调试问题

  • 为用户定义的 @wp.func 函数添加参数类型检查

  • 添加对自定义可迭代类型的支持,支持 ranges、hash grid 和 mesh query 对象

  • 添加对多维数组的支持,例如使用 x = array[i,j,k] 语法访问三维数组

  • 添加对多维内核启动的支持,使用 launch(kernel, dim=(i,j,k), ...i,j,k = wp.tid() 获取线程索引

  • 添加支持在调试模式下对数组内存访问进行边界检查,使用 wp.config.mode = "debug" 启用

  • 添加支持对动态和嵌套 for 循环进行微分的功能

  • 添加支持在内核内部使用自定义激活函数评估 MLP 神经网络层的功能,参见 wp.mlp()

  • 添加额外的 NVDB 采样方法和伴随,参见 wp.volume_sample_i()wp.volume_sample_f()wp.volume_sample_vec()

  • 添加支持加载 zlib 压缩的 NVDB 体积的功能,参见 wp.Volume.load_from_nvdb()

  • 添加支持三角形相交测试的功能,参见 wp.intersect_tri_tri()

  • 添加支持在 wp.ScopedTimer() 中使用 NVTX 配置文件区域的功能

  • 添加对额外变换和四元数数学运算的支持,参见 wp.inverse()wp.quat_to_matrix()wp.quat_from_matrix()

  • 默认将快速数学 (--fast-math) 添加到内核编译中

  • 默认添加 wp.torch 导入(如果安装了 PyTorch)

Warp Kit#

  • 在 'Window->Warp' 下添加用于浏览 Warp 文档和示例场景的 Kit 菜单

  • 修复当碰撞器来自 Read Prim 到 Bundle 节点时 OgnParticleSolver.py 示例的问题

Warp Sim#

  • 修复关节附着力问题

  • 修复 URDF 导入器和浮动基座支持问题

  • 添加示例,展示如何使用可微分正向运动学解决逆向运动学问题

  • 添加 URDF 倒立摆和四足机器人模拟示例

破坏性更改#

  • wp.volume_sample_world() 现在被在索引(本地)空间中操作的 wp.volume_sample_f/i/vec() 取代。用户在采样之前应使用 wp.volume_world_to_index() 将点从世界空间转换为索引空间。

  • wp.mlp() 在推理时期望多维数组而非一维数组,所有其他语义与此 API 的早期版本保持一致。

  • wp.array.length 成员已移除,请使用 wp.array.shape 访问数组维度,或使用 wp.array.size 获取总元素数量

  • dense_gemm()dense_chol() 等方法标记为实验性,直到我们重新审查它们

0.1.25 - 2022-03-20#

  • 添加支持将类方法作为 Warp 内核的功能

  • 添加 HashGrid reserve(),以便与 CUDA 图配合使用

  • 添加支持 Tape 前向/后向传播的 CUDA 图捕获的功能

  • 添加对 Python 3.8.x 和 3.9.x 的支持

  • 添加双曲三角函数,参见 wp.tanh()wp.sinh()wp.cosh()

  • 添加对整数类型的向下取整除法的支持

  • 将测试移入核心库,以便在 Kit 环境中运行

0.1.24 - 2022-03-03#

Warp Core#

  • 添加 NanoVDB 支持,参见 wp.volume_sample*() 方法

  • 添加支持在内核中读取编译时常量的功能,参见 wp.constant()

  • 添加对 __cuda_array_interface__ 协议的支持,实现与 PyTorch 的零拷贝互操作,参见 wp.torch.to_torch()

  • 添加支持额外的数值类型,i8、u8、i16、u16 等

  • 在分配/启动期间对设备字符串添加更好的检查

  • 添加支持使用正态分布采样随机数的功能,参见 wp.randn()

  • 升级到 CUDA 11.3

  • 将示例场景更新到 Kit 103.1

  • 未提供 dtype 时,从 np.array 推断数组 dtype

  • 修复带有负步长的范围 for 循环问题

  • 修复 3d 和 4d 球形梯度分布问题

0.1.23 - 2022-02-17#

Warp Core#

  • 修复 Showroom 安装期间生成的代码文件夹被移除的问题

  • 修复 macOS 支持问题

  • 修复动态 for 循环代码生成边缘情况问题

  • 添加程序化噪声基元,参见 wp.noise()wp.pnoise()wp.curlnoise()

  • 将模拟助手从测试中移到 wp.sim 模块中

0.1.22 - 2022-02-14#

Warp Core#

  • 修复 Linux 上 .so 重载问题

  • 修复某些边缘情况下 while 循环代码生成问题

  • 添加舍入函数 wp.round()wp.rint()wp.trunc()wp.floor()wp.ceil()

  • 添加支持在内核中打印字符串和格式化字符串的功能

  • 添加 MSVC 编译器版本检测并要求最低版本

Warp Sim#

  • 添加对万向和复合关节类型的支持

0.1.21 - 2022-01-19#

Warp Core#

  • 修复空 wp.array 对象在关闭时抛出异常的问题

  • 修复 Kit 中 CPU 内核的热重载问题

  • 添加用于基于点的空间查询的散列网格基元,参见 wp.hash_grid_query()wp.hash_grid_query_next()

  • 添加使用基于 PCG 的生成器的新 PRNG 方法,参见 wp.rand_init()wp.randf()wp.randi()

  • 添加对 AABB 网格查询的支持,参见 wp.mesh_query_aabb()wp.mesh_query_aabb_next()

  • 添加对所有 Python range() 循环变体的支持

  • 添加内置 vec2 类型和额外的数学运算符,wp.pow()wp.tan()wp.atan()wp.atan2()

  • 移除构建时对 CUDA 驱动库的依赖

  • 移除未使用的 NVRTC 二进制依赖项(Linux 分发减少 50MB)

Warp Sim#

  • 捆绑导入多个形状用于模拟节点

  • 新的 OgnParticleVolume 节点用于采样形状 -> 粒子

  • 新的 OgnParticleSolver 节点用于 DEM 风格的颗粒材料

0.1.20 - 2021-11-02#

  • 更新 GTC 的波纹求解器(支持多个碰撞器、浮力等)

0.1.19 - 2021-10-15#

  • 从 2021.3 发布以避免 omni.graph 数据库不兼容问题

0.1.18 - 2021-10-08#

  • 启用 Linux 支持(在 20.04 上测试)

0.1.17 - 2021-09-30#

  • 修复 3x3 SVD 伴随问题

  • 修复 A6000 GPU 问题(计算模型最低要求提升至 sm_52)

  • 修复重建时 .dll 卸载问题

  • 修复关闭时可能出现的数组销毁警告

  • 重命名 spatial_transform -> transform

  • 文档更新

0.1.16 - 2021-09-06#

  • 修复简单赋值 (a = b) 错误地生成引用而非值复制的情况

  • 处理将零长度(空)数组传递给内核

0.1.15 - 2021-09-03#

  • 添加额外的数学库函数 (asin 等)

  • 添加内置 3x3 SVD 支持

  • 添加支持命名常量(True, False, None)

  • 添加支持 if/else 语句(可微分)

  • 添加自定义 memset 内核以避免 cudaMemset() 的 CPU 开销

  • wp.sim 中添加刚体关节模型(基于 Brax)

  • 在核心库中添加 Linux、MacOS 支持

  • 修复错误地将纯赋值视为引用而非值复制的问题

  • 移除在 numpy 转换前将数组传输到 CPU 的需要(将隐式完成)

  • 更新示例 OgnRipple 波方程求解器以使用 bundles

0.1.14 - 2021-08-09#

  • 修复 CUDA BVH 中的内存越界访问问题

  • 改进内核启动后的错误检查(使用 wp.config.verify_cuda=True

  • 修复 vec3 normalize 伴随代码问题

0.1.13 - 2021-07-29#

  • 移除 OgnShrinkWrap.py 测试节点

0.1.12 - 2021-07-29#

  • 切换到 Woop 等人的水密光线-三角形相交测试

  • 在 CUDA 编译步骤中禁用 --fast-math 以提高精度

0.1.11 - 2021-07-28#

  • 修复 wp.mesh_query_ray() 返回不正确 t 值的问题

0.1.10 - 2021-07-28#

  • 修复 OV 扩展 fwatcher 过滤器问题,避免因 OGN 重建导致热重载循环

0.1.9 - 2021-07-21#

  • 修复加载同级 DLL 路径问题

  • 改进内置函数参数的类型检查

  • 添加运行时文档,现在可以使用 wp.print_builtins() 列出所有内置函数

0.1.8 - 2021-07-14#

  • 修复 CUDA 内核热重载问题

  • 添加 Tape 对象用于重放可微分内核

  • 添加 Torch 互操作助手(转换 torch.Tensorwp.Array

0.1.7 - 2021-07-05#

  • 切换到 NVRTC 作为 CUDA 运行时

  • 允许在没有主机编译器的情况下运行

  • 在内核发布模式中禁用断言(小幅性能提升)

0.1.6 - 2021-06-14#

  • 在 target-deps 中查找 CUDA 工具链

0.1.5 - 2021-06-14#

  • 重命名 OgLang -> Warp

  • 改进 CUDA 环境错误检查

  • 清理部分日志记录,添加详细模式(wp.config.verbose

0.1.4 - 2021-06-10#

  • 添加网格光线投射支持

0.1.3 - 2021-06-09#

  • 添加一元负号运算符支持

  • 添加支持在动态循环中修改变量(不可微分)

  • 添加就地运算符支持

  • 改进内核缓存启动时间(避免在检查缓存前进行伴随计算)

  • 更新 README.md,包含要求/示例

0.1.2 - 2021-06-03#

  • 添加查询网格速度支持

  • 添加 CUDA 图支持,参见 wp.capture_begin()wp.capture_end()wp.capture_launch()

  • 添加显式初始化阶段,wp.init()

  • 添加变分欧拉求解器 (sim)

  • 添加接触缓存,切换到非线性摩擦模型 (sim)

  • 修复 Linux/macOS 支持问题

0.1.1 - 2021-05-18#

  • 修复 CUDA 上下文冲突的 bug

0.1.0 - 2021-05-17#

  • 初次发布用于 alpha 测试