U
    ?hs                     @   s   d dl Zd dlmZmZ d dlmZmZmZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZ edeed	G d
d deZedkre  dS )    N)byrefc_size_t)device_memsetdriverUSE_NV_BINDING)cuda)unittestContextResettingTestCase)skip_on_cudasimskip_on_arm)
linux_onlyz,CUDA Driver API unsupported in the simulatorz5Managed Alloc support is experimental/untested on ARMc                   @   s^   e Zd Zdd Zdd Zdd Zejdd Zd	d
 Z	dddZ
dddZdd Zdd ZdS )TestManagedAllocc                 C   s>   t rt \}}|S t }t }tt|t| |jS d S N)r   r   ZcuMemGetInfor   r   value)selffreetotal r   ]/var/www/html/venv/lib/python3.8/site-packages/numba/cuda/tests/cudadrv/test_managed_alloc.pyget_total_gpu_memory   s    z%TestManagedAlloc.get_total_gpu_memoryc                 C   s*   t  }|jjd }||k r&| | dS )zt
        Skip the current test if the compute capability of the device is
        less than `min_required`.
        r   N)r   current_contextZdeviceZcompute_capabilityZskipTest)r   Zmin_requiredreasonctxZcc_majorr   r   r   skip_if_cc_major_lt   s    z$TestManagedAlloc.skip_if_cc_major_ltc                 C   s   d}|  d| | d d S )Nz*Managed memory unsupported prior to CC 3.0   g      ?r   _test_managed_alloc_driverr   msgr   r   r   (test_managed_alloc_driver_undersubscribe0   s    z9TestManagedAlloc.test_managed_alloc_driver_undersubscribec                 C   s   d}|  d| | d d S )Nz>Oversubscription of managed memory unsupported prior to CC 6.0   g       @r   r   r   r   r   'test_managed_alloc_driver_oversubscribe=   s    z8TestManagedAlloc.test_managed_alloc_driver_oversubscribec                 C   s"   d}|  d| | jddd d S )N>Host attached managed memory is not accessible prior to CC 6.0r    g{Gz?Fattach_globalr   r   r   r   r   %test_managed_alloc_driver_host_attachC   s    z6TestManagedAlloc.test_managed_alloc_driver_host_attachTc                 C   s   |   }t|| }t }|j||d}ttj}||j }tj	|||d}	d}
t
||
| |  | t|	|
k d S )Nr#   )shapedtypebuffer   )r   intr   r   Zmemallocmanagednpr'   Zuint8itemsizeZndarrayr   synchronize
assertTrueall)r   Zmemory_factorr$   Ztotal_mem_sizeZn_bytesr   Zmemr'   Zn_elemsarymagicr   r   r   r   J   s    
z+TestManagedAlloc._test_managed_alloc_driverc                 C   sl   t jdtjd}|d | t|dk t ddd }|d | t  	  | t|dk d S )	Nd   )r'   gw/^@zvoid(double[:])c                 S   s$   t d}|| jd k r d| |< d S )N   r         ?)r   gridr&   )xir   r   r   kerneli   s    
z4TestManagedAlloc._test_managed_array.<locals>.kernel)
   r9   r4   )
r   Zmanaged_arrayr+   doublefillr.   r/   Zjitr   r-   )r   r$   r0   r8   r   r   r   _test_managed_arrayb   s    

z$TestManagedAlloc._test_managed_arrayc                 C   s   |    d S r   )r<   )r   r   r   r    test_managed_array_attach_globalt   s    z1TestManagedAlloc.test_managed_array_attach_globalc                 C   s(   |    d}| d| | j dd d S )Nr"   r    Fr#   )r<   r   r   r   r   r   test_managed_array_attach_hostw   s    z/TestManagedAlloc.test_managed_array_attach_hostN)T)T)__name__
__module____qualname__r   r   r   r   skipr!   r%   r   r<   r=   r>   r   r   r   r   r   
   s   


r   __main__)numpyr+   ctypesr   r   Znumba.cuda.cudadrv.driverr   r   r   Znumbar   Znumba.cuda.testingr   r	   r
   r   Znumba.tests.supportr   r   r?   mainr   r   r   r   <module>   s   q