§
    ŠŠtjx  ã                   ó:   — d dl Z d dlmZ dgZ G d„ d¦  «        ZdS )é    N)ÚdtypeÚ	GPULimitsc                   óx   — e Zd ZdZdej        fd„Zdedefd„Z	dedefd„Z
	 dded	edefd
„Zdefd„Zdefd„ZdS )r   a  Utility class that provides the theoretical limits of Nvidia GPU devices. The
    limits don't take into account thermal throttling (assume that the GPU run at its
    peak rated frequency). This is because user hardware configuration may influence
    power behavior.
    Útarget_devicec                 ó¦   — t           j                             |¦  «        | _        t	          | j        j        › | j        j        › �¦  «        | _        d S )N)ÚtorchÚcudaÚget_device_propertiesÚdevice_propertiesÚintÚmajorÚminorÚcompute_capability)Úselfr   s     úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/cuda/_device_limits.pyÚ__init__zGPULimits.__init__   sP   € õ "'¤×!AÒ!AÀ-Ñ!PÔ!PˆÔõ #&ØÔ%Ô+ÐK¨TÔ-CÔ-IÐKÐKñ#
ô #
ˆÔÐÐó    Ú	data_typeÚreturnc           
      ó  — ddddddddddœ	}d}|t           j        u rd| j        › �}n4|t           j        u rd| j        › �}n|t           j        u rd	| j        › �}nd
}||vrt          d| j        › d|› d�¦  «        ‚||         S )Né   é@   é    é€   )	Úfp16_80Úfp32_80Úfp64_80Úfp16_90Úfp32_90Úfp64_90Úfp16_100Úfp32_100Úfp64_100Ú Úfp16_Úfp32_Úfp64_ÚunknownúNo data for sm_ú and ú.)r   Úfloat16r   Úfloat32Úfloat64ÚRuntimeError©r   r   Úhardcoded_device_valuesÚdict_keys       r   Ú#get_fma_per_cycle_per_sm_cuda_coresz-GPULimits.get_fma_per_cycle_per_sm_cuda_cores   sÙ   € ð ØØàØØàØØð#
ð #
Ðð ˆØ�œÐ%Ð%Ø8˜tÔ6Ð8Ð8ˆHˆHØ�%œ-Ð'Ð'Ø8˜tÔ6Ð8Ð8ˆHˆHØ�%œ-Ð'Ð'Ø8˜tÔ6Ð8Ð8ˆHˆHà ˆHàÐ2Ð2Ð2ÝØL $Ô"9ÐLÐLÀ	ÐLÐLÐLñô ð ð ' xÔ0Ð0r   c                 ór  — ddddddddddddddœ}d	}|t           j        u rd
| j        › �}nf|t           j        u rd
| j        › �}nM|t           j        u rd| j        › �}n4|t           j        u rd| j        › �}n|t           j        u rd| j        › �}nd}||vrt          d| j        › d|› d�¦  «        ‚||         S )Ni   i   i   r   i   r   i    )Úint8_80r   r   r   Úint8_90Úfp8_90r   r   r    Úint8_100Úfp8_100r!   r"   r$   r%   r&   Úint8_r'   r(   r)   r*   r+   )r   r,   r   Úbfloat16r-   Úint8r.   r/   r0   s       r   Ú%get_fma_per_cycle_per_sm_tensor_coresz/GPULimits.get_fma_per_cycle_per_sm_tensor_coresA   s#  € ð ØØØàØØØØàØØØð!#
ð #
Ðð$ ˆØ�œÐ%Ð%Ø8˜tÔ6Ð8Ð8ˆHˆHØ�%œ.Ð(Ð(à8˜tÔ6Ð8Ð8ˆHˆHØ�%œ-Ð'Ð'Ø8˜tÔ6Ð8Ð8ˆHˆHØ�%œ*Ð$Ð$Ø8˜tÔ6Ð8Ð8ˆHˆHØ�%œ-Ð'Ð'Ø8˜tÔ6Ð8Ð8ˆHˆHà ˆHàÐ2Ð2Ð2ÝØL $Ô"9ÐLÐLÀ	ÐLÐLÐLñô ð ð ' xÔ0Ð0r   TÚuse_tensor_coresc                 ó°   — | j         j        }| j         j        }d}|r|                      |¦  «        }n|                      |¦  «        }||z  dz  |z  dz  }|S )Nr   é   g    eÍÍA)r   Úmulti_processor_countÚ
clock_rater=   r3   )r   r   r>   Únum_smsrB   Úfma_per_cycleÚtflops_per_seconds          r   Úget_tflops_per_secondzGPULimits.get_tflops_per_secondj   sr   € ð Ô(Ô>ˆØÔ+Ô6ˆ
àˆØð 	PØ ×FÒFÀyÑQÔQˆMˆMà ×DÒDÀYÑOÔOˆMð $ mÑ3°aÑ7¸*ÑDÀsÑJÐØ Ð r   c                 ól   — t          d| j        j        z  dz  ¦  «        }| j        j        dz  }||z  }|S )Nr@   é   éè  )r   r   Úmemory_bus_widthÚmemory_clock_rate)r   Úbus_bytes_per_cycleÚmem_clock_rate_HzÚbytes_per_seconds       r   Úget_memory_bandwidth_Bpsz"GPULimits.get_memory_bandwidth_Bps{   sF   € õ " ! dÔ&<Ô&MÑ"MÐPQÑ"QÑRÔRÐØ Ô2ÔDÀtÑKÐØ.Ð1BÑBÐØÐr   c                 óP   — | j         j        }d}||z  }|| j         j        z  dz  }|S )Nr   rI   )r   rA   rB   )r   rC   Úbytes_per_cycle_per_smÚbytes_per_cycle_per_devicerN   s        r   Úget_shared_memory_bandwidth_Bpsz)GPULimits.get_shared_memory_bandwidth_Bpsƒ   sA   € ð Ô(Ô>ˆØ!$ÐØ%,Ð/EÑ%EÐ"à&¨Ô)?Ô)JÑJÈTÑQð 	ð  Ðr   N)T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Údevicer   r   r   r3   r=   ÚboolÚfloatrF   rO   rS   © r   r   r   r      sí   € € € € € ðð ð	
 e¤lð 	
ð 	
ð 	
ð 	
ð 1¸Uð 1Àsð 1ð 1ð 1ð 1ðD'1¸uð '1Èð '1ð '1ð '1ð '1ðT :>ð!ð !Øð!Ø26ð!à	ð!ð !ð !ð !ð" ¨#ð  ð  ð  ð  ð	 °ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 r   )r   Útorch._Cr   Ú__all__r   r[   r   r   ú<module>r^      se   ðØ €€€Ø Ð Ð Ð Ð Ð ð ˆ-€ðD ð D ð D ð D ð D ñ D ô D ð D ð D ð D r   