#pragma once #include #include #include #include #include struct CUevent_st; namespace torch { namespace profiler { namespace impl { // ---------------------------------------------------------------------------- // -- Annotation -------------------------------------------------------------- // ---------------------------------------------------------------------------- using ProfilerEventStub = std::shared_ptr; using ProfilerVoidEventStub = std::shared_ptr; struct TORCH_API ProfilerStubs { virtual void record( c10::DeviceIndex* device, ProfilerVoidEventStub* event, int64_t* cpu_ns) const = 0; virtual float elapsed( const ProfilerVoidEventStub* event, const ProfilerVoidEventStub* event2) const = 0; virtual void mark(const char* name) const = 0; virtual void rangePush(const char* name) const = 0; virtual void rangePop() const = 0; virtual bool enabled() const { return false; } virtual void onEachDevice(std::function op) const = 0; virtual void synchronize() const = 0; virtual ~ProfilerStubs(); }; TORCH_API void registerCUDAMethods(ProfilerStubs* stubs); TORCH_API const ProfilerStubs* cudaStubs(); TORCH_API void registerITTMethods(ProfilerStubs* stubs); TORCH_API const ProfilerStubs* ittStubs(); TORCH_API void registerPrivateUse1Methods(ProfilerStubs* stubs); TORCH_API const ProfilerStubs* privateuse1Stubs(); using vulkan_id_t = strong::type< int64_t, struct _VulkanID, strong::regular, strong::convertible_to, strong::hashable>; } // namespace impl } // namespace profiler } // namespace torch