U
    hâËd$  ã                   @   s„   d dl Zd dlmZmZmZ d dlmZmZ d dl	m
Z
 e
jrHd\ZZnd\ZZee ZeefZG dd„ deƒZed	kr€e ¡  dS )
é    N)ÚcudaÚfloat32Úvoid)ÚunittestÚCUDATestCase)Úconfig)é   é   )é2   é    c                   @   s   e Zd Zdd„ ZdS )ÚTestCudaMatMulc           
   
   C   s*  t  ttd d …d d d…f td d …d d d…f td d …d d d…f ƒ¡dd„ ƒ}tj d¡ tjtj ttf¡tjd�}tjtj ttf¡tjd�}t 	|¡}t  
¡ }| ¡ �T t  ||¡}t  ||¡}t  ||¡}|ttfttf|f |||ƒ | ||¡ W 5 Q R X t ||¡}	tjj||	dd� d S )Né   c                 S   s<  t jjttd�}t jjttftd�}t jj}t jj}t j	j}t j	j}t j
j}	t j
j}
|||	  }|||
  }tdƒ}ttƒD ]š}|tk rÈ|tk rÈ| |||t  f |||f< |||t  |f |||f< t  ¡  |tk �r|tk �rttƒD ] }||||f |||f  7 }qìt  ¡  q||tk �r8|tk �r8||||f< d S )N)ÚshapeÚdtyper   )r   ZsharedÚarrayÚSM_SIZEr   ÚtpbZ	threadIdxÚxÚyZblockIdxZblockDimÚrangeÚbpgÚnZsyncthreads)ÚAÚBÚCZsAZsBZtxÚtyZbxZbyÚbwZbhr   r   ÚaccÚiÚj© r    ú\/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/cuda/tests/cudapy/test_matmul.pyÚcu_square_matrix_mul   s,    
z6TestCudaMatMul.test_func.<locals>.cu_square_matrix_mulé*   )r   gñhãˆµøä>)Zrtol)r   Zjitr   r   ÚnpÚrandomÚseedr   r   Z
empty_likeÚstreamZauto_synchronizeZ	to_devicer   r   Zcopy_to_hostÚdotÚtestingZassert_allclose)
Úselfr"   r   r   r   r'   ZdAZdBZdCZCansr    r    r!   Ú	test_func   s    F


zTestCudaMatMul.test_funcN)Ú__name__Ú
__module__Ú__qualname__r+   r    r    r    r!   r      s   r   Ú__main__)Únumpyr$   Znumbar   r   r   Znumba.cuda.testingr   r   Z
numba.corer   ZENABLE_CUDASIMr   r   r   r   r   r,   Úmainr    r    r    r!   Ú<module>   s   
8