72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
import acl
|
|
from atlas_utils.constants import *
|
|
from atlas_utils.lib.atlasutil_so import libatlas
|
|
|
|
def check_ret(message, ret):
|
|
if ret != ACL_ERROR_NONE:
|
|
raise Exception("{} failed ret={}"
|
|
.format(message, ret))
|
|
|
|
def copy_data_device_to_host(device_data, data_size):
|
|
host_buffer, ret = acl.rt.malloc_host(data_size)
|
|
if ret != ACL_ERROR_NONE:
|
|
print("Malloc host memory failed, error: ", ret)
|
|
return None
|
|
|
|
ret = acl.rt.memcpy(host_buffer, data_size,
|
|
device_data, data_size,
|
|
ACL_MEMCPY_DEVICE_TO_HOST)
|
|
if ret != ACL_ERROR_NONE:
|
|
print("Copy device data to host memory failed, error: ", ret)
|
|
acl.rt.free_host(host_buffer)
|
|
return None
|
|
|
|
return host_buffer
|
|
|
|
def copy_data_device_to_device(device_data, data_size):
|
|
device_buffer, ret = acl.rt.malloc(data_size, ACL_MEM_MALLOC_NORMAL_ONLY)
|
|
if ret != ACL_ERROR_NONE:
|
|
print("Malloc device memory failed, error: ", ret)
|
|
return None
|
|
|
|
ret = acl.rt.memcpy(device_buffer, data_size,
|
|
device_data, data_size,
|
|
ACL_MEMCPY_DEVICE_TO_DEVICE)
|
|
if ret != ACL_ERROR_NONE:
|
|
print("Copy device data to device memory failed, error: ", ret)
|
|
acl.rt.free(device_buffer)
|
|
return None
|
|
|
|
return device_buffer
|
|
|
|
def copy_data_host_to_device(host_data, data_size):
|
|
device_buffer, ret = acl.rt.malloc(data_size, ACL_MEM_MALLOC_NORMAL_ONLY)
|
|
if ret != ACL_ERROR_NONE:
|
|
print("Malloc device memory failed, error: ", ret)
|
|
return None
|
|
|
|
ret = acl.rt.memcpy(device_buffer, data_size,
|
|
host_data, data_size,
|
|
ACL_MEMCPY_HOST_TO_DEVICE)
|
|
if ret != ACL_ERROR_NONE:
|
|
print("Copy device data to device memory failed, error: ", ret)
|
|
acl.rt.free(device_buffer)
|
|
return None
|
|
|
|
return device_buffer
|
|
|
|
def align_up(value, align):
|
|
return int(int((value + align - 1) / align) * align)
|
|
|
|
def align_up16(value):
|
|
return align_up(value, 16)
|
|
|
|
def align_up2(value):
|
|
return align_up(value, 2)
|
|
|
|
def yuv420sp_size(width, height):
|
|
return width * height * 3 // 2
|
|
|
|
def unpack_bytes(dest, dest_size, src, src_size):
|
|
libatlas.UnpackFloatByteArray(dest, dest_size, src, src_size)
|