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)
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