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