σ
\K]c           @` sΩ  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z
 d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z m Z e j j d  Z e e d  Z d	   Z d
   Z d   Z d   Z e j e d  e j e d  e d  d e f d     Y   Z  e j e d  e d  d e f d     Y  Z! d   Z" d   Z# e j e d  e j e d  e d  d e f d     Y   Z$ e% d k rΥe j&   n  d S(   i    (   t   absolute_importt   print_functiont   divisionN(   t   cuda(   t   drvapit   devicearray(   t   unittest_support(   t   skip_on_cudasimt   CUDATestCaset   linuxt   get_contextc         C` sL   y |    } Wn t  } t j   } n Xt } | } | j | | f  d  S(   N(   t   Falset	   tracebackt
   format_exct   Truet   put(   t   the_workt   result_queuet   arrt   succt   out(    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   core_ipc_handle_test   s    c         ` s#      f d   } t  | |  d  S(   Nc          ` sK   t  j t  j  }  t j   d  |  j d |   } | j   SWd  QXd  S(   Nt   shapet   dtype(   t   npR   t   intpR   t   open_ipc_arrayt   itemsizet   copy_to_host(   R   t   darr(   t   handlet   size(    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyR   #   s    (   R   (   R   R   R   R   (    (   R   R   s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   base_ipc_handle_test"   s    c         ` s      f d   } t  | |  d  S(   Nc          ` sW   t  j t  j  }    j t j   d   j |  j d |  } | j   }   j	   | S(   NR   R   (
   R   R   R   t
   open_arrayR   t   current_contextR   R   R   t   close(   R   R   R   (   R   (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyR   .   s    	
(   R   (   R   R   R   (    (   R   s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   serialize_ipc_handle_test-   s    
c      	   C` s²   ys |  g } | j    } y |   Wd  QXWn4 t k
 r_ } t |  d k rl t d   ql n Xt d   Wd  QXWn t } t j   } n Xt } | } | j | | f  d  S(   Ns   IpcHandle is already openeds   invalid exception messages   did not raise on reopen(	   R   t
   ValueErrort   strt   AssertionErrorR   R   R   R   R   (   t   ipcarrR   R   R   t   eR   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   ipc_array_test;   s     	
s   IPC only supported on Linuxs$   requires multiprocessing.get_contexts   Ipc not available in CUDASIMt   TestIpcMemoryc           B` s;   e  Z d    Z d d  Z d   Z d d  Z d   Z RS(   c         C` sυ   t  j d d t  j } t j |  } t j   } | j | j  } t | j	  } | j
 } t j d  } | j   } | | | f } | j d t d |  }	 |	 j   | j   \ }
 } |
 sΡ |  j |  n t  j j | |  |	 j d  d  S(   Ni
   R   t   spawnt   targett   argsi   (   R   t   arangeR   R   t	   to_deviceR"   t   get_ipc_handlet   gpu_datat   bytesR   R   t   mpR
   t   Queuet   ProcessR    t   startt   gett   failt   testingt   assert_equalt   join(   t   selfR   t   devarrt   ctxt   ipcht   handle_bytesR   R   R.   t   procR   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   test_ipc_handleX   s     	
c         C` sh  t  j d d t  j } t j |  } | d  k	 r@ | | } n  | j   } t j   } | j | j	  } t
 j |  } t
 j |  } |  j | j d   |  j t | j  t | j   |  j | j | j  t j d  } | j   }	 | |	 f }
 | j d t d |
  } | j   |	 j   \ } } | sD|  j |  n t  j j | |  | j d  d  S(   Ni
   R   R,   R-   R.   i   (   R   R/   R   R   R0   t   NoneR   R"   R1   R2   t   picklet   dumpst   loadst   assertIst   baset   assertEqualt   tupleR   R   R4   R
   R5   R6   R$   R7   R8   R9   R:   R;   R<   (   R=   t	   index_argR   R>   t   expectR?   R@   t   buft
   ipch_reconR   R.   RB   R   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   check_ipc_handle_serializationr   s,    "
c         C` sP   |  j    |  j  t d d    |  j  t d d   |  j  t d  d   d  S(   Ni   i   (   RP   t   sliceRD   (   R=   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   test_ipc_handle_serialization   s    
c         C` sν   t  j d d t  j } t j |  } | d  k	 r@ | | } n  | j   } | j   } t j	 d  } | j
   } | | f } | j d t d |  }	 |	 j   | j   \ }
 } |
 sΙ |  j |  n t  j j | |  |	 j d  d  S(   Ni
   R   R,   R-   R.   i   (   R   R/   R   R   R0   RD   R   R1   R4   R
   R5   R6   R*   R7   R8   R9   R:   R;   R<   (   R=   RL   R   R>   RM   R@   R?   R   R.   RB   R   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   check_ipc_array   s     
c         C` sP   |  j    |  j  t d d    |  j  t d d   |  j  t d  d   d  S(   Ni   i   (   RS   RQ   RD   (   R=   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   test_ipc_array±   s    
N(   t   __name__t
   __module__RC   RD   RP   RR   RS   RT   (    (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyR+   T   s
   	 	s   Only on OS other than Linuxt   TestIpcNotSupportedc           B` s   e  Z d    Z RS(   c         C` sl   t  j d d t  j } t j |  } |  j t   } | j   Wd  QXt | j	  } |  j
 d |  d  S(   Ni
   R   s   OS does not support CUDA IPC(   R   R/   R   R   R0   t   assertRaisest   OSErrorR1   R&   t	   exceptiont   assertIn(   R=   R   R>   t   raisest   errmsg(    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   test_unsupportedΌ   s    (   RU   RV   R^   (    (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyRW   Ή   s   c         ` s#      f d   } t  | |  d  S(   Nc       	   ` s΅   t  j   ’ t  j j   }   j |   } t d j |  |    j |   }  j t	 j
 t	 j  j } t	 j | d t	 j } t  j j | | d  j  j   Wd  QX| S(   Ns   can_access_peer {} {}R   R   (   R   t   gpust   devicesR
   t   can_access_peert   printt   formatt   open_stagedR   R   R   R   R   t   zerost   drivert   device_to_hostR#   (   t   this_ctxt
   can_accesst	   deviceptrt   arrsizet	   hostarray(   t
   device_numR   (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyR   Ζ   s    	(   R   (   R   Rm   R   R   (    (   Rm   R   s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   staged_ipc_handle_testΕ   s    c   	      C` sβ   y£ t  j |  t  j j   } t | j  |  g } | j   } y |   Wd  QXWn4 t k
 r } t |  d k r t	 d   q n Xt	 d   Wd  QXWd  QXWn t
 } t j   } n Xt } | } | j | | f  d  S(   Ns   IpcHandle is already openeds   invalid exception messages   did not raise on reopen(   R   R_   R`   R
   Rb   t   deviceR   R%   R&   R'   R   R   R   R   R   (	   R(   Rm   R   Rh   R   R   R)   R   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   staged_ipc_array_testΧ   s&    	
t   TestIpcStagedc           B` s   e  Z d    Z d   Z RS(   c         C` sf  t  j d d t  j } t j |  } t j d  } | j   } t j   } | j	 | j
  } t j |  } t j |  } |  j | j d   |  j t | j  t | j   |  j | j | j  x t t t j   D] }	 | |	 | f }
 | j d t d |
  } | j   | j   \ } } | j d  | sK|  j |  qί t  j j | |  qί Wd  S(   Ni
   R   R,   R-   R.   i   (    R   R/   R   R   R0   R4   R
   R5   R"   R1   R2   RE   RF   RG   RH   RI   RD   RJ   RK   R   R   t   ranget   lenR_   R6   Rn   R7   R8   R<   R9   R:   R;   (   R=   R   R>   t   mpctxR   R?   R@   RN   RO   Rm   R.   RB   R   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   test_stagedφ   s(    "
c         C` sε   xή t  t t j   D]Η } t j j d  } t j |  } | j   } t j	 d  } | j
   } | | | f } | j d t d |  } | j   | j   \ }	 }
 | j d  |	 sΚ |  j |
  q t j j | |
  q Wd  S(   Ni
   R,   R-   R.   i   (   Rr   Rs   R   R_   R   t   randomR0   R1   R4   R
   R5   R6   Rp   R7   R8   R<   R9   R:   R;   (   R=   Rm   R   R>   R@   R?   R   R.   RB   R   R   (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyRT     s    
(   RU   RV   Ru   RT   (    (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyRq   ς   s   	t   __main__('   t
   __future__R    R   R   t   syst   multiprocessingR4   R   RE   t   numpyR   t   numbaR   t   numba.cuda.cudadrvR   R   R   t   unittestt   numba.cuda.testingR   R   t   platformt
   startswitht	   not_linuxt   hasattrt   has_mp_get_contextR   R    R$   R*   t   skipIft
   skipUnlessR+   RW   Rn   Rp   Rq   RU   t   main(    (    (    s?   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_ipc.pyt   <module>   s<   				b
		5