a
    
d,                     @   sX   d dl mZ d dlZd dlmZmZ d dlZd dlZG dd deZ	e
dkrTe  dS )    )cudaN)skip_on_cudasimCUDATestCasec                   @   sv   e Zd Zeeejdk ddd Ze	ddd Z
eeejdk ddd	 Zeeejdk dd
d ZdS )TestMultiGPUContext   zneed more than 1 gpusc           
   	   C   s  t ddd }dd }d}tj|tjd}tj|tjd}t jd " |d	|f || W d    n1 sp0    Y  ||| |d	|f || ||| t jd  tj|tjd}tj|tjd}|d	|f || t jd	 B tj|tjd}tj|tjd}	|d	|f ||	 W d    n1 s20    Y  W d    n1 sR0    Y  ||| |||	 tj|tjd}tj|tjd}|d	|f || ||| d S )
Nzvoid(float64[:], float64[:])c                 S   s(   t d}||jk r$| | d ||< d S N   r   Zgridsize)inpouti r   n/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/numba/cuda/tests/cudapy/test_multigpu.pycopy_plus_1   s    

z>TestMultiGPUContext.test_multigpu_context.<locals>.copy_plus_1c                 S   s   t j| d | d S r   )nptestingassert_equal)r   r   r   r   r   check   s    z8TestMultiGPUContext.test_multigpu_context.<locals>.check    Zdtyper   r   )r   jitr   arangefloat64gpus)
selfr   r   NABZA0B0A1ZB1r   r   r   test_multigpu_context	   s2    
0

R

z)TestMultiGPUContext.test_multigpu_contextz+Simulator does not support multiple threadsc                    s   dd t td d}d g|  fddt|D }|D ]}|  qD|D ]}|  qVD ]}t|tr||qh| 	| qhd S )Nc              
   S   sz   z0|  |  }W d    n1 s$0    Y  W n, ty\ } z|||< W Y d }~n"d }~0 0 t|tdk||< d S )N
   )copy_to_host	Exceptionr   allr   )ZgpudAresultsZridxarrer   r   r   work4   s    *z4TestMultiGPUContext.test_multithreaded.<locals>.workr"   c                    s&   g | ]}t jtjj |fd qS ))targetargs)	threadingThreadr   r   current).0r   r&   r'   r*   r   r   
<listcomp>C   s   z:TestMultiGPUContext.test_multithreaded.<locals>.<listcomp>)
r   	to_devicer   r   rangestartjoin
isinstanceBaseException
assertTrue)r   Znthreadsthreadsthrr   r1   r   test_multithreaded2   s    



z&TestMultiGPUContext.test_multithreadedc                 C   s~  t jdd }tjdtjd}t jd  t |}W d    n1 sH0    Y  t jd  t |}W d    n1 s|0    Y  t jd  |d |d W d    n1 s0    Y  t jd  |d |d W d    n1 s0    Y  t jd & tj|	 |d  W d    n1 s.0    Y  t jd & tj|	 |d  W d    n1 sp0    Y  d S )	Nc                 S   s(   t d}|| jk r$| |  |7  < d S r   r	   )r(   valr   r   r   r   vector_add_scalarU   s    

z@TestMultiGPUContext.test_with_context.<locals>.vector_add_scalarr"   r   r   r   )r   r"   r   )
r   r   r   r   float32r   r3   r   r   r#   )r   r?   hostarrarr1arr2r   r   r   test_with_contextR   s    
((,,6z%TestMultiGPUContext.test_with_contextc                 C   s  t jd , t  }|ds(| d W d    n1 s<0    Y  tjdtjd}t jd  t |}W d    n1 s0    Y  t jd   t t	|}W d    n1 s0    Y  t jd , |
| tj| | W d    n1 s0    Y  d S )Nr   r   z!Peer access between GPUs disabledr"   r   )r   r   Zcurrent_contextZcan_access_peerZskipTestr   r   r@   r3   Z
zeros_likeZcopy_to_devicer   r   r#   )r   ctxrA   rB   rC   r   r   r   test_with_context_peer_copyn   s    
((.
z/TestMultiGPUContext.test_with_context_peer_copyN)__name__
__module____qualname__unittestZskipIflenr   r   r!   r   r=   rD   rF   r   r   r   r   r      s   
(

r   __main__)Znumbar   numpyr   Znumba.cuda.testingr   r   r-   rJ   r   rG   mainr   r   r   r   <module>   s    