o
    װid                    @   sX  d Z ddlT ddlZddlZddlZddlmZ dZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHZJdIZKdJZLdKZMdLZNdMZOdNZPdOZQdPZRdQZSdRZTdSZUdTZVdUZWdVZXdWZYdXZZdYZ[dZZ\d[Z]d\Z^d]Z_d^Z`d_Zad`ZbdaZcdbZddcZeddZfdeZgdfZhdgZidhZjdiZkdjZldkZmdlZndmZodnZpdoZqdpZrdqZsdrZtdsZudtZvduZwdvZxdwZydxZzdyZ{dzZ|d{Z}d|Z~d}Zd~ZdZdZi dede	de
dedededededededededededededei dededededededededededede de"de"de#de$de%i de%de&de&de'de'de(de)de_de`deadebdecdeddeedefdegdehi de*de,de+de-de/de0de3de4de5de6de7de8de9de:de;de<de>i de?de@de=deAdeBdeCdeDdeEdeGdeHdeIdeFdeJdeKdeLdeMdeNi dePdeQdeRdeOdeSdeTdeUdeVdeWdeYdeZde[deXde\de\de]de]i de^deidejdekdeldemdendeodepdeqderderdesdesdetdetdeui deudevdevdewdewdexdexdeyd eydezdezde{de{de|de|dede}e~eeedZi ed	ed
edededededededededededededededZG dd dZedkr*dd Ze  dS dS (  a  
nvidia_smi

Sample code that attempts to reproduce the output of nvidia-smi -q -x
For many cases the output should match.
Each query parameter is documented within nvdia-smi --help-query-gpu

From Code:
DeviceQuery()
DeviceQuery("--help")
DeviceQuery("--help-query-gpu")
DeviceQuery("pci.bus_id,memory.total,memory.free")
DeviceQuery([NVSMI_PCI_BUS_ID, NVSMI_MEMORY_TOTAL, NVSMI_MEMORY_FREE])

XmlDeviceQuery()
XmlDeviceQuery("--help")
XmlDeviceQuery("--help-query-gpu")
    )*N)Thread                        	   
                                                                         !   2   3   4   5   6   <   =   >   ?   i  i  i  F   G   P   Q   R   S   T   U   V   W   X   Z   [   \   ]   ^   _   `   a   b   d   e   f   g   h   i   j   k   l   n   o   p   q   r   s   t   u   v   x   y   z                                                                                                               	timestampdriver_versioncountnamegpu_nameserial
gpu_serialuuidgpu_uuidz
pci.bus_id
gpu_bus_idz
pci.domainzpci.busz
pci.devicezpci.device_idzpci.sub_device_idzpcie.link.gen.currentzpcie.link.gen.maxzpcie.link.width.currentzpcie.link.width.maxindexdisplay_modedisplay_activepersistence_modezaccounting.modezaccounting.buffer_sizezdriver_model.currentzdriver_model.pendingvbios_versionzinforom.imgzinforom.imagezinforom.oemzinforom.ecczinforom.pwrzinforom.powerzgom.currentzgpu_operation_mode.currentzgom.pendingzgpu_operation_mode.pendingz	fan.speedpstatez!clocks_throttle_reasons.supportedzclocks_throttle_reasons.activez clocks_throttle_reasons.gpu_idlez3clocks_throttle_reasons.applications_clocks_settingz$clocks_throttle_reasons.sw_power_capz#clocks_throttle_reasons.hw_slowdownz+clocks_throttle_reasons.hw_thermal_slowdownz/clocks_throttle_reasons.hw_power_brake_slowdownz+clocks_throttle_reasons.sw_thermal_slowdownz"clocks_throttle_reasons.sync_boostzmemory.totalzmemory.usedzmemory.freecompute_modezutilization.gpuzutilization.memoryzencoder.stats.sessionCountzencoder.stats.averageFpszencoder.stats.averageLatencyzecc.mode.currentzecc.mode.pendingz+ecc.errors.corrected.volatile.device_memoryz+ecc.errors.corrected.volatile.register_filez&ecc.errors.corrected.volatile.l1_cachez&ecc.errors.corrected.volatile.l2_cachez,ecc.errors.corrected.volatile.texture_memoryz"ecc.errors.corrected.volatile.dramz"ecc.errors.corrected.volatile.sramz!ecc.errors.corrected.volatile.cbuz#ecc.errors.corrected.volatile.totalz,ecc.errors.corrected.aggregate.device_memoryz,ecc.errors.corrected.aggregate.register_filez'ecc.errors.corrected.aggregate.l1_cachez'ecc.errors.corrected.aggregate.l2_cachez-ecc.errors.corrected.aggregate.texture_memoryz#ecc.errors.corrected.aggregate.dramz"ecc.errors.corrected.aggregate.cbuz#ecc.errors.corrected.aggregate.sramz$ecc.errors.corrected.aggregate.totalz-ecc.errors.uncorrected.volatile.device_memoryz-ecc.errors.uncorrected.volatile.register_filez(ecc.errors.uncorrected.volatile.l1_cachez(ecc.errors.uncorrected.volatile.l2_cachez.ecc.errors.uncorrected.volatile.texture_memoryz$ecc.errors.uncorrected.volatile.dramz#ecc.errors.uncorrected.volatile.cbuz$ecc.errors.uncorrected.volatile.sramz%ecc.errors.uncorrected.volatile.totalz.ecc.errors.uncorrected.aggregate.device_memoryz.ecc.errors.uncorrected.aggregate.register_filez)ecc.errors.uncorrected.aggregate.l1_cachez)ecc.errors.uncorrected.aggregate.l2_cachez/ecc.errors.uncorrected.aggregate.texture_memoryz%ecc.errors.uncorrected.aggregate.dramz$ecc.errors.uncorrected.aggregate.cbuz%ecc.errors.uncorrected.aggregate.sramz&ecc.errors.uncorrected.aggregate.totalz"retired_pages.single_bit_ecc.countzretired_pages.sbezretired_pages.double_bit.countzretired_pages.dbezretired_pages.pendingztemperature.gpuztemperature.memoryzpower.managementz
power.drawzpower.limitzenforced.power.limitzpower.default_limitzpower.min_limitzpower.max_limitzclocks.current.graphicsz	clocks.grzclocks.current.smz	clocks.smzclocks.current.memoryz
clocks.memzclocks.current.videozclocks.videozclocks.applications.graphicszclocks.applications.grzclocks.applications.memoryzclocks.applications.memz$clocks.default_applications.graphicszclocks.default_applications.grz"clocks.default_applications.memoryzclocks.default_applications.memzclocks.max.graphicszclocks.max.grzclocks.max.smzclocks.max.memoryzclocks.max.memzsupported-clockszcompute-apps)zaccounted-appsclockszmig.mode.currentzmig.mode.pendingUnknownQuadroTeslaNVSGridGeForceTitanzNVIDIA Virtual ApplicationszNVIDIA Virtual PCzNVIDIA Virtual Compute ServerzNVIDIA RTX Virtual WorkstationzNVIDIA vGamingz
Quadro RTXz
NVIDIA RTXNVIDIAzGeforce RTXz	Titan RTXc                   @   sL  e Zd ZdZdZG dd dZedd Zed9ddZd	d
 Z	edd Z
dd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed:d/d0Zed:d1d2Zd3d4 Zd5d6 Z d7d8 Z!dS );
nvidia_smiNc                   @   s\   e Zd ZdZdZdZdZdddZdd Ze	ddd	Z
d
d Zdd Zdd Zdd ZdS )znvidia_smi.loop_asyncNFr   c                 C   s8   d| _ || _ttjj| ||tjjfd| _| j  d S )NF)targetargs)	_loop_async__abort_loop_async__callback_chainr   r   
loop_async_loop_async__loop_task_loop_async__callback_loop_async__taskstart)selftime_in_millisecondsfiltercallback r   >/home/ubuntu/.local/lib/python3.10/site-packages/pynvml/smi.py__init__  s   znvidia_smi.loop_async.__init__c                 C   s   d| _ d | _d S NT)r   r   r   r   r   r   __del__  s   
znvidia_smi.loop_async.__del__c                 C   s\   |d }t  }|  dkr,||}|| _|d ur|| | t| |  dksd S d S )Ni  F)r   getInstance
is_abortedDeviceQuery_loop_async__last_resultstimesleep)async_resultsr   r   r   delay_secondsnvsmiresultsr   r   r   __loop_task  s   


z!nvidia_smi.loop_async.__loop_taskc                 C   s$   || _ | jd ur| | | d S d S N)_loop_async__last_resultr   )r   resultr   r   r   
__callback  s   
z nvidia_smi.loop_async.__callbackc                 C   s"   d| _ | jd ur| j  d S d S r   )r   r   joinr   r   r   r   cancel  s   
znvidia_smi.loop_async.cancelc                 C      | j S r   )r   r   r   r   r   r        z nvidia_smi.loop_async.is_abortedc                 C   r   r   )r   r   r   r   r   r     r   znvidia_smi.loop_async.resultr   NN)__name__
__module____qualname__r   r   r   r   r   r   staticmethodr   r   r   r   r   r   r   r   r   r   {  s    
r   c                   C   s   t jdkrt   t jS )z Static access method. N)r   _nvidia_smi__instancer   r   r   r   r     s   
znvidia_smi.getInstancer   c                 C   s   t | ||S r   )r   r   )r   r   r   r   r   r   loop  s   znvidia_smi.loopc                 C   s4   t jdkr	td| t _t jdkrt  t _dS dS )z  Virtually private constructor. Nz,This class is a singleton, use getInstance())r   r   	Exception_nvidia_smi__handles_nvidia_smi__initialize_nvmlr   r   r   r   r     s   

znvidia_smi.__init__c                  C   s0   t   t } i }td| D ]}t|||< q|S )z Initialize NVML bindings. r   )nvmlInitnvmlDeviceGetCountrangenvmlDeviceGetHandleByIndex)deviceCounthandlesir   r   r   __initialize_nvml  s   znvidia_smi.__initialize_nvmlc                 C   s6   t jd krt j| krt `d t _d t _t  d S d S d S r   )r   r   r   nvmlShutdownr   r   r   r   r     s   
znvidia_smi.__del__c                 C   s:   |  d}g }|D ]}| }|tv r|t|  q	|S )N,)splitstripNVSMI_QUERY_GPUappend)queryString
parametersvaluesppsr   r   r   __fromDeviceQueryString  s   
z"nvidia_smi.__fromDeviceQueryStringc              
   C   s$  d}z	t | ||t}W n ty" } zt|}W Y d }~nd }~ww |dt| d 7 }z	t | ||t}W n tyN } zt|}W Y d }~nd }~ww |dt| d 7 }z	t | ||t}W n tyz } zt|}W Y d }~nd }~ww |dt| d 7 }z	t | ||t}W n ty } zt|}W Y d }~nd }~ww |dt| d	 7 }z	t | ||t	}W n ty } zt|}W Y d }~nd }~ww |d
t| d 7 }z	t | ||t
}	W n ty } zt|}	W Y d }~nd }~ww |dt|	 d 7 }z	t | ||t}W n ty+ } zt|}W Y d }~nd }~ww |dt| d 7 }z	t | ||t}W n tyX } zt|}W Y d }~nd }~ww |dt| d 7 }ztt| ||}
W n ty } zt|}
W Y d }~nd }~ww |d|
 d 7 }|S )N z          <device_memory>z</device_memory>
z          <dram>z</dram>
z          <register_file>z</register_file>
z          <l1_cache>z</l1_cache>
z          <l2_cache>z</l2_cache>
z          <texture_memory>z</texture_memory>
z          <cbu>z</cbu>
z          <sram>z</sram>
z          <total>	</total>
)nvmlDeviceGetMemoryErrorCounter"NVML_MEMORY_LOCATION_DEVICE_MEMORY	NVMLErrorr   _nvidia_smi__handleError_nvidia_smi__toStringNVML_MEMORY_LOCATION_DRAM"NVML_MEMORY_LOCATION_REGISTER_FILENVML_MEMORY_LOCATION_L1_CACHENVML_MEMORY_LOCATION_L2_CACHE#NVML_MEMORY_LOCATION_TEXTURE_MEMORYNVML_MEMORY_LOCATION_CBUNVML_MEMORY_LOCATION_SRAMnvmlDeviceGetTotalEccErrors)handlecounterType	errorType	strResultdeviceMemoryerrregisterFilel1Cachel2CachetextureMemoryr   r   r   r   __xmlGetEccByType  s   znvidia_smi.__xmlGetEccByTypec              
   C   s  d}i }z	t | ||t}W n ty$ } zt|}W Y d }~nd }~ww ||d< z	t | ||t}W n tyI } zt|}W Y d }~nd }~ww ||d< z	t | ||t}W n tyn } zt|}W Y d }~nd }~ww ||d< z	t | ||t}W n ty } zt|}W Y d }~nd }~ww ||d< z	t | ||t}	W n ty } zt|}	W Y d }~nd }~ww |	|d< z	t | ||t	}
W n ty } zt|}
W Y d }~nd }~ww |
|d< z	t | ||t
}W n ty } zt|}W Y d }~nd }~ww ||d< z	t | ||t}W n ty) } zt|}W Y d }~nd }~ww ||d	< ztt| ||}W n tyQ } zt|}W Y d }~nd }~ww ||d
< |S )Nr   device_memorydramregister_filel1_cachel2_cachetexture_memorycbusramtotal)r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   	eccByTyper   r   r   r   r   r   r   r   r   r   __GetEccByType'  s   znvidia_smi.__GetEccByTypec                 C   s  d}t |v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt	|v sRt
|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v rf|d7 }|tt| |t7 }|d7 }t |v st|v st|v st|v st|v st|v st|v st|v st|v st|v st	|v st
|v st|v st|v st|v st|v st|v st|v st|v st|v r|d7 }|tt| |t7 }|d7 }|S )Nr   z        <single_bit>
z        </single_bit>
z        <double_bit>
z        </double_bit>
)	NVSMI_ALL*NVSMI_ECC_ERROR_CORRECTED_VOLATILE_DEV_MEM*NVSMI_ECC_ERROR_CORRECTED_VOLATILE_REGFILE*NVSMI_ECC_ERROR_CORRECTED_VOLATILE_L1CACHE*NVSMI_ECC_ERROR_CORRECTED_VOLATILE_L2CACHE*NVSMI_ECC_ERROR_CORRECTED_VOLATILE_TEXTURE'NVSMI_ECC_ERROR_CORRECTED_VOLATILE_DRAM'NVSMI_ECC_ERROR_CORRECTED_VOLATILE_SRAM&NVSMI_ECC_ERROR_CORRECTED_VOLATILE_CBU(NVSMI_ECC_ERROR_CORRECTED_VOLATILE_TOTAL+NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_DEV_MEM+NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_REGFILE+NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_L1CACHE+NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_L2CACHE+NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_TEXTURE(NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_DRAM'NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_CBU(NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_SRAM)NVSMI_ECC_ERROR_CORRECTED_AGGREGATE_TOTALr   r   _nvidia_smi__xmlGetEccByType NVML_MEMORY_ERROR_TYPE_CORRECTED"NVML_MEMORY_ERROR_TYPE_UNCORRECTEDr   r   r   eccByCounterr   r   r   __xmlGetEccByCounterq  s`   znvidia_smi.__xmlGetEccByCounterc                 C   sd  i }t |v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt	|v sRt
|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v sRt|v r[t| |t|d< t |v st|v st|v st|v st|v st|v st|v st|v st|v st	|v st
|v st|v st|v st|v st|v st|v st|v st|v st|v rt| |t|d< |S )N
single_bit
double_bit)r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r   _nvidia_smi__GetEccByTyper  r  r  r   r   r   __GetEccByCounter  sV   znvidia_smi.__GetEccByCounterc                 C   s  d}d}t |v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt	|v sPt
|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v rf|d7 }|tt| t|7 }|d7 }d}t |v st|v st|v st|v st|v st|v st|v st|v st|v st|v st |v st!|v st"|v st#|v st$|v st%|v st&|v st'|v st(|v r|d7 }|tt| t)|7 }|d7 }d}t*|dkr||fS d |fS )	Nr   Fz      <volatile>
z      </volatile>
Tz      <aggregate>
z      </aggregate>
r   )+r  r  r  r  r  r  r  r  r	  r
  ,NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_DEV_MEM,NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_REGFILE,NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_L1CACHE,NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_L2CACHE,NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_TEXTURE)NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_DRAM)NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_SRAM(NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_CBU*NVSMI_ECC_ERROR_UNCORRECTED_VOLATILE_TOTALr   r   _nvidia_smi__xmlGetEccByCounterNVML_VOLATILE_ECCr  r  r  r  r  r  r  r  r  -NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_DEV_MEM-NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_REGFILE-NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_L1CACHE-NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_L2CACHE-NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_TEXTURE*NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_DRAM*NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_SRAM)NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_CBU+NVSMI_ECC_ERROR_UNCORRECTED_AGGREGATE_TOTALNVML_AGGREGATE_ECClenr   r   ecc
includeEccr   r   r   __xmlGetEcc  sb   znvidia_smi.__xmlGetEccc                 C   s  i }d}t |v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt	|v sPt
|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v sPt|v r[t| t||d< d}t |v st|v st|v st|v st|v st|v st|v st|v st|v st|v st|v st |v st!|v st"|v st#|v st$|v st%|v st&|v st'|v rt| t(||d< d}t)|* dkr||fS d |fS )NFvolatileT	aggregater   )+r  r  r  r  r  r  r  r  r	  r
  r  r  r   r!  r"  r#  r$  r%  r&  r   _nvidia_smi__GetEccByCounterr(  r  r  r  r  r  r  r  r  r  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r   r4  r   r   r   __GetEcc  sZ    znvidia_smi.__GetEccc              
   C   s   d}d }d}zt | |}ttt|}W n ty- } zt|}d }W Y d }~nd }~ww |dt| d 7 }|d urU|d7 }|D ]}|dd|  d 7 }qC|d	7 }n|d
| d 7 }|dkrc|S dS )Nr   r   z        <retired_count>z</retired_count>
z!        <retired_page_addresses>
z           <retired_page_address>0x%016xz</retired_page_address>
z"        </retired_page_addresses>
z         <retired_page_addresses>z</retired_page_addresses>
)nvmlDeviceGetRetiredPagessummapr3  r   r   r   r   )r   causeretiredPagedByCauseerrorr   pagesr   pager   r   r   __xmlGetRetiredPagesByCause?  s&   


z&nvidia_smi.__xmlGetRetiredPagesByCausec           
   
   C   s   i }d }d}zt | |}W n ty& } zt|}d }W Y d }~nd }~ww i }|d urFd}|D ]}	d|	 |dt| < |d7 }|d7 }q1|d urN||d< ||d< t| dkr\|nd |d< |dkrf|S d S )Nr   r   r<  retired_page_address_Errorretired_countretired_page_addresses)r=  r   r   r   strr3  r   )
r   r@  rA  rB  r   rC  r   retiredPageAddressesiirD  r   r   r   __GetRetiredPagesByCauseW  s,   

z#nvidia_smi.__GetRetiredPagesByCausec              
   C   s  d}d}ddg}t tD ]4}t|v s"t|v r|dks"t|v r@|dkr@|d||  d 7 }|t| |7 }|d	||  d 7 }d
}qt|v sIt|v r~|d7 }ztt	| krY|d7 }n|d7 }W n t
yw } z|t|7 }W Y d }~nd }~ww |d7 }d
}t|dkr||fS d |fS )Nr   Fmultiple_single_bit_retirementdouble_bit_retirementr   r   z      <z>
z      </Tz      <pending_retirement>NoYesz</pending_retirement>
)r    NVML_PAGE_RETIREMENT_CAUSE_COUNTr  'NVSMI_RETIREDPAGES_SINGLE_BIT_ECC_COUNT'NVSMI_RETIREDPAGES_DOUBLE_BIT_ECC_COUNTr   &_nvidia_smi__xmlGetRetiredPagesByCauseNVSMI_RETIREDPAGES_PENDINGNVML_FEATURE_DISABLED&nvmlDeviceGetRetiredPagesPendingStatusr   r   r3  )r   r   retiredPagesincludeRetiredPagescausesidxr   r   r   r   __xmlGetRetiredPagesr  s4   
znvidia_smi.__xmlGetRetiredPagesc              
   C   s   i }d}ddg}t tD ]"}t|v s"t|v r|dks"t|v r.|dkr.t| |||| < d}qt|v s7t|v rdd}ztt	| krCd}nd	}W n t
y] } zt|}W Y d }~nd }~ww ||d
< d}t| dkrp||fS d |fS )NFrN  rO  r   r   Tr   rP  rQ  pending_retirement)r   rR  r  rS  rT  r   #_nvidia_smi__GetRetiredPagesByCauserV  rW  rX  r   r   r3  r   )r   r   rY  rZ  r[  r\  r^  r   r   r   r   __GetRetiredPages  s0    znvidia_smi.__GetRetiredPagesc                 C   s(   | t krdS | tkrdS | tkrdS dS )NzAll OnComputezLow Double Precisionr   )NVML_GOM_ALL_ONNVML_GOM_COMPUTENVML_GOM_LOW_DP)moder   r   r   
__toStrGOM  s   znvidia_smi.__toStrGOMc           	   
   C   s   t dgtdgtdgtdgtdgtdgg}d}z6t| }t| }|d7 }|D ] \}}|dkrE||@ r:||@ r7d	nd
}nd}|d|||f 7 }q%|d7 }W |S  tyh } z|dt	
| 7 }W Y d }~|S d }~ww )Nclocks_throttle_reason_gpu_idle*clocks_throttle_reason_user_defined_clocks2clocks_throttle_reason_applications_clocks_setting#clocks_throttle_reason_sw_power_cap"clocks_throttle_reason_hw_slowdownclocks_throttle_reason_noner   z    <clocks_throttle_reasons>
Active
Not ActiveN/Az      <%s>%s</%s>
z    </clocks_throttle_reasons>
z:    <clocks_throttle_reasons>%s</clocks_throttle_reasons>
)nvmlClocksThrottleReasonGpuIdle)nvmlClocksThrottleReasonUserDefinedClocks1nvmlClocksThrottleReasonApplicationsClocksSetting"nvmlClocksThrottleReasonSwPowerCap"nvmlClocksThrottleReasonHwSlowdownnvmlClocksThrottleReasonNone+nvmlDeviceGetSupportedClocksThrottleReasons)nvmlDeviceGetCurrentClocksThrottleReasonsr   r   r   )	r   throttleReasonsr   supportedClocksThrottleReasonsclocksThrottleReasonsmaskr   valr   r   r   r   __xmlGetClocksThrottleReasons  s4   	
z(nvidia_smi.__xmlGetClocksThrottleReasonsc           	   
   C   s   t dgtdgtdgtdgtdgtdgg}i }z(t| }t| }|D ]\}}|dkr<||@ r6||@ r3dnd}nd	}|||< q!W n tyW } zt	
||d
< W Y d }~nd }~ww t| dkrb|S d S )Nrg  rh  ri  rj  rk  rl  rm  rn  ro  rG  r   )rp  rq  rr  rs  rt  ru  rv  rw  r   r   r   r3  r   )	r   rx  clockThrottleReasonsry  rz  r{  r   r|  r   r   r   r   __GetClocksThrottleReasons  s0   	z%nvidia_smi.__GetClocksThrottleReasonsc                 C   s   | j tkrdS |  S )Nro  )valueNVML_ERROR_NOT_SUPPORTED__str__)r   r   r   r   __handleError  s   
znvidia_smi.__handleErrorc                 C   s   t | tr
| dS t| S )Nzutf-8)
isinstancebytesdecoderJ  )r|  r   r   r   
__toString  s   

znvidia_smi.__toStringc           |      C   s'  |du rt g}n9t|tr=|dks|dkrtjjS |dkr7tdd}| W  d   S 1 s1w   Y  n
t|}nt	|}d}zc|d7 }|d	7 }|d
7 }t |v sYt
|v rg|dttj  d 7 }t |v sot|v r{|dtt  d 7 }t }t |v st|v r|dt| d 7 }td|D ]}| j| }t|}d}t |v st|v r|d|j 7 }t |v st|v r|dtt| d 7 }ztt| }	W n ty }
 zt|
}	W Y d}
~
nd}
~
ww |d|	 d 7 }t |v st|v r'zt|dkrdnd}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d| d 7 }t |v s1t |v r_zt!|dkr;dnd}W n tyV }
 zt|
}W Y d}
~
nd}
~
ww |d| d 7 }t |v sit"|v rzt#|dkrsdnd}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d| d 7 }t |v st$|v rzt%|dkrdnd}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d| d  7 }t |v st&|v rz	tt'|}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d!| d" 7 }d}d#}t |v st(|v st)|v r]zt*|\}}|t+kr$dnd}|t+kr-dnd}W n tyJ }
 zt|
}|}W Y d}
~
nd}
~
ww |d$| d% 7 }|d&| d' 7 }d(}|rl|d)7 }||7 }|d*7 }d}d#}t |v szt,|v rzt-|t.krd+nd,}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d-| d. 7 }d(}t |v st/|v rzt0|t.krd+nd,}W n" ty }
 zt|
}|d/| d0 7 }d(}W Y d}
~
nd}
~
ww |r|d17 }||7 }|d27 }t |v st1|v r'zt2|}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d3t| d4 7 }t |v s1t3|v r[zt4|}W n tyO }
 zt|
}W Y d}
~
nd}
~
ww |d5t| d6 7 }t |v set5|v rzt6|}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d7t| d8 7 }t |v st7|v rzt8|}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d9t| d: 7 }t |v st7|v rzt9|}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |d;kr|d<7 }n|r|d=7 }n|d>7 }t |v st:|v r@zt;|}W n ty* }
 zt|
}W Y d}
~
nd}
~
ww zd?| }W n   |}Y |d@| dA 7 }d}d#}t |v sNt<|v rzzt=|}W n tyl }
 zt|
}W Y d}
~
nd}
~
ww |dBt| dC 7 }d(}t |v st>|v rzt?|t@}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |dDt| dE 7 }d(}t |v stA|v rzt?|tB}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |dFt| dG 7 }d(}t |v stC|v rzt?|tD} W n ty }
 zt|
} W Y d}
~
nd}
~
ww |dHt|  dI 7 }d(}|r.|dJ7 }||7 }|dK7 }d}!d#}"t |v s<tE|v rkz	tFtG|}W n ty] }
 zt|
}W Y d}
~
nd}
~
ww |!dLt| dM 7 }!d(}"t |v sutH|v rz	tFtI|}W n ty }
 zt|
}W Y d}
~
nd}
~
ww |!dNt| dO 7 }!d(}"|"r|dP7 }||!7 }|dQ7 }d}#d#}$t |v stJ|v r|#dR|jK 7 }#d(}$t |v stL|v r|#dS|jM 7 }#d(}$t |v stN|v r|#dT|jO 7 }#d(}$t |v stP|v r|#dU|jQ 7 }#d(}$t |v st|v r|#dVt|j dW 7 }#d(}$t |v s%tR|v r.|#dX|jS 7 }#d(}$d}%d#}&d}'d#}(t |v s@tT|v rlz	ttU|})W n tya }
 zt|
})W Y d}
~
nd}
~
ww |'dY|) dZ 7 }'d(}(t |v svtV|v rz	ttW|})W n ty }
 zt|
})W Y d}
~
nd}
~
ww |'d[|) d\ 7 }'d(}(|(r|%d]7 }%|%|'7 }%|%d^7 }%d(}&d}*d#}+t |v stX|v rzttY|d_ },W n ty }
 zt|
},W Y d}
~
nd}
~
ww |*d`|, da 7 }*d(}+t |v stZ|v r'ztt[|d_ },W n ty }
 zt|
},W Y d}
~
nd}
~
ww |*db|, dc 7 }*d(}+|+r8|%dd7 }%|%|*7 }%|%de7 }%d(}&|&rG|#df7 }#|#|%7 }#|#dg7 }#d}-d#}.t |v rz<t\|}/d}0|/j]d j^dkre|0dh7 }0n|0di7 }0|-dj|0 dk 7 }-|/j]d j_dkr}d;}1ndl|/j]d j_ }1|-dm|1 7 }-W n) ty }
 z|-djt|
 dk 7 }-|-dnt|
 do 7 }-W Y d}
~
nd}
~
ww d(}.|.r|#dp7 }#|#|-7 }#|#dq7 }#t |v rzt`|}2|#drt|2 ds 7 }#W n ty }
 z|#drt|
 ds 7 }#W Y d}
~
nd}
~
ww d(}$t |v r8zta|tb}3|#dtt|3 du dv 7 }#W n ty5 }
 z|#dtt|
 dv 7 }#W Y d}
~
nd}
~
ww d(}$t |v rrzta|tc}4|#dwt|4 du dx 7 }#W n tyo }
 z|#dwt|
 dx 7 }#W Y d}
~
nd}
~
ww d(}$|$r|dy7 }||#7 }|dz7 }t |v std|v rztte|d{ }5W n ty }
 zt|
}5W Y d}
~
nd}
~
ww |d||5 d} 7 }t |v stf|v rz
tg|}6d~|6 }7W n ty }
 zt|
}7W Y d}
~
nd}
~
ww |d|7 d 7 }t |v 	s#th|v 	s#ti|v 	s#tj|v 	s#tk|v 	s#tl|v 	s#tm|v 	s#tn|v 	s#to|v 	s#tp|v 	s#tq|v 	r*|tr|7 }d}8d#}9t |v 	sBts|v 	sBtt|v 	sBtu|v 	rd(}9z1tv|}:t|:jwd d d };t|:jxd d d }<t|:jwd d |:jxd d  d }=W n t	y }
 zt|
}>|>};|>}<|>}=W Y d}
~
nd}
~
ww t |v 	sts|v 	r|8d|; d 7 }8t |v 	stt|v 	r|8d|< d 7 }8t |v 	stu|v 	r|8d|= d 7 }8|9	r|d7 }||87 }|d7 }t |v 	sty|v 
rSz1tz|}:t|:j{d d d };t|:j|d d d }<t|:j{d d |:j|d d  d }=W n t
y2 }
 zt|
}>|>};|>}<|>}=W Y d}
~
nd}
~
ww |d7 }|d|; d 7 }|d|< d 7 }|d|= d 7 }|d7 }t |v 
s]t}|v 
rz(t~|}|tk
rjd}?n|tk
rrd}?n|tk
rzd}?n
|tk
rd}?nd}?W n t
y }
 zt|
}?W Y d}
~
nd}
~
ww |d|? d 7 }d}@d#}At |v 
st|v 
st|v rzt|}Bt|Bjd{ }Ct|Bjd{ }DW n t
y }
 zt|
}>|>}C|>}DW Y d}
~
nd}
~
ww t |v 
st|v 
r|@d|C d 7 }@t |v st|v r|@d|D d 7 }@d(}At |v st|v rPzt|\}E}Ft|Ed{ }GW n tyE }
 zt|
}>|>}GW Y d}
~
nd}
~
ww |@d|G d 7 }@d(}At |v sZt|v rzt|\}E}Ft|Ed{ }HW n ty }
 zt|
}>|>}HW Y d}
~
nd}
~
ww |@d|H d 7 }@d(}A|Ar|d7 }||@7 }|d7 }t |v st|v st|v rzt|\}}|dkrdnd}I|dkrdnd}JW n ty }
 zt|
}>|>}I|>}JW Y d}
~
nd}
~
ww d}Kt |v st|v r|Kd|I d 7 }Kt |v st|v r	|Kd|J d 7 }K|d7 }||K7 }|d7 }t||\}L}M|Mr,|d7 }||L7 }|d7 }t||\}N}O|OrC|d7 }||N7 }|d7 }d}Pd#}Qt |v sQt|v rztt|td }RW n tyu }
 zt|
}RW Y d}
~
nd}
~
ww |Pd|R d 7 }Pztt|td }RW n ty }
 zt|
}RW Y d}
~
nd}
~
ww |Pd|R d 7 }Pd(}Qztt|td }RW n ty }
 zt|
}RW Y d}
~
nd}
~
ww |Pd|R d 7 }Pd(}Q|Qr|d7 }||P  |d7 }d}Sd#}Tt |v st|v r+zt|}U|Udkrdnd;}VW n ty  }
 zt|
}VW Y d}
~
nd}
~
ww |Sd|V d 7 }Sd(}Tt |v s5t|v rdzt|d }Wd|W }XW n tyY }
 zt|
}XW Y d}
~
nd}
~
ww |Sd|X d 7 }Sd(}Tt |v snt|v rzt|d }Yd|Y }ZW n ty }
 zt|
}ZW Y d}
~
nd}
~
ww |Sd|Z d 7 }Sd(}Tt |v st|v rzt|d }Yd|Y }ZW n ty }
 zt|
}ZW Y d}
~
nd}
~
ww |Sd|Z d 7 }Sd(}Tt |v st|v rzt|d }[d|[ }\W n ty }
 zt|
}\W Y d}
~
nd}
~
ww |Sd|\ d 7 }Sd(}Tt |v st|v st|v rwzt|}Yd|Yd d  }]d|Yd d  }^W n tyP }
 zt|
}>|>}]|>}^W Y d}
~
nd}
~
ww t |v s[t|v rc|Sd|] d 7 }St |v smt|v ru|Sd|^ d 7 }Sd(}T|Tr|d7 }zdttg| }6W n ty }
 zt|
}6W Y d}
~
nd}
~
ww |d|6 7 }||S7 }|d7 }d}_d#}`t |v st|v rztt|td }aW n ty }
 zt|
}aW Y d}
~
nd}
~
ww |_d|a d 7 }_d(}`t |v st|v r&ztt|td }bW n ty }
 zt|
}bW Y d}
~
nd}
~
ww |_d|b d 7 }_d(}`t |v s0t|v r_ztt|td }cW n tyT }
 zt|
}cW Y d}
~
nd}
~
ww |_d|c d 7 }_d(}`|`rn|d7 }||_7 }|d7 }d}dd#}et |v s|t|v rztt|td }aW n ty }
 zt|
}aW Y d}
~
nd}
~
ww |dd|a d 7 }dd(}et |v st|v rztt|td }cW n ty }
 zt|
}cW Y d}
~
nd}
~
ww |dd|c d 7 }dd(}e|er|d7 }||d7 }|d7 }d}fd#}gt |v st|v r0ztt|td }aW n ty% }
 zt|
}aW Y d}
~
nd}
~
ww |fd|a d 7 }fd(}gt |v s:t|v riztt|td }cW n ty^ }
 zt|
}cW Y d}
~
nd}
~
ww |fd|c d 7 }fd(}g|grx|d7 }||f7 }|d7 }d}hd#}it |v st|v rztt|td }aW n ty }
 zt|
}aW Y d}
~
nd}
~
ww |hd|a d 7 }hd(}it |v st|v rztt|td }bW n ty }
 zt|
}bW Y d}
~
nd}
~
ww |hd|b d 7 }hd(}it |v st|v r'ztt|td }cW n ty }
 zt|
}cW Y d}
~
nd}
~
ww |hd|c d 7 }hd(}i|ir6|d7 }||h7 }|d7 }t |v s@t|v r|d7 }zt|\}j}k|jtkrSd}lnd}l|ktkr]d}mnd}mW n* tyn   d;}ld;}mY n ty }
 zt|
}lt|
}mW Y d}
~
nd}
~
ww |d|l d 7 }|d|m d 7 }|d7 }t |v st|v rzRt|}n|d7 }|nD ]A}o|d7 }|d|o 7 }zt||o}_|_D ]	}p|d|p 7 }qW n ty }
 z|dt|
 7 }W Y d}
~
nd}
~
ww |d7 }q|d7 }W n ty }
 z|dt|
 d 7 }W Y d}
~
nd}
~
ww t |v s$t|v rzut|}q|d7 }|qD ]d}rz
tt|rj}sW n% ty` }
 z|
jtkrQW Y d}
~
q/t|
}sW Y d}
~
nd}
~
ww |d7 }|d|rj 7 }|d|s d 7 }|rjdkr}d;}cn	d|rjd d  }c|d|c d 7 }|d7 }q/|d7 }W n ty }
 z|dt|
 d 7 }W Y d}
~
nd}
~
ww t |v st|v rzt|}t|d7 }|tD ]}uz-t||u}vd|vj }wd|vj }x|vjdkrd;}yn	d|vjd d  }yd|vj }zd|vj }{W n/ ty+ }
 z"|
jtkrW Y d}
~
qt|
}
|
}w|
}x|
}y|
}z|
}{W Y d}
~
nd}
~
ww |d7 }|d|u 7 }|d|w d 7 }|d|x d 7 }|d|y d 7 }|d|z d 7 }|d|{ d 7 }|d7 }q|d7 }W n  ty }
 z|d t|
 d 7 }W Y d}
~
nd}
~
ww t|dkr|d7 }||7 }|d7 }q|d7 }W |S  ty }
 z|d|
ˡ  d 7 }W Y d}
~
|S d}
~
ww (  a  
      Provides a Python interface to GPU management and monitoring functions.

      This is a wrapper around the NVML library.
      For information about the NVML library, see the NVML developer page
      http://developer.nvidia.com/nvidia-management-library-nvml

      Examples:
      ---------------------------------------------------------------------------
      For all elements as in XML format.  Similiar to nvisia-smi -q -x

      $ XmlDeviceQuery()

      ---------------------------------------------------------------------------
      For XML of filtered elements by string name.
      Similiar ot nvidia-smi --query-gpu=pci.bus_id,memory.total,memory.free
      See help_query_gpu.txt or XmlDeviceQuery("--help-query-gpu") for available filter elements

      $ XmlDeviceQuery("pci.bus_id,memory.total,memory.free")

      ---------------------------------------------------------------------------
      For XML of filtered elements by enumeration value.
      See help_query_gpu.txt or XmlDeviceQuery("--help_query_gpu") for available filter elements

      $ XmlDeviceQuery([NVSMI_PCI_BUS_ID, NVSMI_MEMORY_TOTAL, NVSMI_MEMORY_FREE])

      N--help-h--help-query-gpuhelp_query_gpu.txtrr   z<?xml version="1.0" ?>
z7<!DOCTYPE nvidia_smi_log SYSTEM "nvsmi_device_v4.dtd">
z<nvidia_smi>
z  <timestamp>z</timestamp>
z  <driver_version>z</driver_version>
z	  <count>z	</count>
r   z  <id>%s</id>
z    <product_name>z</product_name>
z    <product_brand>z</product_brand>
EnabledDisabledz    <display_mode>z</display_mode>
z    <display_active>z</display_active>
z    <persistence_mode>z</persistence_mode>
z    <accounting_mode>z</accounting_mode>
z!    <accounting_mode_buffer_size>z</accounting_mode_buffer_size>
Fz      <current_mm>z</current_mm>
z      <pending_mm>z</pending_mm>
Tz    <mig_mode>
z    </mig_mode>
WDDMTCCz      <current_dm>z</current_dm>
z      <pending_dm>z</pending_dm>
z    <driver_model>
z    </driver_model>
z    <serial>z
</serial>
z
    <uuid>z</uuid>
z    <minor_number>z</minor_number>
z    <vbios_version>z</vbios_version>
ro  z)    <multigpu_board>N/A</multigpu_board>
z)    <multigpu_board>Yes</multigpu_board>
z(    <multigpu_board>No</multigpu_board>
0x%xz    <board_id>z</board_id>
z      <img_version>z</img_version>
z      <oem_object>z</oem_object>
z      <ecc_object>z</ecc_object>
z      <pwr_object>z</pwr_object>
z    <inforom_version>
z    </inforom_version>
z      <current_gom>z</current_gom>
z      <pending_gom>z</pending_gom>
z    <gpu_operation_mode>
z    </gpu_operation_mode>
z      <pci_bus>%02X</pci_bus>
z$      <pci_device>%02X</pci_device>
z$      <pci_domain>%04X</pci_domain>
z*      <pci_device_id>%08X</pci_device_id>
z      <pci_bus_id>z</pci_bus_id>
z2      <pci_sub_system_id>%08X</pci_sub_system_id>
z          <max_link_gen>z</max_link_gen>
z          <current_link_gen>z</current_link_gen>
z        <pcie_gen>
z        </pcie_gen>
xz          <max_link_width>z</max_link_width>
z          <current_link_width>z</current_link_width>
z        <link_widths>
z        </link_widths>
z      <pci_gpu_link_info>
z      </pci_gpu_link_info>
PLXBR04z        <bridge_chip_type>z</bridge_chip_type>
%08Xz,        <bridge_chip_fw>%s</bridge_chip_fw>
z        <bridge_chip_fw>z</bridge_chip_fw>
z      <pci_bridge_chip>
z      </pci_bridge_chip>
z      <replay_counter>z</replay_counter>z      <tx_util>z KB/sz
</tx_util>z      <rx_util>z
</rx_util>z
    <pci>
z    </pci>
z %z    <fan_speed>z</fan_speed>
P%sz    <performance_state>z</performance_state>
   z MiBz      <total>r   z      <used>z</used>
z      <free>z</free>
z    <fb_memory_usage>
z    </fb_memory_usage>
z    <bar1_memory_usage>
z    </bar1_memory_usage>
DefaultExclusive Thread
ProhibitedExclusive_Processr   z    <compute_mode>z</compute_mode>
z      <gpu_util>z</gpu_util>
z      <memory_util>z</memory_util>
z      <encoder_util>z</encoder_util>
z      <decoder_util>z</decoder_util>
z    <utilization>
z    </utilization>
z      <current_ecc>z</current_ecc>
z      <pending_ecc>z</pending_ecc>
z    <ecc_mode>
z    </ecc_mode>
z    <ecc_errors>
z    </ecc_errors>
z    <retired_pages>
z    </retired_pages>
z Cz      <gpu_temp>z</gpu_temp>
z      <gpu_temp_max_threshold>z</gpu_temp_max_threshold>
z      <gpu_temp_slow_threshold>z</gpu_temp_slow_threshold>
z    <temperature>
z    </temperature>
	Supportedz      <power_management>z</power_management>
     @@z%.2f Wz      <power_draw>z</power_draw>
z      <power_limit>z</power_limit>
z      <default_power_limit>z</default_power_limit>
z      <enforced_power_limit>z</enforced_power_limit>
r   z      <min_power_limit>z</min_power_limit>
z      <max_power_limit>z</max_power_limit>
z    <power_readings>
Pz$      <power_state>%s</power_state>
z    </power_readings>
z MHzz      <graphics_clock>z</graphics_clock>
z      <sm_clock>z</sm_clock>
z      <mem_clock>z</mem_clock>
z    <clocks>
z    </clocks>
z    <applications_clocks>
z    </applications_clocks>
z"    <default_applications_clocks>
z#    </default_applications_clocks>
z    <max_clocks>
z    </max_clocks>
z    <clock_policy>
OffOnz      <auto_boost>z</auto_boost>
z      <auto_boost_default>z</auto_boost_default>
z    </clock_policy>
z    <supported_clocks>
z      <supported_mem_clock>
z        <value>%d MHz</value>
zD        <supported_graphics_clock>%d MHz</supported_graphics_clock>
z@        <supported_graphics_clock>%s</supported_graphics_clock>
z      </supported_mem_clock>
z    </supported_clocks>
z    <supported_clocks>z</supported_clocks>
z    <processes>
z    <process_info>
z      <pid>%d</pid>
z      <process_name>z</process_name>
%d MiBz      <used_memory>z</used_memory>
z    </process_info>
z    </processes>
z    <processes>z</processes>
z    <accounted_processes>
%d %%%d ms%dz    <accounted_process_info>
z      <max_memory_usage>z</max_memory_usage>
z      <time>z</time>
z      <is_running>z</is_running>
z    </accounted_process_info>
z    </accounted_processes>
z    <accounted_processes>z</accounted_processes>
z  <gpu>z	  </gpu>
z</nvidia_smi>
nvidia_smi.py: 
)r  r  rJ  r   XmlDeviceQuery__doc__openread"_nvidia_smi__fromDeviceQueryStringlistNVSMI_TIMESTAMPr   datetimedatetodayNVSMI_DRIVER_VERSIONnvmlSystemGetDriverVersionr   NVSMI_COUNTr   r   nvmlDeviceGetPciInfoNVSMI_PCI_BUS_IDbusId
NVSMI_NAMEnvmlDeviceGetNameNVSMI_BRAND_NAMESnvmlDeviceGetBrandr   r   NVSMI_DISPLAY_MODEnvmlDeviceGetDisplayModeNVSMI_DISPLAY_ACTIVEnvmlDeviceGetDisplayActiveNVSMI_PERSISTENCE_MODEnvmlDeviceGetPersistenceModeNVSMI_ACCT_MODEnvmlDeviceGetAccountingModeNVSMI_ACCT_BUFFER_SIZE!nvmlDeviceGetAccountingBufferSizeNVSMI_MIG_MODE_CURRENTNVSMI_MIG_MODE_PENDINGnvmlDeviceGetMigModeNVML_DEVICE_MIG_ENABLENVSMI_DRIVER_MODEL_CURnvmlDeviceGetCurrentDriverModelNVML_DRIVER_WDDMNVSMI_DRIVER_MODEL_PENDINGnvmlDeviceGetPendingDriverModelNVSMI_SERIALNUMBERnvmlDeviceGetSerial
NVSMI_UUIDnvmlDeviceGetUUIDNVSMI_INDEXnvmlDeviceGetMinorNumberNVSMI_VBIOS_VERnvmlDeviceGetVbiosVersionnvmlDeviceGetMultiGpuBoardNVSMI_BOARD_IDnvmlDeviceGetBoardIdNVSMI_INFOROM_IMG nvmlDeviceGetInforomImageVersionNVSMI_INFOROM_OEMnvmlDeviceGetInforomVersionNVML_INFOROM_OEMNVSMI_INFOROM_ECCNVML_INFOROM_ECCNVSMI_INFOROM_PWRNVML_INFOROM_POWERNVSMI_GOM_CUR_nvidia_smi__toStrGOM$nvmlDeviceGetCurrentGpuOperationModeNVSMI_GOM_PENDING$nvmlDeviceGetPendingGpuOperationModeNVSMI_PCI_BUSbusNVSMI_PCI_DEVICEdeviceNVSMI_PCI_DOMAINdomainNVSMI_PCI_DEVICE_IDpciDeviceIdNVSMI_PCI_SUBDEVICE_IDpciSubSystemIdNVSMI_PCI_LINK_GEN_MAX"nvmlDeviceGetMaxPcieLinkGenerationNVSMI_PCI_LINK_GEN_CUR#nvmlDeviceGetCurrPcieLinkGenerationNVSMI_PCI_LINK_WIDTH_MAXnvmlDeviceGetMaxPcieLinkWidthNVSMI_PCI_LINK_WIDTH_CURnvmlDeviceGetCurrPcieLinkWidthnvmlDeviceGetBridgeChipInfobridgeChipInfotype	fwVersionnvmlDeviceGetPcieReplayCounternvmlDeviceGetPcieThroughputNVML_PCIE_UTIL_TX_BYTESNVML_PCIE_UTIL_RX_BYTESNVSMI_FAN_SPEEDnvmlDeviceGetFanSpeedNVSMI_PSTATEnvmlDeviceGetPowerState&NVSMI_CLOCK_THROTTLE_REASONS_SUPPORTED#NVSMI_CLOCK_THROTTLE_REASONS_ACTIVE!NVSMI_CLOCK_THROTTLE_REASONS_IDLE(NVSMI_CLOCK_THROTTLE_REASONS_APP_SETTING'NVSMI_CLOCK_THROTTLE_REASONS_SW_PWR_CAP(NVSMI_CLOCK_THROTTLE_REASONS_HW_SLOWDOWN0NVSMI_CLOCK_THROTTLE_REASONS_HW_THERMAL_SLOWDOWN2NVSMI_CLOCK_THROTTLE_REASONS_HW_PWR_BRAKE_SLOWDOWN0NVSMI_CLOCK_THROTTLE_REASONS_SW_THERMAL_SLOWDOWN'NVSMI_CLOCK_THROTTLE_REASONS_SYNC_BOOST(_nvidia_smi__xmlGetClocksThrottleReasonsNVSMI_MEMORY_TOTALNVSMI_MEMORY_USEDNVSMI_MEMORY_FREEnvmlDeviceGetMemoryInfor   usedNVSMI_MEMORY_BAR1nvmlDeviceGetBAR1MemoryInfo	bar1Totalbar1UsedNVSMI_COMPUTE_MODEnvmlDeviceGetComputeModeNVML_COMPUTEMODE_DEFAULT!NVML_COMPUTEMODE_EXCLUSIVE_THREADNVML_COMPUTEMODE_PROHIBITED"NVML_COMPUTEMODE_EXCLUSIVE_PROCESSNVSMI_UTILIZATION_GPUNVSMI_UTILIZATION_MEMnvmlDeviceGetUtilizationRatesgpumemoryNVSMI_UTILIZATION_ENCODERnvmlDeviceGetEncoderUtilizationNVSMI_UTILIZATION_DECODERnvmlDeviceGetDecoderUtilizationNVSMI_ECC_MODE_CURNVSMI_ECC_MODE_PENDINGnvmlDeviceGetEccMode_nvidia_smi__xmlGetEcc_nvidia_smi__xmlGetRetiredPagesNVSMI_TEMPERATURE_GPUnvmlDeviceGetTemperatureNVML_TEMPERATURE_GPU!nvmlDeviceGetTemperatureThreshold#NVML_TEMPERATURE_THRESHOLD_SHUTDOWN#NVML_TEMPERATURE_THRESHOLD_SLOWDOWNNVSMI_POWER_MGMT nvmlDeviceGetPowerManagementModeNVSMI_POWER_DRAWnvmlDeviceGetPowerUsageNVSMI_POWER_LIMIT!nvmlDeviceGetPowerManagementLimitNVSMI_POWER_LIMIT_DEFAULT(nvmlDeviceGetPowerManagementDefaultLimitNVSMI_POWER_LIMIT_ENFORCEDnvmlDeviceGetEnforcedPowerLimitNVSMI_POWER_LIMIT_MINNVSMI_POWER_LIMIT_MAX,nvmlDeviceGetPowerManagementLimitConstraintsNVSMI_CLOCKS_GRAPHICS_CURnvmlDeviceGetClockInfoNVML_CLOCK_GRAPHICSNVML_CLOCK_SMNVSMI_CLOCKS_MEMORY_CURNVML_CLOCK_MEMNVSMI_CLOCKS_APPL_GRAPHICSnvmlDeviceGetApplicationsClockNVSMI_CLOCKS_APPL_MEMORY"NVSMI_CLOCKS_APPL_GRAPHICS_DEFAULT%nvmlDeviceGetDefaultApplicationsClock NVSMI_CLOCKS_APPL_MEMORY_DEFAULTNVSMI_CLOCKS_GRAPHICS_MAXnvmlDeviceGetMaxClockInfoNVSMI_CLOCKS_SM_MAXNVSMI_CLOCKS_MEMORY_MAXNVSMI_CLOCKS_POLICY%nvmlDeviceGetAutoBoostedClocksEnabledrW  NVMLError_NotSupportedNVSMI_CLOCKS_SUPPORTED"nvmlDeviceGetSupportedMemoryClocks$nvmlDeviceGetSupportedGraphicsClocksNVSMI_COMPUTE_APPS$nvmlDeviceGetComputeRunningProcessesnvmlSystemGetProcessNamepidr  NVML_ERROR_NOT_FOUNDusedGpuMemoryNVSMI_ACCOUNTED_APPSnvmlDeviceGetAccountingPidsnvmlDeviceGetAccountingStatsgpuUtilizationmemoryUtilizationmaxMemoryUsager   	isRunningr3  r  )|r   r   finr   r   r   r   pciInfogpuInfo	brandNamer   statere  
bufferSizemigModeincludeMigModecurrentpendingdriverModelincludeDriverModelr   r   minor_numbervbiosmultiGpuBoolboardIdhexBIDinforomVersionincludeInforomimgoemr5  pwrgpuOperationMode
includeGOMpci
includePcipciGpuLinkInfoincludeLinkInfopciGen
includeGengenpciLinkWidthsincludeLinkWidthswidthpciBridgeChipincludeBridgeChipbridgeHierarchybridge_typestrFwVersionreplaytx_bytesrx_bytesfan	perfStateperfStateStrfbMemoryUsageincludeMemoryUsagememInfo	mem_totalmem_usedmem_freerB  modeStrutilizationincludeUtilizationutilgpu_utilmem_utilutil_intssizeencoder_utildecoder_utilcurr_strpend_streccMode	eccErrorsincludeEccErrorsrY  rZ  temperatureincludeTemperaturetemppower_readingsincludePowerReadingspowMan	powManStrpowDraw
powDrawStrpowLimitpowLimitStrenforcedPowLimitenforcedPowLimitStrpowLimitStrMinpowLimitStrMaxr   includeClocksgraphicssmmemapplicationClocksincludeAppClocksdefaultApplicationClocksincludeDefaultAppClocks	maxClocksincludeMaxClocksboostedStateboostedDefaultStateautoBoostStrautoBoostDefaultStr	memClocksmcprocsr   r   pidsrY  statsr_  r`  ra  r   
is_runningr   r   r   r     s  
"










"
"

"

"














*
*























""




&

"znvidia_smi.XmlDeviceQueryc                 C   s"  |du rt g}n9t|tr=|dks|dkrtjjS |dkr7tdd}| W  d   S 1 s1w   Y  n
t|}nt	|}i }g }zt |v sOt
|v rYttj |d< t |v sat|v ritt |d< t }t |v stt|v rx||d	< td
|D ]}i }| j| }t|}	t |v st|v rt|	j|d< t |v st|v rtt||d< ztt| }
W n ty } zt|}
W Y d}~nd}~ww |
|d< t |v st|v rzt|d
krdnd}W n ty } zt|}W Y d}~nd}~ww ||d< t |v st |v r5zt!|d
krdnd}W n ty0 } zt|}W Y d}~nd}~ww ||d< t |v s?t"|v rizt#|d
krIdnd}W n tyd } zt|}W Y d}~nd}~ww ||d< i }d}t |v s|t$|v s|t%|v rzt&|\}}W n ty } zt|}|}W Y d}~nd}~ww |t'krdnd|d< |t'krdnd|d< d}|r||d< t |v st(|v rzt)|d
krdnd}W n ty } zt|}W Y d}~nd}~ww ||d< t |v st*|v r"z	tt+|}W n ty } zt|}W Y d}~nd}~ww ||d< i }d}t |v s0t,|v r\zt-|t.kr:dnd}W n tyU } zt|}W Y d}~nd}~ww ||d< d}t |v sft/|v rzt0|t.krpdnd}W n ty } zt|}W Y d}~nd}~ww ||d< d}|r||d< t |v st1|v rzt2|}W n ty } zt|}W Y d}~nd}~ww t||d< t |v st3|v rzt4|}W n ty } zt|}W Y d}~nd}~ww t||d < t |v st5|v r)zt6|}W n ty! } zt|}W Y d}~nd}~ww t||d!< t |v s3t7|v rYzt8|}W n tyQ } zt|}W Y d}~nd}~ww t||d"< t |v sct7|v rzt9|}W n ty } zt|}W Y d}~nd}~ww |d#krd#|d$< n|rd%|d$< nd&|d$< t |v st:|v rzt;|}W n ty } zt|}W Y d}~nd}~ww zd'| }W n   |}Y ||d(< i }d}t |v st<|v rzt=|}W n ty } zt|}W Y d}~nd}~ww t||d)< d}t |v st>|v r;zt?|t@}W n ty1 } zt|}W Y d}~nd}~ww t||d*< d}t |v sEtA|v rnzt?|tB} W n tyd } zt|} W Y d}~nd}~ww t| |d+< d}t |v sxtC|v rzt?|tD}!W n ty } zt|}!W Y d}~nd}~ww t|!|d,< d}|r||d-< i }"d}#t |v stE|v rz	tFtG|}W n ty } zt|}W Y d}~nd}~ww t||"d.< d}#t |v stH|v rz	tFtI|}W n ty } zt|}W Y d}~nd}~ww t||"d/< d}#|#r|"|d0< i }$d}%t |v s+tJ|v r4d1|	jK |$d2< d}%t |v s>tL|v rGd1|	jM |$d3< d}%t |v sQtN|v rZd4|	jO |$d5< d}%t |v sdtP|v rmd6|	jQ |$d7< d}%t |v swt|v rt|	j|$d8< d}%t |v stR|v rd6|	jS |$d9< d}%i }&d}'i }(d})t |v stT|v rz	ttU|}*W n ty } zt|}*W Y d}~nd}~ww |*|(d:< d})t |v stV|v r z	ttW|}*W n ty } zt|}*W Y d}~nd}~ww |*|(d;< d})|)r	|(|&d<< d}'i }+d},t |v stX|v rAzttY|d= }-W n ty: } zt|}-W Y d}~nd}~ww |-|+d>< d},t |v sKtZ|v ruztt[|d= }-W n tyn } zt|}-W Y d}~nd}~ww |-|+d?< d},|,r~|+|&d@< d}'|'r|&|$dA< d}%i }.d}/t |v rz9t\|}0dB}1|0j]d
 j^d
kr|1dC7 }1n|1dD7 }1|1|.dE< |0j]d
 j_d
krd#}2nd6|0j]d
 j_ }2t|2|.dF< W n! ty } zt||.dE< t||.dF< W Y d}~nd}~ww d}/|/r|.|$dG< d}%t |v r%zt`|}3t|3|$dH< W n ty" } zt||$dH< W Y d}~nd}~ww d}%t |v rVzta|tb}4|4|$dI< dJ|$dK< W n tyS } zt||$dI< W Y d}~nd}~ww d}%t |v rzta|tc}5|5|$dL< dJ|$dM< W n ty } zt||$dL< W Y d}~nd}~ww d}%|%r|$|dN< t |v std|v rzte|}6W n ty } zt|}6W Y d}~nd}~ww |6|dO< dP|dQ< t |v stf|v rz
tg|}7dR|7 }8W n ty } zt|}8W Y d}~nd}~ww |8|dS< t |v s'th|v s'ti|v s'tj|v s'tk|v s'tl|v s'tm|v s'tn|v s'to|v s'tp|v s'tq|v r.tr||dT< i }9d}:t |v sFts|v sFtt|v sFtu|v rd}:z"tv|};|;jwdU dU }<|;jxdU dU }=|;jwdU dU |;jxdU dU  }>W n ty } zt|}?|?}<|?}=|?}>W Y d}~nd}~ww t |v sts|v r|<|9dV< t |v stt|v r|=|9dW< t |v stu|v r|>|9dX< |:rdY|9dZ< |9|d[< t |v sty|v 	rz"tz|};|;j{dU dU }<|;j|dU dU }=|;j{dU dU |;j|dU dU  }>W n t	y } zt|}?|?}<|?}=|?}>W Y d}~nd}~ww i }@|<|@dV< |=|@dW< |>|@dX< dY|@dZ< |@|d\< t |v 	s)t}|v 	rnz(t~|}|tk	r6d]}An|tk	r>d^}An|tk	rFd_}An
|tk	rNd`}Anda}AW n t	yi } zt|}AW Y d}~nd}~ww |A|db< i }Bd}Ct |v 	st|v 	st|v 	rzt|}D|Dj}E|Dj}FW n t	y } zt|}?|?}E|?}FW Y d}~nd}~ww t |v 	st|v 	r|E|Bdc< t |v 	st|v 	r|F|Bdd< d}Ct |v 	st|v 	rz
t|\}G}H|G}IW n t	y } zt|}?|?}IW Y d}~nd}~ww |I|Bde< d}Ct |v 
st|v 
r2z
t|\}G}H|G}JW n t
y+ } zt|}?|?}JW Y d}~nd}~ww |J|Bdf< d}C|C
r=dP|BdZ< |B|dg< t |v 
sLt|v 
sLt|v 
rzt|\}}|d
k
rZdnd}K|d
k
rcdnd}LW n t
y } zt|}?|?}K|?}LW Y d}~nd}~ww i }Mt |v 
st|v 
r|K|Mdh< t |v 
st|v 
r|L|Mdi< |M|dj< t||\}N}O|O
r|N|dk< t||\}P}Q|Q
r|P|dl< i }Rd}St |v 
st|v rCzt|t}TW n t
y } zt|}TW Y d}~nd}~ww |T|Rdm< d}Szt|t}TW n ty } zt|}TW Y d}~nd}~ww |T|Rdn< d}Szt|t}TW n ty< } zt|}TW Y d}~nd}~ww |T|Rdo< d}S|SrNdp|RdZ< |R|dq< i }Ud}Vt |v s\t|v rzt|}W|Wd
krhdrnd#}XW n ty } zt|}XW Y d}~nd}~ww |X|Uds< d}Vt |v st|v rz
t|dt }Y|Y}ZW n ty } zt|}ZW Y d}~nd}~ww |Z|Udu< d}Vt |v st|v rz
t|dt }[|[}\W n ty } zt|}\W Y d}~nd}~ww |\|Udv< d}Vt |v st|v r#z
t|dt }[|[}\W n ty } zt|}\W Y d}~nd}~ww |\|Udw< d}Vt |v s-t|v rVz
t|dt }]|]}^W n tyO } zt|}^W Y d}~nd}~ww |^|Udx< d}Vt |v set|v set|v rzt|}[|[d
 dt }_|[dy dt }`W n ty } zt|}?|?}_|?}`W Y d}~nd}~ww t |v st|v r|_|Udz< t |v st|v r|`|Ud{< d}V|Vrzd|ttg| }7W n ty } zt|}7W Y d}~nd}~ww |7|Ud}< d~|UdZ< |U|d< i }ad}bt |v st|v rzt|t}cW n ty } zt|}cW Y d}~nd}~ww |c|ad< d}bt |v s#t|v rIzt|t}dW n tyB } zt|}dW Y d}~nd}~ww |d|ad< d}bt |v sSt|v ryzt|t}eW n tyr } zt|}eW Y d}~nd}~ww |e|ad< d}b|brd|adZ< |a|d< i }fd}gt |v st|v rzt|t}cW n ty } zt|}cW Y d}~nd}~ww |c|fd< d}gt |v st|v rzt|t}eW n ty } zt|}eW Y d}~nd}~ww |e|fd< d}g|grd|fdZ< |f|d< i }hd}it |v st|v r'zt|t}cW n ty  } zt|}cW Y d}~nd}~ww |c|hd< d}it |v s1t|v rWzt|t}eW n tyP } zt|}eW Y d}~nd}~ww |e|hd< d}i|irbd|hdZ< |h|d< i }jd}kt |v spt|v rzt|t}cW n ty } zt|}cW Y d}~nd}~ww |c|jd< d}kt |v st|v rzt|t}dW n ty } zt|}dW Y d}~nd}~ww |d|jd< d}kt |v st|v rzt|t}eW n ty } zt|}eW Y d}~nd}~ww |e|jd< d}k|krd|jdZ< |j|d< t |v st|v r`i }lzt|\}m}n|mtkrd}ond}o|ntkr&d}pnd}pW n* ty7   d#}od#}pY n tyS } zt|}ot|}pW Y d}~nd}~ww |o|ld< |p|ld< |l|d< t |v sjt|v rg }qzLt|}r|rD ]C}si }t|s|td< d|tdZ< g }uzt||s}a|aD ]}v|u|v qW n ty } zt|}uW Y d}~nd}~ww |u|td< |q|t qsW n ty } zt||qd< W Y d}~nd}~ww t|qd
kr|qnd|d< t |v st|v rxg }wzft|}x|xD ]]}yz
tt|yj}zW n% ty$ } z|jtkrW Y d}~qt|}zW Y d}~nd}~ww i }{|yj|{d< |z|{d< |yjdkr9d
}en	t|yjdU dU }e|e|{d< dY|{dZ< |w|{ qW n tyj } zt|}wW Y d}~nd}~ww t|wd
krt|wnd|d< t |v st|v r6zt|}|g }}||D ]}~z-t||~}d|j }d|j }|jdkrd#}n	d|jdU dU  }d|j }d|j }W n/ ty } z"|jtkrW Y d}~qt|}|}|}|}|}|}W Y d}~nd}~ww i }d|~ |d< ||dc< ||dd< ||d< ||d< ||d< |}| qt|}d
kr|}nd|d< W n ty5 } zt||d< W Y d}~nd}~ww t|d
krB|| q}t|d
krQ||d< W |S W |S  tyq } ztd|Ρ  d  W Y d}~|S d}~ww )a  
      Provides a Python interface to GPU management and monitoring functions.

      This is a wrapper around the NVML library.
      For information about the NVML library, see the NVML developer page
      http://developer.nvidia.com/nvidia-management-library-nvml

      Examples:
      ---------------------------------------------------------------------------
      For all elements as a list of dictionaries.  Similiar to nvisia-smi -q -x

      $ DeviceQuery()

      ---------------------------------------------------------------------------
      For a list of filtered dictionary elements by string name.
      Similiar ot nvidia-smi --query-gpu=pci.bus_id,memory.total,memory.free
      See help_query_gpu.txt or DeviceQuery("--help_query_gpu") for available filter elements

      $ DeviceQuery("pci.bus_id,memory.total,memory.free")

      ---------------------------------------------------------------------------
      For a list of filtered dictionary elements by enumeration value.
      See help_query_gpu.txt or DeviceQuery("--help-query-gpu") for available filter elements

      $ DeviceQuery([NVSMI_PCI_BUS_ID, NVSMI_MEMORY_TOTAL, NVSMI_MEMORY_FREE])

      Nr  r  r  r  r  r}   r~   r   r   idproduct_nameproduct_brandr  r  r   r   r   F
current_mm
pending_mmTmig_modeaccounting_modeaccounting_mode_buffer_sizer  r  
current_dm
pending_dmdriver_modelr   r   ro  r   ro  multigpu_boardrQ  rP  r  board_idimg_version
oem_object
ecc_object
pwr_objectinforom_versioncurrent_gompending_gomgpu_operation_modez%02Xpci_bus
pci_devicez%04X
pci_domainr  pci_device_id
pci_bus_idpci_sub_system_idmax_link_gencurrent_link_genpcie_genr  max_link_widthcurrent_link_widthlink_widthspci_gpu_link_infor   r  r  bridge_chip_typebridge_chip_fwpci_bridge_chipreplay_countertx_utilzKB/stx_util_unitrx_utilrx_util_unitr{  	fan_speed%fan_speed_unitr  performance_stateclocks_throttler  r   r  freeMiBunitfb_memory_usagebar1_memory_usager  r  r  r  r   r   r  memory_utilr  r  r  current_eccpending_eccecc_mode
ecc_errorsretired_pagesgpu_tempgpu_temp_max_thresholdgpu_temp_slow_thresholdCr  r  power_managementr  
power_drawpower_limitdefault_power_limitenforced_power_limitr   min_power_limitmax_power_limitr  power_stateWr  graphics_clocksm_clock	mem_clockMHzr   applications_clocksdefault_applications_clocks
max_clocksr  r  
auto_boostauto_boost_defaultclock_policyrk  supported_graphics_clockrG  supported_clocksrY  process_nameused_memory	processesr  r  r  r  max_memory_usager   r  accounted_processesr"  r  r  )r  r  rJ  r   r   r  r  r  r  r  r  r   r  r  r  r  r  r   r  r   r   r  r  r  r  r  r  r  r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  %_nvidia_smi__GetClocksThrottleReasonsr  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  _nvidia_smi__GetEcc_nvidia_smi__GetRetiredPagesr-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rW  rR  rS  rT  rU  r   r3  rV  rW  rX  rY  r  rZ  r[  intr\  r]  r^  r_  r`  ra  r   rb  printr  )r   r   rc  nvidia_smi_results
dictResultr   r   
gpuResultsr   rd  rf  r   rg  re  ri  rj  rk  rl  rh  rm  rn  r   r   ro  rp  rq  rr  rs  rt  ru  rv  rw  r5  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rB  bar1MemoryUsager  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rY  rZ  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  clockPolicyr  r  r  r  supportedClocksr  r  supportMemClocksupportedGraphicsClocksr  r  r  r   r   processInfor  accountProcessrY  r  r_  r`  ra  r   r  accountProcessInfor   r   r   r     s  
"





























 
 































znvidia_smi.DeviceQueryc              
   C   s&  d}zu|  D ]m\}}t|tjr6t| dkr,|d||f 7 }|| |d| 7 }q|d||df 7 }qt|tu rit|d tjrit	dt|D ]}|d|||d t|f 7 }|| || d| 7 }qKq|d||t
|f 7 }qW |S  ty } z|d	t
| 7 }W Y d }~|S d }~ww )
Nr   r   z%s%s:
  	%s%s: %s
None%s%s: [%d of %d]
r   z	
[Error] )itemsr  collectionsMappingr3  r   _nvidia_smi__to_str_dictionaryr  r  r   rJ  r   )r   r  indent
strResultskeyr|  r   er   r   r   __to_str_dictionaryt  s*   znvidia_smi.__to_str_dictionaryc              	   C   s   d}d}|  D ]:\}}t|tu r7tdt|D ]}|d|||d t|f 7 }|| || d| 7 }qq|d||t|f 7 }q|S )Nr   r1  r   r4  r   r2  )r5  r  r  r   r3  r8  rJ  )r   r   r:  r9  r;  r|  r   r   r   r   __to_str  s   znvidia_smi.__to_strc                 C   s   t |tu r|S | |S r   )r  rJ  _nvidia_smi__to_str)r   r   r   r   r   format  s   
znvidia_smi.formatr   r   )"r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r'  r:  r+  r"  rU  r_  r,  r#  r  r  r!  r   r   classmethodr  r   r8  r?  r@  r   r   r   r   r   w  s    .


	

G
I
4
0
5
1









       F       :r   __main__c                  C   sv   d} d }t dttjD ]}tj| }| dkrd} q| }qt }| r-||}n||}t	|
| d S )NFr   xmlT)r   r3  sysargvlowerr   r   r  r   r%  r@  )as_xmlquery_gpu_argsr   vr   r   r   r   r   main  s   


rJ  )r  pynvml.nvmlr  r6  r   	threadingr   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r$  r&   NVSMI_ENCODER_STATS_SESSIONCOUNTNVSMI_ENCODER_STATS_AVG_EPSNVSMI_ENCODER_STATS_AVG_LATENCYr(  r)  r  r  r  r  r  r
  r  r  r	  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r&  r#  r%  r$  r)  r*  r+  r,  r-  r1  r.  r0  r/  rS  rT  rV  r  r  r  r  r	  r
  r  r  r  r  r-  NVSMI_TEMPERATURE_MEMORYr3  r5  r7  r;  r9  r=  r>  r@  NVSMI_CLOCKS_SM_CURrD  NVSMI_CLOCKS_VIDEO_CURrF  rH  rI  rK  rL  rN  rO  rV  r\  rP  rS  r  r  r   NVML_BRAND_UNKNOWNNVML_BRAND_QUADRONVML_BRAND_TESLANVML_BRAND_NVSNVML_BRAND_GRIDNVML_BRAND_GEFORCENVML_BRAND_TITANNVML_BRAND_NVIDIA_VAPPSNVML_BRAND_NVIDIA_VPCNVML_BRAND_NVIDIA_VCSNVML_BRAND_NVIDIA_VWSNVML_BRAND_NVIDIA_VGAMINGNVML_BRAND_QUADRO_RTXNVML_BRAND_NVIDIA_RTXNVML_BRAND_NVIDIANVML_BRAND_GEFORCE_RTXNVML_BRAND_TITAN_RTXr  r   r   rJ  r   r   r   r   <module>   s  		
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	  
 
 
	
                    <
