| | |
| | | return suitable_gpu; |
| | | } |
| | | |
| | | int getGPUPrior(const int need, const int reserved, const int lastChoice){ |
| | | nvGpuInfo_t gpu_info; |
| | | |
| | | int ret = get_gpu_info(&gpu_info); |
| | | if(!ret){ |
| | | if (gpu_info.device_count == 0) return -1; |
| | | |
| | | int suitable_gpu = -1; |
| | | int mem_idle = need; |
| | | for(int i = 0; i < gpu_info.device_count; i++){ |
| | | if (i != lastChoice){ |
| | | int mem_free = gpu_info.devices[i].memory_free >> 20; |
| | | if(mem_free > mem_idle){ |
| | | mem_idle = mem_free; |
| | | suitable_gpu = i; |
| | | } |
| | | } |
| | | } |
| | | if (suitable_gpu != -1){ |
| | | return suitable_gpu; |
| | | }else{ |
| | | if (gpu_info.device_count <= lastChoice) return -1; |
| | | int mem_free = (gpu_info.devices[lastChoice].memory_free >> 20) - reserved; |
| | | if(mem_free > need){ |
| | | return lastChoice; |
| | | } |
| | | } |
| | | } |
| | | return -1; |
| | | } |
| | | |
| | | int getGPU(const int need){ |
| | | nvGpuInfo_t gpu_buf; |
| | | |
| | |
| | | |
| | | namespace gpu{ |
| | | int getGPU(const int need); |
| | | int getGPUPrior(const int need, const int reserved, const int lastChoice); |
| | | } |
| | | |
| | | #endif |
| | |
| | | for (int i = 0; i < 2; ++i) |
| | | { |
| | | if(hw_accl_){ |
| | | idle_gpu = gpu::getGPU(100); |
| | | idle_gpu = gpu::getGPUPrior(300, 1024, 0); |
| | | if(idle_gpu < 0){ |
| | | logIt("NO GPU RESOURCE TO DECODE"); |
| | | hw_accl_ = false; |