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