Ejemplo n.º 1
0
        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,
            });
        }
Ejemplo n.º 2
0
        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);
        }