docs: def nvmlDeviceGetComputeRunningProcesses(handle):
      r"""
      /**
       * Get information about processes with a compute context on a device
       *
       * For Fermi &tm; or newer fully supported devices.
       *
       * This function returns information only about compute running processes (e.g. CUDA application which have
       * active context). Any graphics applications (e.g. using OpenGL, DirectX) won't be listed by this function.
       *
       * To query the current number of running compute processes, call this function with *infoCount = 0. The
       * return code will be NVML_ERROR_INSUFFICIENT_SIZE, or NVML_SUCCESS if none are running. For this call
       * \a infos is allowed to be NULL.
       *
       * The usedGpuMemory field returned is all of the memory used by the application.
       *
       * Keep in mind that information returned by this call is dynamic and the number of elements might change in
       * time. Allocate more space for \a infos table in case new compute processes are spawned.
       *
       * @param device                               The identifier of the target device
       * @param infoCount                            Reference in which to provide the \a infos array size, and
       *                                             to return the number of returned elements
       * @param infos                                Reference in which to return the process information
       *
       * @return
       *         - \ref NVML_SUCCESS                 if \a infoCount and \a infos have been populated
       *         - \ref NVML_ERROR_UNINITIALIZED     if the library has not been successfully initialized
       *         - \ref NVML_ERROR_INSUFFICIENT_SIZE if \a infoCount indicates that the \a infos array is too small
       *                                             \a infoCount will contain minimal amount of space necessary for
       *                                             the call to complete
       *         - \ref NVML_ERROR_INVALID_ARGUMENT  if \a device is invalid, either of \a infoCount or \a infos is NULL
       *         - \ref NVML_ERROR_GPU_IS_LOST       if the target GPU has fallen off the bus or is otherwise inaccessible
       *         - \ref NVML_ERROR_UNKNOWN           on any unexpected error
       *
       * @see \ref nvmlSystemGetProcessName
       */
      nvmlReturn_t DECLDIR nvmlDeviceGetComputeRunningProcesses
      """
      # first call to get the size
      c_count = c_uint(0)
      fn = _nvmlGetFunctionPointer("nvmlDeviceGetComputeRunningProcesses")
      ret = fn(handle, byref(c_count), None)
  
      if (ret == NVML_SUCCESS):
          # special case, no running processes
          return []
      elif (ret == NVML_ERROR_INSUFFICIENT_SIZE):
          # typical case
          # oversize the array incase more processes are created
          c_count.value = c_count.value * 2 + 5
          proc_array = c_nvmlProcessInfo_t * c_count.value
          c_procs = proc_array()
  
          # make the call again
          ret = fn(handle, byref(c_count), c_procs)
          _nvmlCheckReturn(ret)
  
          procs = []
          for i in range(c_count.value):
              # use an alternative struct for this object
              obj = nvmlStructToFriendlyObject(c_procs[i])
              if (obj.usedGpuMemory == NVML_VALUE_NOT_AVAILABLE_ulonglong.value):
                  # special case for WDDM on Windows, see comment above
                  obj.usedGpuMemory = None
              procs.append(obj)
  
          return procs
      else:
          # error case
          raise NVMLError(ret)