6.34. 核心转储属性控制 API

本节介绍了底层 CUDA 驱动程序应用程序编程接口的核心转储属性控制功能。

枚举

enum CUCoredumpGenerationFlags
enum CUcoredumpSettings

函数

CUresult cuCoredumpGetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者获取当前上下文的核心转储属性值。
CUresult cuCoredumpGetAttributeGlobal ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者获取整个应用程序的核心转储属性值。
CUresult cuCoredumpSetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者设置当前上下文的核心转储属性值。
CUresult cuCoredumpSetAttributeGlobal ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者全局设置核心转储属性值。

枚举

enum CUCoredumpGenerationFlags

用于控制核心转储内容的标志

CU_COREDUMP_DEFAULT_FLAGS = 0
CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES = (1<<0)
CU_COREDUMP_SKIP_GLOBAL_MEMORY = (1<<1)
CU_COREDUMP_SKIP_SHARED_MEMORY = (1<<2)
CU_COREDUMP_SKIP_LOCAL_MEMORY = (1<<3)
CU_COREDUMP_SKIP_ABORT = (1<<4)
CU_COREDUMP_SKIP_CONSTBANK_MEMORY = (1<<5)
CU_COREDUMP_LIGHTWEIGHT_FLAGS = CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES |CU_COREDUMP_SKIP_GLOBAL_MEMORY |CU_COREDUMP_SKIP_SHARED_MEMORY |CU_COREDUMP_SKIP_LOCAL_MEMORY |CU_COREDUMP_SKIP_CONSTBANK_MEMORY
enum CUcoredumpSettings

用于选择要获取/设置的核心转储属性的标志

CU_COREDUMP_ENABLE_ON_EXCEPTION = 1
CU_COREDUMP_TRIGGER_HOST
CU_COREDUMP_LIGHTWEIGHT
CU_COREDUMP_ENABLE_USER_TRIGGER
CU_COREDUMP_FILE
CU_COREDUMP_PIPE
CU_COREDUMP_GENERATION_FLAGS
CU_COREDUMP_MAX

函数

CUresult cuCoredumpGetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者获取当前上下文的核心转储属性值。
参数
attrib
- 定义要获取哪个值的枚举。
value
- 包含请求数据的 void*。
size
- 内存区域的大小value指向。
描述

*value中返回由attrib指定的请求值。调用者有责任确保*value的数据类型和大小与请求匹配。

如果调用者使用*value等于 NULL 调用此函数,则预期用于attrib的内存区域大小(以字节为单位)将放置在size.

支持的属性包括

  • CU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,true 表示来自此上下文的 GPU 异常将在 CU_COREDUMP_FILE 指定的位置创建核心转储。默认值为 false,除非全局或本地设置为 true,或者在上下文创建期间设置了 CU_CTX_USER_COREDUMP_ENABLE 标志。

  • CU_COREDUMP_TRIGGER_HOST:布尔值,true 表示主机 CPU 也将创建核心转储。默认值为 true,除非全局或本地设置为 false。此值已从 CUDA 12.5 开始弃用 - 如果需要禁用主机设备 abort(),请引发 CU_COREDUMP_SKIP_ABORT 标志。

  • CU_COREDUMP_LIGHTWEIGHT:布尔值,true 表示任何生成的核心转储都不会包含 GPU 内存或非重定位 ELF 映像的转储。默认值为 false,除非全局或本地设置为 true。此属性已从 CUDA 12.5 开始弃用,请改用 CU_COREDUMP_GENERATION_FLAGS。

  • CU_COREDUMP_ENABLE_USER_TRIGGER:布尔值,true 表示可以通过写入 CU_COREDUMP_PIPE 指定的系统管道来创建核心转储。默认值为 false,除非全局或本地设置为 true。

  • CU_COREDUMP_FILE:最多 1023 个字符的字符串,定义此上下文生成的任何核心转储将写入的位置。默认值为 core.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_PIPE:最多 1023 个字符的字符串,定义在启用用户触发的核心转储时将监视的管道名称。默认值为 corepipe.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_GENERATION_FLAGS:一个整数值,允许对核心转储中包含的数据进行精细控制,指定为以下值的按位 OR 组合:+ CU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将恢复为其默认设置,包括它可以访问的所有内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括运行时未重定位的 CUDA 源代码模块中的数据。+ CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据。+ CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括已转储内核所属 Warp 的网格级共享内存。+ CU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括来自内核的本地内存。+ CU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用所有上述选项。等效于将 CU_COREDUMP_LIGHTWEIGHT 属性设置为 true。+ CU_COREDUMP_SKIP_ABORT - 如果设置,GPU 异常将不会在主机 CPU 进程中引发 abort()。与 CU_COREDUMP_TRIGGER_HOST 具有相同的功能目标,但更好地反映了默认行为。

另请参阅

cuCoredumpGetAttributeGlobal, cuCoredumpSetAttribute, cuCoredumpSetAttributeGlobal

CUresult cuCoredumpGetAttributeGlobal ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者获取整个应用程序的核心转储属性值。
参数
attrib
- 定义要获取哪个值的枚举。
value
- 包含请求数据的 void*。
size
- 内存区域的大小value指向。
描述

*value中返回由attrib指定的请求值。调用者有责任确保*value的数据类型和大小与请求匹配。

如果调用者使用*value等于 NULL 调用此函数,则预期用于attrib的内存区域大小(以字节为单位)将放置在size.

支持的属性包括

  • CU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,true 表示来自此上下文的 GPU 异常将在 CU_COREDUMP_FILE 指定的位置创建核心转储。默认值为 false。

  • CU_COREDUMP_TRIGGER_HOST:布尔值,true 表示主机 CPU 也将创建核心转储。默认值为 true,除非全局或本地设置为 false。此值已从 CUDA 12.5 开始弃用 - 如果需要禁用主机设备 abort(),请引发 CU_COREDUMP_SKIP_ABORT 标志。

  • CU_COREDUMP_LIGHTWEIGHT:布尔值,true 表示任何生成的核心转储都不会包含 GPU 内存或非重定位 ELF 映像的转储。默认值为 false。此属性已从 CUDA 12.5 开始弃用,请改用 CU_COREDUMP_GENERATION_FLAGS。

  • CU_COREDUMP_ENABLE_USER_TRIGGER:布尔值,true 表示可以通过写入 CU_COREDUMP_PIPE 指定的系统管道来创建核心转储。默认值为 false。

  • CU_COREDUMP_FILE:最多 1023 个字符的字符串,定义此上下文生成的任何核心转储将写入的位置。默认值为 core.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_PIPE:最多 1023 个字符的字符串,定义在启用用户触发的核心转储时将监视的管道名称。默认值为 corepipe.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_GENERATION_FLAGS:一个整数值,允许对核心转储中包含的数据进行精细控制,指定为以下值的按位 OR 组合:+ CU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将恢复为其默认设置,包括它可以访问的所有内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括运行时未重定位的 CUDA 源代码模块中的数据。+ CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据。+ CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括已转储内核所属 Warp 的网格级共享内存。+ CU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括来自内核的本地内存。+ CU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用所有上述选项。等效于将 CU_COREDUMP_LIGHTWEIGHT 属性设置为 true。+ CU_COREDUMP_SKIP_ABORT - 如果设置,GPU 异常将不会在主机 CPU 进程中引发 abort()。与 CU_COREDUMP_TRIGGER_HOST 具有相同的功能目标,但更好地反映了默认行为。

另请参阅

cuCoredumpGetAttribute, cuCoredumpSetAttribute, cuCoredumpSetAttributeGlobal

CUresult cuCoredumpSetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者设置当前上下文的核心转储属性值。
参数
attrib
- 定义要设置哪个值的枚举。
value
- 包含请求数据的 void*。
size
- 内存区域的大小value指向。
描述

此函数应被视为本文档中定义的 CUDA-GDB 环境变量的替代接口:https://docs.nvda.net.cn/cuda/cuda-gdb/index.html#gpu-coredump

需要注意的一个重要设计决策是,在 CUDA 初始化之前设置的任何核心转储环境变量值将永久优先于使用此函数设置的任何值。做出此决策是为了确保当前可能正在使用这些变量来获取核心转储的任何用户的行为不会发生变化。

*value应包含由设置的请求值指定的请求值。调用者有责任确保*value的数据类型和大小与请求匹配。

如果调用者使用*value等于 NULL 调用此函数,则预期用于设置的请求值的内存区域大小(以字节为单位)将放置在size.

/note 如果调用者尝试在计算能力 < 6.0 的 GPU 上设置 CU_COREDUMP_ENABLE_ON_EXCEPTION,则此函数将返回 CUDA_ERROR_NOT_SUPPORTEDcuCoredumpSetAttributeGlobal 在这些平台上作为替代方案工作。

/note CU_COREDUMP_ENABLE_USER_TRIGGER 和 CU_COREDUMP_PIPE 不能在每个上下文的基础上设置。

支持的属性包括

  • CU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,true 表示来自此上下文的 GPU 异常将在 CU_COREDUMP_FILE 指定的位置创建核心转储。默认值为 false。

  • CU_COREDUMP_TRIGGER_HOST:布尔值,true 表示主机 CPU 也将创建核心转储。默认值为 true,除非全局或本地设置为 false。此值已从 CUDA 12.5 开始弃用 - 如果需要禁用主机设备 abort(),请引发 CU_COREDUMP_SKIP_ABORT 标志。

  • CU_COREDUMP_LIGHTWEIGHT:布尔值,true 表示任何生成的核心转储都不会包含 GPU 内存或非重定位 ELF 映像的转储。默认值为 false。此属性已从 CUDA 12.5 开始弃用,请改用 CU_COREDUMP_GENERATION_FLAGS。

  • CU_COREDUMP_FILE:最多 1023 个字符的字符串,定义此上下文生成的任何核心转储将写入的位置。默认值为 core.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_GENERATION_FLAGS:一个整数值,允许对核心转储中包含的数据进行精细控制,指定为以下值的按位 OR 组合:+ CU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将恢复为其默认设置,包括它可以访问的所有内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括运行时未重定位的 CUDA 源代码模块中的数据。+ CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据。+ CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括已转储内核所属 Warp 的网格级共享内存。+ CU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括来自内核的本地内存。+ CU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用所有上述选项。等效于将 CU_COREDUMP_LIGHTWEIGHT 属性设置为 true。+ CU_COREDUMP_SKIP_ABORT - 如果设置,GPU 异常将不会在主机 CPU 进程中引发 abort()。与 CU_COREDUMP_TRIGGER_HOST 具有相同的功能目标,但更好地反映了默认行为。

另请参阅

cuCoredumpGetAttributeGlobal, cuCoredumpGetAttribute, cuCoredumpSetAttributeGlobal

CUresult cuCoredumpSetAttributeGlobal ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者全局设置核心转储属性值。
参数
attrib
- 定义要设置哪个值的枚举。
value
- 包含请求数据的 void*。
size
- 内存区域的大小value指向。
描述

此函数应被视为本文档中定义的 CUDA-GDB 环境变量的替代接口:https://docs.nvda.net.cn/cuda/cuda-gdb/index.html#gpu-coredump

需要注意的一个重要设计决策是,在 CUDA 初始化之前设置的任何核心转储环境变量值将永久优先于使用此函数设置的任何值。做出此决策是为了确保当前可能正在使用这些变量来获取核心转储的任何用户的行为不会发生变化。

*value应包含由设置的请求值指定的请求值。调用者有责任确保*value的数据类型和大小与请求匹配。

如果调用者使用*value等于 NULL 调用此函数,则预期用于设置的请求值的内存区域大小(以字节为单位)将放置在size.

支持的属性包括

  • CU_COREDUMP_ENABLE_ON_EXCEPTION:布尔值,true 表示来自此上下文的 GPU 异常将在 CU_COREDUMP_FILE 指定的位置创建核心转储。默认值为 false。

  • CU_COREDUMP_TRIGGER_HOST:布尔值,true 表示主机 CPU 也将创建核心转储。默认值为 true,除非全局或本地设置为 false。此值已从 CUDA 12.5 开始弃用 - 如果需要禁用主机设备 abort(),请引发 CU_COREDUMP_SKIP_ABORT 标志。

  • CU_COREDUMP_LIGHTWEIGHT:布尔值,true 表示任何生成的核心转储都不会包含 GPU 内存或非重定位 ELF 映像的转储。默认值为 false。此属性已从 CUDA 12.5 开始弃用,请改用 CU_COREDUMP_GENERATION_FLAGS。

  • CU_COREDUMP_ENABLE_USER_TRIGGER:布尔值,true 表示可以通过写入 CU_COREDUMP_PIPE 指定的系统管道来创建核心转储。默认值为 false。

  • CU_COREDUMP_FILE:最多 1023 个字符的字符串,定义此上下文生成的任何核心转储将写入的位置。默认值为 core.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_PIPE:最多 1023 个字符的字符串,定义在启用用户触发的核心转储时将监视的管道名称。在 CU_COREDUMP_ENABLE_USER_TRIGGER 设置为 true 后,此值可能不会更改。默认值为 corepipe.cuda.HOSTNAME.PID,其中 HOSTNAME 是运行 CUDA 应用程序的机器的主机名,PID 是 CUDA 应用程序的进程 ID。

  • CU_COREDUMP_GENERATION_FLAGS:一个整数值,允许对核心转储中包含的数据进行精细控制,指定为以下值的按位 OR 组合:+ CU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将恢复为其默认设置,包括它可以访问的所有内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包括运行时未重定位的 CUDA 源代码模块中的数据。+ CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包括不属于任何上下文的设备端全局数据。+ CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包括已转储内核所属 Warp 的网格级共享内存。+ CU_COREDUMP_SKIP_LOCAL_MEMORY - 核心转储将不包括来自内核的本地内存。+ CU_COREDUMP_LIGHTWEIGHT_FLAGS - 启用所有上述选项。等效于将 CU_COREDUMP_LIGHTWEIGHT 属性设置为 true。+ CU_COREDUMP_SKIP_ABORT - 如果设置,GPU 异常将不会在主机 CPU 进程中引发 abort()。与 CU_COREDUMP_TRIGGER_HOST 具有相同的功能目标,但更好地反映了默认行为。

另请参阅

cuCoredumpGetAttribute, cuCoredumpGetAttributeGlobal, cuCoredumpSetAttribute