This commit is contained in:
Matthias
2017-07-24 16:27:50 +02:00
parent ec80b339e2
commit 3d4bb80dae
46 changed files with 1388 additions and 158 deletions
+12 -8
View File
@@ -25,11 +25,12 @@ class AbstractResource {
public:
const ResourceClass resourceClass;
const std::string resourceIdentifier;
const wfr_id_t resourceId;
// Public Functions
public:
AbstractResource( ResourceClass resourceClass, const std::string& resourceIdentifier ) noexcept
: resourceClass(resourceClass), resourceIdentifier(resourceIdentifier) {}
AbstractResource( ResourceClass resourceClass, const std::string& resourceIdentifier, const wfr_id_t resourceId ) noexcept
: resourceClass(resourceClass), resourceIdentifier(resourceIdentifier), resourceId(resourceId) {}
virtual ~AbstractResource() {}
virtual bool hasCapability(const RequiredResourceCapability& type) const noexcept = 0;
@@ -100,8 +101,8 @@ public:
// Public Functions
public:
ResourceBase(ResourceClass resourceClass, const std::string& resourceIdentifier, RType& resourceType ) noexcept
: AbstractResource(resourceClass, resourceIdentifier), resourceType(resourceType) {}
ResourceBase(ResourceClass resourceClass, const std::string& resourceIdentifier, const wfr_id_t resourceId, RType& resourceType ) noexcept
: AbstractResource(resourceClass, resourceIdentifier, resourceId), resourceType(resourceType) {}
virtual bool hasCapability(const RequiredResourceCapability& type) const noexcept { return resourceType.hasCapability(type); }
virtual bool hasCapability(wfr::resource::ResourceCapabilityType type) const noexcept { return resourceType.hasCapability(type); }
@@ -138,17 +139,20 @@ protected:
// Public Functions
public:
ComputingResource( const std::string& resourceIdentifier, ComputingResourceType& resourceType ) noexcept
: ResourceBase(ResourceClass::ComputingResource, resourceIdentifier, resourceType) {
ComputingResource( const std::string& resourceIdentifier, const wfr_id_t resourceId, ComputingResourceType& resourceType ) noexcept
: ResourceBase(ResourceClass::ComputingResource, resourceIdentifier, resourceId, resourceType) {
resourceType.addResource(this);
}
wfr_size_t getMaxSlotCount() const noexcept { return resourceType.maxSlots; }
wfr_size_t getReservedSlotCount() const noexcept { return reservedSlots; }
wfr_size_t getBusySlotCount() const noexcept { return busySlots; }
wfr_size_t getFreeSlotCount() const noexcept { return resourceType.maxSlots - (busySlots + reservedSlots); }
wfr_size_t getFreeSlotCount() const noexcept {
auto nonFreeSlots = busySlots + reservedSlots;
return nonFreeSlots >= resourceType.maxSlots ? 0 : resourceType.maxSlots - nonFreeSlots;
}
bool reserveSlots(const wfr_size_t& slots) noexcept;
bool reserveSlots(const wfr_size_t& slots, bool requireFreeSlots = false) noexcept;
bool markReservedSlotsBusy(const wfr_size_t& slots) noexcept;
bool markFreeSlotsBusy(const wfr_size_t& slots) noexcept;
bool releaseBusySlots(const wfr_size_t& slots) noexcept;
+15 -1
View File
@@ -13,7 +13,13 @@
#include <wfr/common/types/ResourceTypes.h>
namespace wfr {
namespace wfs {
class AtomicActivityInstance;
}
namespace resource {
class AbstractResource;
@@ -32,6 +38,13 @@ private:
std::map<std::string, ComputingResourceType*> computingResourceTypes;
std::map<std::string, ComputingResource*> computingResources;
private:
static std::atomic<wfr_id_t> _nextResourceId;
static wfr_id_t getNextResourceId() {
return _nextResourceId.fetch_add(1);
}
// Non-public functions
private:
ResourceManager(std::string resourceConfigFile, bool cpuAutoConfig, bool printResourceTable);
@@ -53,11 +66,12 @@ public:
ComputingResource* getComputingResource(std::string identifier) const noexcept;
std::vector<ComputingResource*> filterComputingResources(std::vector<RequiredResourceCapability> filter) const noexcept;
ComputingResourceReservation reserveComputingResource(ComputingResource* device, const wfr_size_t& slots = 1) noexcept;
std::shared_ptr<ComputingResourceReservation> reserveComputingResource(ComputingResource* device, const wfr_size_t& slots, bool requireFreeSlots = false) noexcept;
bool releaseComputingResources(ComputingResourceReservation* handle) noexcept;
wfr_size_t getComputingResourceTypeCount() const noexcept { return computingResourceTypes.size(); }
std::vector<ComputingResourceType*> getComputingResourceTypes() const noexcept;
std::vector<ComputingResourceType*> getCompatibleComputingResourceTypes(wfs::AtomicActivityInstance* activity) const noexcept;
ComputingResourceType* getComputingResourceType(std::string name) const noexcept;
void printResourceTable(std::ostream& out) const noexcept;