Uni20
Asynchronous tensor and runtime library.
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Friends | List of all members
uni20::cuda::ResourcePool< Resource > Class Template Reference

Fixed-capacity pool of preconstructed provider resources. More...

#include <resource_pool.hpp>

Public Types

using lease_type = ResourceLease< Resource >
 
using resource_type = Resource
 
using waiter_type = detail::ResourceWaiter< Resource >
 

Public Member Functions

lease_type acquire ()
 Block until one resource can be leased.
 
std::optional< lease_type > acquire_or_enqueue (waiter_type &waiter) noexcept
 Register an internal awaiter unless a resource is immediately available.
 
std::size_t idle_count () const noexcept
 Return the number of resources currently available for acquisition.
 
ResourcePool & operator= (ResourcePool &&)=delete
 
ResourcePool & operator= (ResourcePool const &)=delete
 
 ResourcePool (ResourcePool &&)=delete
 
 ResourcePool (ResourcePool const &)=delete
 
 ResourcePool (std::vector< Resource > resources)
 Take ownership of the resources that form this pool's slots.
 
std::size_t size () const noexcept
 Return the fixed number of resource slots.
 
std::optional< lease_type > try_acquire ()
 Try to acquire one idle resource without waiting.
 
 ~ResourcePool ()
 

Friends

class ResourceLease< Resource >
 

Detailed Description

template<class Resource>
class uni20::cuda::ResourcePool< Resource >

Fixed-capacity pool of preconstructed provider resources.

Non-blocking waiters receive released resources in FIFO order. The pool is independent of scheduler and CUDA stream policy and must outlive all leases and queued acquisition awaiters.

Member Typedef Documentation

◆ lease_type

template<class Resource >
using uni20::cuda::ResourcePool< Resource >::lease_type = ResourceLease<Resource>

◆ resource_type

template<class Resource >
using uni20::cuda::ResourcePool< Resource >::resource_type = Resource

◆ waiter_type

template<class Resource >
using uni20::cuda::ResourcePool< Resource >::waiter_type = detail::ResourceWaiter<Resource>

Constructor & Destructor Documentation

◆ ResourcePool() [1/3]

template<class Resource >
uni20::cuda::ResourcePool< Resource >::ResourcePool ( std::vector< Resource >  resources)
inlineexplicit

Take ownership of the resources that form this pool's slots.

◆ ResourcePool() [2/3]

template<class Resource >
uni20::cuda::ResourcePool< Resource >::ResourcePool ( ResourcePool< Resource > const &  )
delete

◆ ResourcePool() [3/3]

template<class Resource >
uni20::cuda::ResourcePool< Resource >::ResourcePool ( ResourcePool< Resource > &&  )
delete

◆ ~ResourcePool()

template<class Resource >
uni20::cuda::ResourcePool< Resource >::~ResourcePool ( )
inline

Member Function Documentation

◆ acquire()

template<class Resource >
lease_type uni20::cuda::ResourcePool< Resource >::acquire ( )
inline

Block until one resource can be leased.

◆ acquire_or_enqueue()

template<class Resource >
std::optional< lease_type > uni20::cuda::ResourcePool< Resource >::acquire_or_enqueue ( waiter_type &  waiter)
inlinenoexcept

Register an internal awaiter unless a resource is immediately available.

◆ idle_count()

template<class Resource >
std::size_t uni20::cuda::ResourcePool< Resource >::idle_count ( ) const
inlinenoexcept

Return the number of resources currently available for acquisition.

◆ operator=() [1/2]

template<class Resource >
ResourcePool & uni20::cuda::ResourcePool< Resource >::operator= ( ResourcePool< Resource > &&  )
delete

◆ operator=() [2/2]

template<class Resource >
ResourcePool & uni20::cuda::ResourcePool< Resource >::operator= ( ResourcePool< Resource > const &  )
delete

◆ size()

template<class Resource >
std::size_t uni20::cuda::ResourcePool< Resource >::size ( ) const
inlinenoexcept

Return the fixed number of resource slots.

◆ try_acquire()

template<class Resource >
std::optional< lease_type > uni20::cuda::ResourcePool< Resource >::try_acquire ( )
inline

Try to acquire one idle resource without waiting.

Friends And Related Symbol Documentation

◆ ResourceLease< Resource >

template<class Resource >
friend class ResourceLease< Resource >
friend

The documentation for this class was generated from the following file: