配置#

Warp 在全局、模块和内核级别都有设置,可用于微调 Warp 程序的编译和详细程度。在可以在多个级别更改设置的情况下(例如:enable_backward),更具体范围内的设置优先。

全局设置#

可以在调用 wp.init() 之前或之后通过直接赋值修改设置,但有些设置只有在初始化之前设置才会生效。

例如,用户内核缓存的位置可以通过以下方式更改

import os

import warp as wp

example_dir = os.path.dirname(os.path.realpath(__file__))

# set default cache directory before wp.init()
wp.config.kernel_cache_dir = os.path.join(example_dir, "tmp", "warpcache1")

wp.init()
warp.config.version: str = '1.7.1'#

Warp 版本字符串

warp.config.verify_fp: bool = False#

为输入和输出启用浮点验证。

启用后,在操作之前和之后检查所有值是否为有限值。

注意:启用此标志会影响性能。

warp.config.verify_cuda: bool = False#

在内核启动后启用 CUDA 错误检查。

此设置不能在图捕获期间使用

注意:启用此标志会影响性能

warp.config.print_launches: bool = False#

启用详细的内核启动日志记录。

打印每个内核启动的信息,包括

  • 启动维度

  • 输入/输出参数

  • 目标设备

注意:启用此标志会影响性能。

warp.config.mode: str = 'release'#

Warp 内核的编译模式。

参数:

mode"release""debug"

注意:调试模式可能会影响性能。

此设置可以在模块级别通过设置 "mode" 模块选项来覆盖。

warp.config.verbose: bool = False#

在代码生成和编译期间启用详细日志记录。

warp.config.verbose_warnings: bool = False#

启用包含源位置信息的扩展警告消息。

warp.config.quiet: bool = False#

禁用 Warp 模块初始化消息。

错误消息和警告不受影响。

warp.config.verify_autograd_array_access: bool = False#

启用可能影响梯度计算的数组覆盖警告。

warp.config.enable_vector_component_overwrites: bool = False#

允许对向量/矩阵/四元数分量进行多次写入。

注意:启用此选项可能会显著增加内核编译时间。

warp.config.cache_kernels: bool = True#

启用应用程序启动之间的内核缓存。

warp.config.kernel_cache_dir: str | None = None#

存储已编译内核缓存的目录路径。

如果为 None,路径按以下顺序确定

  1. WARP_CACHE_PATH 环境变量。

  2. 系统的用户缓存目录(通过 appdirs.user_cache_directory)。

注意:前缀为 wp_ 的子目录将在此位置创建。

warp.config.cuda_output: str | None = None#

内核编译的首选 CUDA 输出格式。

参数:

cuda_output – {None, "ptx", "cubin"} 之一。如果为 None,则格式自动确定。

warp.config.ptx_target_arch: int | None = None#

PTX 生成的目标架构版本,例如 ptx_target_arch = 75

如果为 None,则架构由系统中存在的设备确定。

warp.config.lineinfo: bool = False#

启用包含行信息的模块编译。

为 GPU 执行编译的模块将使用 --generate-line-info 编译器选项进行编译,该选项为设备代码生成行号信息。无论此设置如何,在 "debug" 模式下编译模块时始终包含行号信息。

此设置可以在模块级别通过设置 "lineinfo" 模块选项来覆盖。

warp.config.line_directives: bool = True#

在生成代码中启用 Python 源行映射。

如果为 True,则在为包含行信息的模块生成的代码中插入 #line 指令,以映射回原始 Python 源文件。

warp.config.enable_backward: bool = True#

启用内核反向传播的编译。

此设置可以在模块级别通过设置 "enable_backward" 模块选项来覆盖。

warp.config.llvm_cuda: bool = False#

使用 Clang/LLVM 编译器代替 NVRTC 进行 CUDA 编译。

warp.config.enable_graph_capture_module_load_by_default: bool = True#

在图捕获之前启用自动模块加载。

仅影响 CUDA 驱动程序版本低于 12.3 的系统。

warp.config.enable_mempools_at_init: bool = True#

在支持的情况下,在设备初始化期间启用 CUDA 内存池。

warp.config.max_unroll: int = 16#

循环的最大展开因子。

请注意,max_unroll 不考虑嵌套循环中的总迭代次数。如果每个嵌套循环都低于 max_unroll 阈值,这可能会导致生成大量自动生成的代码。

此设置可以在模块级别通过设置 "max_unroll" 模块选项来覆盖。

模块设置#

可以通过将选项对字典传递给 wp.set_module_options() 来更改控制运行时编译和代码生成的模块级设置。

例如,可以通过以下方式禁用整个模块中内核的反向传播编译

wp.set_module_options({"enable_backward": False})

模块的选项也可以使用 wp.get_module_options() 查询。

字段

类型

默认值

描述

mode

字符串

全局设置

warp.config.mode 设置的模块级覆盖。

max_unroll

整数

全局设置

warp.config.max_unroll 设置的模块级覆盖。

enable_backward

布尔值

全局设置

warp.config.enable_backward 设置的模块级覆盖。

fast_math

布尔值

False

如果为 True,CUDA 内核将使用 --use_fast_math 编译器选项进行编译,该选项启用了一些更快速但不那么精确的快速数学运算。

fuse_fp

布尔值

True

如果为 True,允许编译器发出融合浮点运算,例如乘加融合。这可以提高数值精度,通常建议启用。设置为 False 可以帮助确保功能等效的内核无论是否存在融合运算都能产生相同的结果。

lineinfo

布尔值

全局设置

warp.config.lineinfo 设置的模块级覆盖。

cuda_output

字符串

None

warp.config.cuda_output 设置的模块级覆盖。

内核设置#

通过将 enable_backward 参数传递给 @wp.kernel 装饰器,可以按内核禁用反向传播编译,示例如下

@wp.kernel(enable_backward=False)
def scale_2(
    x: wp.array(dtype=float),
    y: wp.array(dtype=float),
):
    y[0] = x[0] ** 2.0