Untitled
unknown
plain_text
a year ago
2.0 kB
22
Indexable
#include <iostream>
#include <map>
#include <set>
#include <limits>
class GPUAllocator {
private:
std::map<int, int> processToGPU; // Map process ID to GPU ID
std::set<int> availableGPUs; // Set of available GPU IDs
public:
GPUAllocator() {
// Initialize with a large number of GPUs for example purposes
for (int i = 1; i <= std::numeric_limits<int>::max(); ++i) {
availableGPUs.insert(i);
}
}
void addProcess(int process_id) {
if (availableGPUs.empty()) {
std::cerr << "No available GPUs to allocate." << std::endl;
return;
}
int gpu_id = *availableGPUs.begin(); // Get the smallest available GPU ID
availableGPUs.erase(availableGPUs.begin()); // Remove it from available GPUs
processToGPU[process_id] = gpu_id; // Assign it to the process
}
void removeProcess(int process_id) {
auto it = processToGPU.find(process_id);
if (it != processToGPU.end()) {
int gpu_id = it->second;
availableGPUs.insert(gpu_id); // Add the GPU back to available GPUs
processToGPU.erase(it); // Remove the process from the map
} else {
std::cerr << "Process ID not found." << std::endl;
}
}
int smallestUnoccupied() {
if (availableGPUs.empty()) {
std::cerr << "No unoccupied GPUs available." << std::endl;
return -1; // Return an invalid ID to indicate no available GPUs
}
return *availableGPUs.begin(); // Return the smallest available GPU ID
}
};
int main() {
GPUAllocator allocator;
allocator.addProcess(5);
allocator.addProcess(2);
std::cout << "Smallest unoccupied GPU: " << allocator.smallestUnoccupied() << std::endl;
std::cout << "Smallest unoccupied GPU: " << allocator.smallestUnoccupied() << std::endl;
allocator.removeProcess(5);
std::cout << "Smallest unoccupied GPU: " << allocator.smallestUnoccupied() << std::endl;
return 0;
}
Editor is loading...
Leave a Comment