ó
\K]c           @   s   d  d l  m Z d  d l Z d  d l  m Z d  d l m Z m Z d  d l	 Z	 d e e j
 f d     YZ e d k r e j   n  d S(   i˙˙˙˙(   t   cudaN(   t   unittest_support(   t   skip_on_cudasimt   SerialMixint   TestMultiGPUContextc           B   sq   e  Z e j e e j  d  k  d  d    Z e d  d    Z	 e j e e j  d  k  d  d    Z
 RS(   i   s   need more than 1 gpusc   
      C   sÛ  t  j d  d    } d   } d } t j | d t j } t j | d t j } t  j d  | d | f | |  Wd  QX| | |  | d | f | |  | | |  t  j d § t j | d t j } t j | d t j } | d | f | |  t  j d L t j | d t j } t j | d t j }	 | d | f | |	  Wd  QXWd  QX| | |  | | |	  t j | d t j } t j | d t j } | d | f | |  | | |  d  S(   Ns   void(float64[:], float64[:])c         S   s7   t  j d  } | | j k  r3 |  | d | | <n  d  S(   Ni   (   R    t   gridt   size(   t   inpt   outt   i(    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   copy_plus_1   s    c         S   s   t  j j |  d |  d  S(   Ni   (   t   npt   testingt   assert_equal(   R   R   (    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   check   s    i    t   dtypei    i   (   R    t   jitR   t   aranget   float64t   gpus(
   t   selfR
   R   t   Nt   At   Bt   A0t   B0t   A1t   B1(    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   test_multigpu_context	   s0    	#s+   Simulator does not support multiple threadsc   	   
   C   sç   d   } t  j t j d   } d } d  g | } g  t |  D]0 } t j d | d t  j j	 | | | f  ^ qA } x | D] } | j
   q~ Wx | D] } | j   q Wx3 | D]+ } t | t  rÒ |  q´ |  j |  q´ Wd  S(   Nc         S   sc   y |   | j    } Wd  QXWn t k
 r< } | | | <n# Xt j | t j d  k  | | <d  S(   Ni
   (   t   copy_to_hostt   BaseExceptionR   t   allR   (   t   gput   dAt   resultst   ridxt   arrt   e(    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   work5   s    i
   t   targett   args(   R    t	   to_deviceR   R   t   Nonet   ranget	   threadingt   ThreadR   t   currentt   startt   joint
   isinstanceR   t
   assertTrue(	   R   R&   R!   t   nthreadsR"   R	   t   threadst   tht   r(    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   test_multithreaded3   s    	@	c         C   s^  t  j d    } t j d d t j } t  j d  t  j |  } Wd  QXt  j d  t  j |  } Wd  QXt  j d  | d | d  Wd  QXt  j d  | d | d  Wd  QXt  j d " t j j | j	   | d  Wd  QXt  j d " t j j | j	   | d  Wd  QXt  j d / | j
 |  t j j | j	   | d  Wd  QXd  S(	   Nc         S   s5   t  j d  } | |  j k  r1 |  | c | 7<n  d  S(   Ni   (   R    R   R   (   R$   t   valR	   (    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   vector_add_scalarX   s    i
   R   i    i   i   (   i   i
   (   i   i
   (   R    R   R   R   t   float32R   R)   R   R   R   t   copy_to_device(   R   R9   t   hostarrt   arr1t   arr2(    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   test_with_contextU   s"    ##(   t   __name__t
   __module__t   unittestt   skipIft   lenR    R   R   R   R7   R?   (    (    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyR      s   **"t   __main__(   t   numbaR    t   numpyR   R   RB   t   numba.cuda.testingR   R   R,   t   TestCaseR   R@   t   main(    (    (    sD   lib/python2.7/site-packages/numba/cuda/tests/cudapy/test_multigpu.pyt   <module>   s   p