AthCUDA::KernelRunnerSvcImplCallback Node1 AthCUDA::KernelRunnerSvc ImplCallback + KernelRunnerSvcImplCallback() + operator()() Node6 AthCUDA::KernelRunnerSvcImpl + KernelRunnerSvcImpl() + execute() + getAvailableStream() Node1->Node6 -m_callback Node2 AthCUDA::KernelRunnerSvc - m_kernelsInFlight - m_totalTasks - m_gpuTasks - m_nKernels + setTaskFinished() + initialize() + finalize() + execute() * initialize() * finalize() * execute() * m_nKernels Node2->Node1 -m_svc Node3 extends< AthService, IKernelRunnerSvc > Node3->Node2 Node4 ServiceHandle< AthCUDA ::IStreamPoolSvc > Node4->Node2 -m_streamPoolSvc Node5 std::unique_ptr< AthCUDA ::KernelRunnerSvcImpl > + operator->() Node5->Node2 -m_impl Node6->Node5 +ptr Node7 AthCUDA::IStreamPoolSvc + DeclareInterfaceID() + isEmpty() + getAvailableStream() # yieldStream() Node7->Node6 -m_streamPool Node8 IService Node8->Node7