docs: def nvmlDeviceGetCpuAffinity(handle, cpuSetSize):
      r"""
      /**
       * Retrieves an array of unsigned ints (sized to cpuSetSize) of bitmasks with the ideal CPU affinity for the device
       * For example, if processors 0, 1, 32, and 33 are ideal for the device and cpuSetSize == 2,
       *     result[0] = 0x3, result[1] = 0x3
       *
       * For Kepler &tm; or newer fully supported devices.
       * Supported on Linux only.
       *
       * @param device                               The identifier of the target device
       * @param cpuSetSize                           The size of the cpuSet array that is safe to access
       * @param cpuSet                               Array reference in which to return a bitmask of CPUs, 64 CPUs per
       *                                                 unsigned long on 64-bit machines, 32 on 32-bit machines
       *
       * @return
       *         - \ref NVML_SUCCESS                 if \a cpuAffinity has been filled
       *         - \ref NVML_ERROR_UNINITIALIZED     if the library has not been successfully initialized
       *         - \ref NVML_ERROR_INVALID_ARGUMENT  if \a device is invalid, cpuSetSize == 0, or cpuSet is NULL
       *         - \ref NVML_ERROR_NOT_SUPPORTED     if the device does not support this feature
       *         - \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
       */
      nvmlReturn_t DECLDIR nvmlDeviceGetCpuAffinity
      """
      affinity_array = c_ulonglong * cpuSetSize
      c_affinity = affinity_array()
      fn = _nvmlGetFunctionPointer("nvmlDeviceGetCpuAffinity")
      ret = fn(handle, cpuSetSize, byref(c_affinity))
      _nvmlCheckReturn(ret)
      return bytes_to_str(c_affinity)