o
    ۾is                     @   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rNe  dS 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 N)r   r   cuMemGetInfor   r   value)selffreetotal r   _/home/ubuntu/.local/lib/python3.10/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 dS )zt
        Skip the current test if the compute capability of the device is
        less than `min_required`.
        r   N)r   current_contextdevicecompute_capabilityskipTest)r   min_requiredreasonctxcc_majorr   r   r   skip_if_cc_major_lt   s
   z$TestManagedAlloc.skip_if_cc_major_ltc                 C      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   r    )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   memallocmanagednpr.   uint8itemsizendarrayr   synchronize
assertTrueall)r   memory_factorr+   total_mem_sizen_bytesr   memr.   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 d S )N   r         ?)r   gridr-   )xir   r   r   kerneli   s   
z4TestManagedAlloc._test_managed_array.<locals>.kernel)
   rH   rC   )
r   managed_arrayr3   doublefillr8   r9   jitr   r7   )r   r+   r?   rG   r   r   r   _test_managed_arrayb   s   

z$TestManagedAlloc._test_managed_arrayc                 C   s   |    d S r   )rM   )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*   )rM   r   r$   r   r   r   test_managed_array_attach_hostw   s   z/TestManagedAlloc.test_managed_array_attach_hostN)T)__name__
__module____qualname__r   r   r&   r   skipr(   r,   r#   rM   rN   rO   r   r   r   r   r   
   s    


r   __main__)numpyr3   ctypesr   r   numba.cuda.cudadrv.driverr   r   r   numbar   numba.cuda.testingr   r	   r
   r   numba.tests.supportr   r   rP   mainr   r   r   r   <module>   s    q