2
from typing import Callable, Generic, List
4
from typing_extensions import ParamSpec
6
logger = logging.getLogger(__name__)
10
class CallbackRegistry(Generic[P]):
11
def __init__(self, name: str):
13
self.callback_list: List[Callable[P, None]] = []
15
def add_callback(self, cb: Callable[P, None]) -> None:
16
self.callback_list.append(cb)
18
def fire_callbacks(self, *args: P.args, **kwargs: P.kwargs) -> None:
19
for cb in self.callback_list:
22
except Exception as e:
24
"Exception in callback for %s registered with CUDA trace", self.name
28
CUDAEventCreationCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
31
CUDAEventDeletionCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
34
CUDAEventRecordCallbacks: "CallbackRegistry[int, int]" = CallbackRegistry(
37
CUDAEventWaitCallbacks: "CallbackRegistry[int, int]" = CallbackRegistry(
40
CUDAMemoryAllocationCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
41
"CUDA memory allocation"
43
CUDAMemoryDeallocationCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
44
"CUDA memory deallocation"
46
CUDAStreamCreationCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
47
"CUDA stream creation"
49
CUDADeviceSynchronizationCallbacks: "CallbackRegistry[[]]" = CallbackRegistry(
50
"CUDA device synchronization"
52
CUDAStreamSynchronizationCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
53
"CUDA stream synchronization"
55
CUDAEventSynchronizationCallbacks: "CallbackRegistry[int]" = CallbackRegistry(
56
"CUDA event synchronization"
60
def register_callback_for_cuda_event_creation(cb: Callable[[int], None]) -> None:
61
CUDAEventCreationCallbacks.add_callback(cb)
64
def register_callback_for_cuda_event_deletion(cb: Callable[[int], None]) -> None:
65
CUDAEventDeletionCallbacks.add_callback(cb)
68
def register_callback_for_cuda_event_record(cb: Callable[[int, int], None]) -> None:
69
CUDAEventRecordCallbacks.add_callback(cb)
72
def register_callback_for_cuda_event_wait(cb: Callable[[int, int], None]) -> None:
73
CUDAEventWaitCallbacks.add_callback(cb)
76
def register_callback_for_cuda_memory_allocation(cb: Callable[[int], None]) -> None:
77
CUDAMemoryAllocationCallbacks.add_callback(cb)
80
def register_callback_for_cuda_memory_deallocation(cb: Callable[[int], None]) -> None:
81
CUDAMemoryDeallocationCallbacks.add_callback(cb)
84
def register_callback_for_cuda_stream_creation(cb: Callable[[int], None]) -> None:
85
CUDAStreamCreationCallbacks.add_callback(cb)
88
def register_callback_for_cuda_device_synchronization(cb: Callable[[], None]) -> None:
89
CUDADeviceSynchronizationCallbacks.add_callback(cb)
92
def register_callback_for_cuda_stream_synchronization(
93
cb: Callable[[int], None]
95
CUDAStreamSynchronizationCallbacks.add_callback(cb)
98
def register_callback_for_cuda_event_synchronization(cb: Callable[[int], None]) -> None:
99
CUDAEventSynchronizationCallbacks.add_callback(cb)