6.34. Coredump 属性控制 API

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

枚举

enum CUCoredumpGenerationFlags
enum CUcoredumpSettings

Functions

CUresult cuCoredumpGetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
Allows caller to fetch a coredump attribute value for the current context.
CUresult cuCoredumpGetAttributeGlobal ( CUcoredumpSettings attrib, void* value, size_t* size )
Allows caller to fetch a coredump attribute value for the entire application.
CUresult cuCoredumpSetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
Allows caller to set a coredump attribute value for the current context.
CUresult cuCoredumpSetAttributeGlobal ( CUcoredumpSettings attrib, void* value, size_t* size )
Allows caller to set a coredump attribute value globally.

枚举

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

Functions

CUresult cuCoredumpGetAttribute ( CUcoredumpSettings attrib, void* value, size_t* size )
允许调用者获取当前上下文的coredump属性值。
参数
attrib
- The enum defining which value to fetch.
value
- void* containing the requested data.
size
- The size of the memory region value points to.
描述

*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: 一个整数值,用于精细控制核心转储中包含的数据,通过以下值的按位或组合来指定:+ CU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将恢复为默认设置,包含所有可访问的内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包含运行时未重定位的CUDA源模块数据。+ CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包含不属于任何上下文的设备端全局数据。+ CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包含转储内核所属线程块的网格级共享内存。+ 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
- The enum defining which value to fetch.
value
- void* containing the requested data.
size
- The size of the memory region value points to.
描述

*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: 一个整数值,用于精细控制核心转储中包含的数据,通过以下值的按位或组合来指定:+ CU_COREDUMP_DEFAULT_FLAGS - 如果单独设置,核心转储生成将恢复默认设置,包含所有可访问的内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包含运行时未重定位的CUDA源模块数据。+ CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包含不属于任何上下文的设备端全局数据。+ CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包含转储内核所属线程块的网格级共享内存。+ 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
- The enum defining which value to set.
value
- void* containing the requested data.
size
- The size of the memory region value points to.
描述

This function should be considered an alternate interface to the CUDA-GDB environment variables defined in this document: https://docs.nvidia.com/cuda/cuda-gdb/index.html#gpu-coredump

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

*value 应包含由 set 指定的请求值。调用方需确保 *value 的数据类型和大小与请求匹配。

如果调用者以*value等于NULL的方式调用此函数,则set所需内存区域的大小(以字节为单位)将被存入size中。

/note 如果调用者尝试在计算能力低于6.0的GPU上设置CU_COREDUMP_ENABLE_ON_EXCEPTION,此函数将返回CUDA_ERROR_NOT_SUPPORTED。作为替代方案,cuCoredumpSetAttributeGlobal可在这些平台上使用。

/注意 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: 一个整数值,用于通过位或运算组合以下标志来精细控制核心转储文件包含的数据内容:+ CU_COREDUMP_DEFAULT_FLAGS - 单独设置时,核心转储将恢复默认设置,包含所有可访问的内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包含运行时未重定位的CUDA源模块数据 + CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包含不属于任何上下文的设备端全局数据 + CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包含转储内核所属线程块的网格级共享内存 + 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
- The enum defining which value to set.
value
- void* containing the requested data.
size
- The size of the memory region value points to.
描述

This function should be considered an alternate interface to the CUDA-GDB environment variables defined in this document: https://docs.nvidia.com/cuda/cuda-gdb/index.html#gpu-coredump

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

*value 应包含由 set 指定的请求值。调用方需确保 *value 的数据类型和大小与请求匹配。

如果调用者以*value等于NULL的方式调用此函数,则set所需内存区域的大小(以字节为单位)将被存入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: 一个整数值,用于通过位或运算组合以下标志来精细控制核心转储文件包含的数据内容:+ CU_COREDUMP_DEFAULT_FLAGS - 单独设置时,核心转储生成将恢复默认设置,包含所有可访问的内存区域 + CU_COREDUMP_SKIP_NONRELOCATED_ELF_IMAGES - 核心转储将不包含运行时未重定位的CUDA源模块数据 + CU_COREDUMP_SKIP_GLOBAL_MEMORY - 核心转储将不包含不属于任何上下文的设备端全局数据 + CU_COREDUMP_SKIP_SHARED_MEMORY - 核心转储将不包含转储内核所属线程块的网格级共享内存 + 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