reprospect.tools.binaries.cuobjdump module
Tools that can be used to extract SASS code and kernel attributes from executables.
Note
Whereas cuda.core.ObjectCode focuses on compiling with nvcc and querying a handful
of kernel properties, this modules provides an interface to the CUDA binary analysis utilities to allow
the SASS code of each kernel to be extracted for more extensive analysis, e.g. with reprospect.tools.sass.
- class reprospect.tools.binaries.cuobjdump.CuObjDump(file: ~pathlib.Path, arch: ~reprospect.tools.architecture.NVIDIAArch, *, sass: bool = True, demangler: type[~reprospect.tools.binaries.demangle.CuppFilt | ~reprospect.tools.binaries.demangle.LlvmCppFilt] | None = <class 'reprospect.tools.binaries.demangle.CuppFilt'>, keep: ~typing.Iterable[str] | None = None)View on GitHub
Bases:
objectUse
cuobjdumpfor extracting SASS, symbol table, and so on.References:
[NVId]
- __init__(file: ~pathlib.Path, arch: ~reprospect.tools.architecture.NVIDIAArch, *, sass: bool = True, demangler: type[~reprospect.tools.binaries.demangle.CuppFilt | ~reprospect.tools.binaries.demangle.LlvmCppFilt] | None = <class 'reprospect.tools.binaries.demangle.CuppFilt'>, keep: ~typing.Iterable[str] | None = None) NoneView on GitHub
- Parameters:
file – Either a host binary file containing one or more embedded CUDA binary files, or itself a CUDA binary file.
keep – Optionally filter the functions to be kept.
- __str__() strView on GitHub
Rich representation.
- arch: Final[NVIDIAArch]
The NVIDIA architecture.
- property embedded_cubins: tuple[str, ...]View on GitHub
Get the names of the embedded CUDA binary files contained in
file.
- classmethod extract(*, file: Path, arch: NVIDIAArch, cwd: Path, cubin: str, **kwargs) tuple[CuObjDump, Path]View on GitHub
Extract the embedded CUDA binary file whose name contains cubin, from file, for the given arch.
The file can be inspected with the following command to list all ELF files:
cuobjdump --list-elf <file>
Note that extracting an embedded CUDA binary from a file so as to extract a specific subset of the SASS can be significantly faster than extracting all the SASS straightforwardly from the whole file.
- static extract_elf(*, file: Path, cwd: Path | None = None, arch: NVIDIAArch | None = None, name: str | None = None) Generator[str, None, None]View on GitHub
Extract ELF files from file.
- Parameters:
arch – Optionally filter for a given architecture.
name – Optionally filter by name.
- property file_is_cubin: boolView on GitHub
Whether
fileis a CUDA binary file.
- static list_elf(*, file: Path, arch: NVIDIAArch | None = None) Generator[str, None, None]View on GitHub
List ELF files in file.
- Parameters:
arch – Optionally filter for a given architecture.
- class reprospect.tools.binaries.cuobjdump.Function(symbol: str, code: str, ru: ResourceUsage)View on GitHub
Bases:
objectData structure holding the SASS code and resource usage of a kernel, as extracted from a binary file.
- __init__(symbol: str, code: str, ru: ResourceUsage) None
- __str__() strView on GitHub
Rich representation with
to_table().
- ru: ResourceUsage
The resource usage.
- to_table(*, max_code_length: int = 130, descriptors: dict[str, str] | None = None) TableView on GitHub
Convert to a
rich.table.Table.- Parameters:
descriptors – Key-value pairs added as descriptor rows at the top of the table, optional.
- class reprospect.tools.binaries.cuobjdump.ResourceUsage(register: int = 0, constant: dict[int, int] = <factory>, shared: int = 0, local: int = 0, sampler: int = 0, stack: int = 0, surface: int = 0, texture: int = 0)View on GitHub
Bases:
objectResource usage.
References:
- __init__(register: int = 0, constant: dict[int, int] = <factory>, shared: int = 0, local: int = 0, sampler: int = 0, stack: int = 0, surface: int = 0, texture: int = 0) None
- __str__() strView on GitHub
- classmethod parse(line: str) ResourceUsageView on GitHub
Parse a resource usage line, such as produced by
cuobjdumpwith--dump-resource-usage.