σ
\K]c           @` sπ   d  Z  d d l m Z m Z m Z d d l Z d d l m Z d d l m	 Z m
 Z d e f d     YZ e   Z [ d	 e f d
     YZ d a d   Z d   Z d   Z e j   Z d d  Z d d  Z d   Z d   Z d   Z d S(   s!   
Expose each GPU device directly
i    (   t   print_functiont   absolute_importt   divisionN(   t
   servicelibi   (   t   hsat   Contextt   _culistc           B` sz   e  Z d  Z d   Z e d    Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z e
 Z d	   Z e d
    Z RS(   s)   A thread local list of GPU instances
    c         C` s   d  |  _ d  S(   N(   t   Nonet   _lst(   t   self(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __init__   s    c         C` s"   |  j  s |  j   |  _  n  |  j  S(   N(   R   t
   _init_gpus(   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   _gpus   s    	c         C` s1   g  } x$ t  j D] } | j t |   q W| S(   N(   t   drivert
   componentst   appendt   CU(   R	   t   gpust   com(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR      s    c         C` s   |  j  | S(   N(   R   (   R	   t   item(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __getitem__   s    c         C` s   |  j  j |  S(   N(   R   R   (   R	   R   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR       s    c         C` s   t  |  j  S(   N(   t   lenR   (   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __len__#   s    c         C` s   t  |  j  S(   N(   t   boolR   (   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __nonzero__&   s    c         C` s   t  |  j  S(   N(   t   iterR   (   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __iter__)   s    c         C` s   x |  D] } | j    q Wd  S(   N(   t   reset(   R	   t   gpu(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR   .   s    c         C` s   t  j S(   s>   Get the current GPU object associated with the thread
        (   t   _custackt   top(   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   current2   s    (   t   __name__t
   __module__t   __doc__R
   t   propertyR   R   R   R   R   R   R   t   __bool__R   R   (    (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR   
   s   								R   c           B` sG   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z RS(   c         C` s   | |  _  d  |  _ d  S(   N(   t   _cuR   t   _context(   R	   t   cu(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR
   >   s    	c         C` s.   | j  d  r t |   n  t |  j |  S(   s   Redirect to self._gpu
        t   _(   t
   startswitht   AttributeErrort   getattrR%   (   R	   t   key(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __getattr__B   s    c         C` s   t  |  j  S(   N(   t   reprR%   (   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __repr__I   s    c         C` s+   |  j  d k r$ |  j j   |  _  n  |  j  S(   s@   Associate the context of this GPU to the running thread
        N(   R&   R   R%   t   create_context(   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   associate_contextL   s    c         C` s   |  j    t j |   d  S(   N(   R1   R   t   push(   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt	   __enter__U   s    
c         C` s0   t    |  k s t  |  j j   t j   d  S(   N(   t   _get_devicet   AssertionErrorR&   t   popR   (   R	   t   exc_typet   exc_valt   exc_tb(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   __exit__Y   s    c         C` s&   |  j  r" |  j  j   d  |  _  n  d  S(   N(   R&   R   R   (   R	   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR   ^   s    	(	   R    R!   R
   R-   R/   R1   R3   R:   R   (    (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR   =   s   							c          C` sH   t  d  k rD g  t j D] }  |  j s |  ^ q d } t |  a  n  t  S(   Ni    (   t   _cpu_contextR   R   t   agentst   is_componentt   _Context(   t   at	   cpu_agent(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   get_cpu_contextg   s    )c         C` s   t  |  S(   N(   t   cus(   t   i(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   get_gpuo   s    c           C` s
   t  t  S(   N(   R   RB   (    (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   get_num_gpusr   s    c         C` s#   t  s t  j t |    n  t  j S(   s=   Get the current device or use a device by device number.
    (   R   R2   RD   R   (   t   devnum(    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR4   y   s    c         C` s   t  d |   j   S(   s]   Get the current device or use a device by device number, and
    return the HSA context.
    RF   (   R4   R1   (   RF   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   get_context   s    c          C` s&   g  t  t    D] }  t |   ^ q S(   N(   t   rangeRE   RG   (   RC   (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   get_all_contexts   s    c         ` s"   t  j      f d    } | S(   s?   
    A decorator to ensure a context for the HSA subsystem
    c          ` s   t      |  |   S(   N(   RG   (   t   argst   kws(   t   fn(    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   _require_cu_context   s    (   t	   functoolst   wraps(   RL   RM   (    (   RL   s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   require_context   s    c           C` s   t  j   t j   d  S(   N(   RB   R   R   t   clear(    (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyR      s    
(   R"   t
   __future__R    R   R   RN   t   numbaR   R   R   R   R>   t   objectR   RB   R   R   R;   RA   RD   RE   t   TLStackR   R4   RG   RI   RP   R   (    (    (    s7   lib/python2.7/site-packages/numba/roc/hsadrv/devices.pyt   <module>   s$   /	'					