B
     \F              	   @   s   d dl mZmZ d dlZd dlmZ dZdZdZdZ	ee	 Z
dZdZee Zd	Zed
dddddddgZdd Zi Zded< ded< ded< ded< dS )    )divisionprint_functionN)
namedtuple   @   i   i   
      _limitsallowed_wave_due_to_sgprallowed_wave_due_to_vgprallowed_waveallowed_vgpr_per_workitem	occupancyreasonssuggestionsc          	   C   s   dd }|dkr|nd}|dkr$|nd}| t  }||t }|t }t| }t| }t|t|}	|t| t }
t }||k r|d ||k r|d |	|k r|d | tkr|d d	d
 t	|D }|rdn|t  }|t
 }t|||	|
|||dS )Nc             S   s   t t| S )N)intmathZceil)x r   6lib/python3.7/site-packages/numba/roc/gcn_occupancy.py_ceil   s    z#get_limiting_factors.<locals>._ceilr      r
   r   r   
group_sizec             S   s   g | ]}t | qS r   )_suggestions).0rr   r   r   
<listcomp>9   s    z(get_limiting_factors.<locals>.<listcomp>)r
   r   r   r   r   r   r   )simd_per_cu	wave_sizesgpr_per_simdvgpr_per_simdminmax_wave_countsetaddmax_group_sizesortedmax_inflight_wave_per_cur	   )r   Zvgpr_per_workitemZsgpr_per_waver   Zworkitem_per_simdZrequired_wave_count_per_simdZrequired_vgpr_per_waver
   r   r   r   r   r   Zinflight_wave_per_cur   r   r   r   get_limiting_factors   s<    



r(   z;* Cannot allocate enough sGPRs for all resident wavefronts.z;* Cannot allocate enough vGPRs for all resident wavefronts.z?* Launch requires too many wavefronts. Try reducing group-size.z* Exceeds max group size (256).r   )Z
__future__r   r   r   collectionsr   r   r   Zvector_register_file_sizeZbyte_per_VGPRr    r   r"   r'   r%   r	   r(   r   r   r   r   r   <module>   s0   +