private void ReleaseCudaManager(CudaManager cudaManager) { LogUnDisposedCudaArrays(cudaManager.AllocationStats); int cudaManagersInUse; lock (_lock) { GpuPriority gpu = _sortedGpus.First(g => g.DeviceId == cudaManager.DeviceId); gpu.ReleaseCudaManager(cudaManager); cudaManagersInUse = gpu.CudaManagersInUse; } _logger.Debug("released cuda context for gpu {gpuOrderId} (deviceId={gpuDeviceId}). Gpu now has {gpuContextCount} contexts in use", new { gpuOrderId = cudaManager.OrderId, gpuDeviceId = cudaManager.DeviceId, gpuContextCount = cudaManagersInUse, }); }
public CudaManager GetCudaManagerForThread(ILogger log = null, int gpuNumber = -1) { int cudaManagersInUse; CudaManager cudaManager; lock (_lock) { _sortedGpus = GetSortedGpus(_sortedGpus, _preferFastest); GpuPriority gpu = gpuNumber == -1 ? _sortedGpus.First() : _originalGpus[gpuNumber]; cudaManager = gpu.GetCudaManager(disposeAction: manager => ReleaseCudaManager(manager)); cudaManagersInUse = gpu.CudaManagersInUse; } (log ?? _logger).Debug("acquired cuda context for gpu {gpuOrderId} (deviceId={gpuDeviceId}). Gpu now has {gpuContextCount} contexts in use", new { gpuOrderId = cudaManager.OrderId, gpuDeviceId = cudaManager.DeviceId, gpuContextCount = cudaManagersInUse, }); cudaManager.SetCurrent(); return(cudaManager); }