import _ctypes import sys from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) #Py2 and Py3 common types register_type_recognizers( { int: ctypes.c_long, bool: ctypes.c_bool, float: ctypes.c_double, str: lambda t: ctypes.c_char(t.encode()) if len(t) == 1 else ctypes.c_char_p(t.encode()), type(None): lambda t: None } ) import sys if sys.maxsize > 2 ** 32: X64_BIT = True else: # Python alias c_int to c_long on 32 bit platforms X64_BIT = False register_type_codegenerators({ ctypes.c_short: lambda t: "short",
import types import ctypes import _ctypes import sys from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) if sys.version_info >= (3, 0): register_type_recognizers({ int: lambda t: ctypes.c_long(t), bool: lambda t: ctypes.c_bool(t), float: lambda t: ctypes.c_double(t), str: lambda t: ctypes.c_char(str.encode(t)) if len(t) == 1 else ctypes.c_char_p(str.encode(t)), type(None): lambda t: None, }) register_type_codegenerators({ ctypes.c_int: lambda t: "int", ctypes.c_long: lambda t: "long", ctypes.c_float: lambda t: "float", ctypes.c_double: lambda t: "double", ctypes.c_char: lambda t: "char", ctypes.c_char_p: lambda t: "char*", ctypes.c_void_p: lambda t: "void*", ctypes.c_bool: lambda t: "bool", ctypes.c_ulong: lambda t: "size_t", type(None): lambda n: "void",
from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) def codegen_ndptr(ndptr): prefix = "" if getattr(ndptr, "_global", False): prefix += "__global " return prefix + "%s*" % codegen_type(ndptr._dtype_.type()) register_type_recognizers( {np.ndarray: lambda obj: np.ctypeslib.as_ctypes(obj)}) register_type_codegenerators({ # pointers np.ctypeslib._ndptr: codegen_ndptr, # boolean types np.bool8: lambda t: "bool", # signed integer types np.byte: lambda t: "char", np.short: lambda t: "short",
import numpy as np from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) def codegen_ndptr(ndptr): prefix = "" if getattr(ndptr, "_global", False): prefix += "__global " return prefix + "%s*" % codegen_type(ndptr._dtype_.type()) register_type_recognizers({ np.ndarray: lambda obj: np.ctypeslib.as_ctypes(obj) }) register_type_codegenerators({ # pointers np.ctypeslib._ndptr: codegen_ndptr, # boolean types np.bool8: lambda t: "bool", # signed integer types np.byte: lambda t: "char", np.short: lambda t: "short", np.intc: lambda t: "int", np.longlong: lambda t: "long long",
import llvm.core llvm.core.load_library_permanently(libOpenCL) except: log.warn("Failed to load OpenCL runtime.") import pycl from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) register_type_recognizers({}) register_type_codegenerators({ pycl.cl_context: lambda t: "cl_context", pycl.cl_command_queue: lambda t: "cl_command_queue", pycl.cl_kernel: lambda t: "cl_kernel", pycl.cl_mem: lambda t: "cl_mem", }) devices_context_queue_map = {} def get_context_and_queue_from_devices(devices): key = tuple(device.vendor_id for device in devices) try: return devices_context_queue_map[key]
return prefix + "%s*" % codegen_type(ndptr._dtype_.type()) register_type_recognizers({ np.ndarray: lambda obj: np.ctypeslib.as_ctypes(obj), np.bool8: ct.c_bool, # signed integer types np.byte: ct.c_char, np.short: ct.c_short, np.intc: ct.c_int, np.longlong: ct.c_longlong, # technically not universally compatible np.int8: ct.c_char, np.int16: ct.c_short, np.int32: ct.c_int, np.int64: ct.c_long, # unsigned integer types np.ubyte: ct.c_ubyte, np.ushort: ct.c_ushort, np.uintc: ct.c_uint, np.ulonglong: ct.c_ulonglong, # floating point types np.single: ct.c_float, np.float32: ct.c_float, np.double: ct.c_double, np.float64: ct.c_double, }) register_type_codegenerators({
from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) #Py2 and Py3 common types register_type_recognizers({ int: ctypes.c_long, bool: ctypes.c_bool, float: ctypes.c_double, str: lambda t: ctypes.c_char(t.encode()) if len(t) == 1 else ctypes.c_char_p(t.encode()), type(None): lambda t: None }) import sys if sys.maxsize > 2**32: X64_BIT = True else: # Python alias c_int to c_long on 32 bit platforms X64_BIT = False
log = logging.getLogger(__name__) import ctree if ctree.OCL_ENABLED: import pycl from ctree.types import ( codegen_type, register_type_recognizers, register_type_codegenerators, ) register_type_recognizers({ }) register_type_codegenerators({ pycl.cl_context: lambda t: "cl_context", pycl.cl_command_queue: lambda t: "cl_command_queue", pycl.cl_kernel: lambda t: "cl_kernel", pycl.cl_mem: lambda t: "cl_mem", }) devices_context_queue_map = {} def get_context_and_queue_from_devices(devices): key = tuple(device.vendor_id for device in devices) try:
register_type_recognizers({ np.ndarray: lambda obj: np.ctypeslib.as_ctypes(obj), np.bool8: ct.c_bool, # signed integer types np.byte: ct.c_char, np.short: ct.c_short, np.intc: ct.c_int, np.longlong: ct.c_longlong, # technically not universally compatible np.int8: ct.c_char, np.int16: ct.c_short, np.int32: ct.c_int, np.int64: ct.c_long, # unsigned integer types np.ubyte: ct.c_ubyte, np.ushort: ct.c_ushort, np.uintc: ct.c_uint, np.ulonglong: ct.c_ulonglong, # floating point types np.single: ct.c_float, np.float32: ct.c_float, np.double: ct.c_double, np.float64: ct.c_double, })