numba-cuda 0.4.0__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/PKG-INFO +20 -2
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/README.md +19 -1
- numba_cuda-0.5.0/numba_cuda/VERSION +1 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/compiler.py +7 -6
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadecl.py +6 -2
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/linkable_code.py +13 -9
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/nvvm.py +6 -1
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/decorators.py +9 -2
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/dispatcher.py +13 -2
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/testing.py +11 -1
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +145 -11
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +10 -7
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/PKG-INFO +20 -2
- numba_cuda-0.4.0/numba_cuda/VERSION +0 -1
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/LICENSE +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/_version.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/api.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/api_util.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/args.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cg.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/codegen.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cpp_function_wrappers.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cuda_fp16.h +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cuda_fp16.hpp +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cuda_paths.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/devicearray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/devices.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/driver.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/drvapi.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/dummyarray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/enums.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/error.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/libs.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/mappings.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/ndarray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/nvrtc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/rtapi.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/runtime.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudaimpl.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudamath.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/descriptor.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/device_init.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/deviceufunc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/errors.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/extending.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/initialize.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/intrinsic_wrapper.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/intrinsics.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/kernels/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/kernels/reduction.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/kernels/transpose.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdevice.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdevicedecl.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdevicefuncs.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdeviceimpl.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/mathimpl.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/models.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/nvvmutils.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/printimpl.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/random.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/reshape_funcs.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/memsys.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/memsys.cuh +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/nrt.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/nrt.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/api.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/compiler.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/devices.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/driver.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/error.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/libs.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/kernel.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/kernelapi.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/reduction.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/vector_types.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator_init.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/stubs.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/target.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_events.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_init.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_mvc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_ptds.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_array.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_caching.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_casting.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_complex.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_debug.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_enums.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_errors.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_exception.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_extending.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_forall.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_globals.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_lang.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_math.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_operator.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_overload.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_powi.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_print.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_random.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_sm.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_sync.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_warning.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudasim/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudasim/support.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/cuda_include.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/error.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/jitlink.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/jitlink.ptx +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/warn.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_random.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_import.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/__init__.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/mock_numpy.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/test_nrt.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/support.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/Makefile +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/test_device_functions.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/undefined_extern.cu +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/types.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/ufuncs.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/utils.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/vector_types.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/vectorizers.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/SOURCES.txt +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/dependency_links.txt +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/requires.txt +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/top_level.txt +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/pyproject.toml +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/setup.cfg +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/setup.py +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/site-packages/_numba_cuda_redirector.pth +0 -0
- {numba_cuda-0.4.0 → numba_cuda-0.5.0}/site-packages/_numba_cuda_redirector.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: numba-cuda
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.5.0
|
4
4
|
Summary: CUDA target for Numba
|
5
5
|
Author: Anaconda Inc., NVIDIA Corporation
|
6
6
|
License: BSD 2-clause
|
@@ -27,7 +27,19 @@ tracker](https://github.com/NVIDIA/numba-cuda/issues).
|
|
27
27
|
To raise questions or initiate discussions, please use the [Numba Discourse
|
28
28
|
forum](https://numba.discourse.group).
|
29
29
|
|
30
|
-
##
|
30
|
+
## Installation with pip
|
31
|
+
|
32
|
+
```shell
|
33
|
+
pip install numba-cuda
|
34
|
+
```
|
35
|
+
|
36
|
+
## Installation with Conda
|
37
|
+
|
38
|
+
```shell
|
39
|
+
conda install -c conda-forge numba-cuda
|
40
|
+
```
|
41
|
+
|
42
|
+
## Installation from source
|
31
43
|
|
32
44
|
Install as an editable install:
|
33
45
|
|
@@ -53,3 +65,9 @@ which will show a path like:
|
|
53
65
|
```
|
54
66
|
<path to numba-cuda repo>/numba_cuda/numba/cuda/__init__.py
|
55
67
|
```
|
68
|
+
|
69
|
+
## Contributing Guide
|
70
|
+
|
71
|
+
Review the
|
72
|
+
[CONTRIBUTING.md](https://github.com/NVIDIA/numba-cuda/blob/main/CONTRIBUTING.md)
|
73
|
+
file for information on how to contribute code and issues to the project.
|
@@ -12,7 +12,19 @@ tracker](https://github.com/NVIDIA/numba-cuda/issues).
|
|
12
12
|
To raise questions or initiate discussions, please use the [Numba Discourse
|
13
13
|
forum](https://numba.discourse.group).
|
14
14
|
|
15
|
-
##
|
15
|
+
## Installation with pip
|
16
|
+
|
17
|
+
```shell
|
18
|
+
pip install numba-cuda
|
19
|
+
```
|
20
|
+
|
21
|
+
## Installation with Conda
|
22
|
+
|
23
|
+
```shell
|
24
|
+
conda install -c conda-forge numba-cuda
|
25
|
+
```
|
26
|
+
|
27
|
+
## Installation from source
|
16
28
|
|
17
29
|
Install as an editable install:
|
18
30
|
|
@@ -38,3 +50,9 @@ which will show a path like:
|
|
38
50
|
```
|
39
51
|
<path to numba-cuda repo>/numba_cuda/numba/cuda/__init__.py
|
40
52
|
```
|
53
|
+
|
54
|
+
## Contributing Guide
|
55
|
+
|
56
|
+
Review the
|
57
|
+
[CONTRIBUTING.md](https://github.com/NVIDIA/numba-cuda/blob/main/CONTRIBUTING.md)
|
58
|
+
file for information on how to contribute code and issues to the project.
|
@@ -0,0 +1 @@
|
|
1
|
+
0.5.0
|
@@ -570,16 +570,16 @@ def compile_ptx_for_current_device(pyfunc, sig, debug=None, lineinfo=False,
|
|
570
570
|
abi=abi, abi_info=abi_info)
|
571
571
|
|
572
572
|
|
573
|
-
def declare_device_function(name, restype, argtypes):
|
574
|
-
return declare_device_function_template(name, restype, argtypes).key
|
573
|
+
def declare_device_function(name, restype, argtypes, link):
|
574
|
+
return declare_device_function_template(name, restype, argtypes, link).key
|
575
575
|
|
576
576
|
|
577
|
-
def declare_device_function_template(name, restype, argtypes):
|
577
|
+
def declare_device_function_template(name, restype, argtypes, link):
|
578
578
|
from .descriptor import cuda_target
|
579
579
|
typingctx = cuda_target.typing_context
|
580
580
|
targetctx = cuda_target.target_context
|
581
581
|
sig = typing.signature(restype, *argtypes)
|
582
|
-
extfn = ExternFunction(name, sig)
|
582
|
+
extfn = ExternFunction(name, sig, link)
|
583
583
|
|
584
584
|
class device_function_template(ConcreteTemplate):
|
585
585
|
key = extfn
|
@@ -593,7 +593,8 @@ def declare_device_function_template(name, restype, argtypes):
|
|
593
593
|
return device_function_template
|
594
594
|
|
595
595
|
|
596
|
-
class ExternFunction
|
597
|
-
def __init__(self, name, sig):
|
596
|
+
class ExternFunction:
|
597
|
+
def __init__(self, name, sig, link):
|
598
598
|
self.name = name
|
599
599
|
self.sig = sig
|
600
|
+
self.link = link
|
@@ -403,16 +403,20 @@ _genfp16_binary_operator(operator.itruediv)
|
|
403
403
|
|
404
404
|
|
405
405
|
def _resolve_wrapped_unary(fname):
|
406
|
+
link = tuple()
|
406
407
|
decl = declare_device_function_template(f'__numba_wrapper_{fname}',
|
407
408
|
types.float16,
|
408
|
-
(types.float16,)
|
409
|
+
(types.float16,),
|
410
|
+
link)
|
409
411
|
return types.Function(decl)
|
410
412
|
|
411
413
|
|
412
414
|
def _resolve_wrapped_binary(fname):
|
415
|
+
link = tuple()
|
413
416
|
decl = declare_device_function_template(f'__numba_wrapper_{fname}',
|
414
417
|
types.float16,
|
415
|
-
(types.float16, types.float16,)
|
418
|
+
(types.float16, types.float16,),
|
419
|
+
link)
|
416
420
|
return types.Function(decl)
|
417
421
|
|
418
422
|
|
@@ -2,8 +2,12 @@ from .mappings import FILE_EXTENSION_MAP
|
|
2
2
|
|
3
3
|
|
4
4
|
class LinkableCode:
|
5
|
-
"""An object that
|
6
|
-
|
5
|
+
"""An object that holds code to be linked from memory.
|
6
|
+
|
7
|
+
:param data: A buffer containing the data to link.
|
8
|
+
:param name: The name of the file to be referenced in any compilation or
|
9
|
+
linking errors that may be produced.
|
10
|
+
"""
|
7
11
|
|
8
12
|
def __init__(self, data, name=None):
|
9
13
|
self.data = data
|
@@ -15,49 +19,49 @@ class LinkableCode:
|
|
15
19
|
|
16
20
|
|
17
21
|
class PTXSource(LinkableCode):
|
18
|
-
"""PTX
|
22
|
+
"""PTX source code in memory."""
|
19
23
|
|
20
24
|
kind = FILE_EXTENSION_MAP["ptx"]
|
21
25
|
default_name = "<unnamed-ptx>"
|
22
26
|
|
23
27
|
|
24
28
|
class CUSource(LinkableCode):
|
25
|
-
"""CUDA C/C++
|
29
|
+
"""CUDA C/C++ source code in memory."""
|
26
30
|
|
27
31
|
kind = "cu"
|
28
32
|
default_name = "<unnamed-cu>"
|
29
33
|
|
30
34
|
|
31
35
|
class Fatbin(LinkableCode):
|
32
|
-
"""
|
36
|
+
"""An ELF Fatbin in memory."""
|
33
37
|
|
34
38
|
kind = FILE_EXTENSION_MAP["fatbin"]
|
35
39
|
default_name = "<unnamed-fatbin>"
|
36
40
|
|
37
41
|
|
38
42
|
class Cubin(LinkableCode):
|
39
|
-
"""
|
43
|
+
"""An ELF Cubin in memory."""
|
40
44
|
|
41
45
|
kind = FILE_EXTENSION_MAP["cubin"]
|
42
46
|
default_name = "<unnamed-cubin>"
|
43
47
|
|
44
48
|
|
45
49
|
class Archive(LinkableCode):
|
46
|
-
"""An archive of objects in memory"""
|
50
|
+
"""An archive of objects in memory."""
|
47
51
|
|
48
52
|
kind = FILE_EXTENSION_MAP["a"]
|
49
53
|
default_name = "<unnamed-archive>"
|
50
54
|
|
51
55
|
|
52
56
|
class Object(LinkableCode):
|
53
|
-
"""An object file in memory"""
|
57
|
+
"""An object file in memory."""
|
54
58
|
|
55
59
|
kind = FILE_EXTENSION_MAP["o"]
|
56
60
|
default_name = "<unnamed-object>"
|
57
61
|
|
58
62
|
|
59
63
|
class LTOIR(LinkableCode):
|
60
|
-
"""An LTOIR file in memory"""
|
64
|
+
"""An LTOIR file in memory."""
|
61
65
|
|
62
66
|
kind = "ltoir"
|
63
67
|
default_name = "<unnamed-ltoir>"
|
@@ -314,7 +314,9 @@ COMPUTE_CAPABILITIES = (
|
|
314
314
|
(6, 0), (6, 1), (6, 2),
|
315
315
|
(7, 0), (7, 2), (7, 5),
|
316
316
|
(8, 0), (8, 6), (8, 7), (8, 9),
|
317
|
-
(9, 0)
|
317
|
+
(9, 0),
|
318
|
+
(10, 0), (10, 1),
|
319
|
+
(12, 0),
|
318
320
|
)
|
319
321
|
|
320
322
|
# Maps CTK version -> (min supported cc, max supported cc) inclusive
|
@@ -331,6 +333,9 @@ CTK_SUPPORTED = {
|
|
331
333
|
(12, 2): ((5, 0), (9, 0)),
|
332
334
|
(12, 3): ((5, 0), (9, 0)),
|
333
335
|
(12, 4): ((5, 0), (9, 0)),
|
336
|
+
(12, 5): ((5, 0), (9, 0)),
|
337
|
+
(12, 6): ((5, 0), (9, 0)),
|
338
|
+
(12, 8): ((5, 0), (12, 0)),
|
334
339
|
}
|
335
340
|
|
336
341
|
|
@@ -173,7 +173,7 @@ def jit(func_or_sig=None, device=False, inline=False, link=[], debug=None,
|
|
173
173
|
return disp
|
174
174
|
|
175
175
|
|
176
|
-
def declare_device(name, sig):
|
176
|
+
def declare_device(name, sig, link=None):
|
177
177
|
"""
|
178
178
|
Declare the signature of a foreign function. Returns a descriptor that can
|
179
179
|
be used to call the function from a Python kernel.
|
@@ -181,10 +181,17 @@ def declare_device(name, sig):
|
|
181
181
|
:param name: The name of the foreign function.
|
182
182
|
:type name: str
|
183
183
|
:param sig: The Numba signature of the function.
|
184
|
+
:param link: External code to link when calling the function.
|
184
185
|
"""
|
186
|
+
if link is None:
|
187
|
+
link = tuple()
|
188
|
+
else:
|
189
|
+
if not isinstance(link, (list, tuple, set)):
|
190
|
+
link = (link,)
|
191
|
+
|
185
192
|
argtypes, restype = sigutils.normalize_signature(sig)
|
186
193
|
if restype is None:
|
187
194
|
msg = 'Return type must be provided for device declarations'
|
188
195
|
raise TypeError(msg)
|
189
196
|
|
190
|
-
return declare_device_function(name, restype, argtypes)
|
197
|
+
return declare_device_function(name, restype, argtypes, link)
|
@@ -11,10 +11,11 @@ from numba.core.compiler_lock import global_compiler_lock
|
|
11
11
|
from numba.core.dispatcher import Dispatcher
|
12
12
|
from numba.core.errors import NumbaPerformanceWarning
|
13
13
|
from numba.core.typing.typeof import Purpose, typeof
|
14
|
-
|
14
|
+
from numba.core.types.functions import Function
|
15
15
|
from numba.cuda.api import get_current_device
|
16
16
|
from numba.cuda.args import wrap_arg
|
17
|
-
from numba.cuda.compiler import compile_cuda, CUDACompiler, kernel_fixup
|
17
|
+
from numba.cuda.compiler import (compile_cuda, CUDACompiler, kernel_fixup,
|
18
|
+
ExternFunction)
|
18
19
|
from numba.cuda.cudadrv import driver
|
19
20
|
from numba.cuda.cudadrv.devices import get_context
|
20
21
|
from numba.cuda.descriptor import cuda_target
|
@@ -158,6 +159,16 @@ class _Kernel(serialize.ReduceMixin):
|
|
158
159
|
|
159
160
|
self.maybe_link_nrt(link, tgt_ctx, asm)
|
160
161
|
|
162
|
+
for k, v in cres.fndesc.typemap.items():
|
163
|
+
if not isinstance(v, Function):
|
164
|
+
continue
|
165
|
+
|
166
|
+
if not isinstance(v.typing_key, ExternFunction):
|
167
|
+
continue
|
168
|
+
|
169
|
+
for obj in v.typing_key.link:
|
170
|
+
lib.add_linking_file(obj)
|
171
|
+
|
161
172
|
for filepath in link:
|
162
173
|
lib.add_linking_file(filepath)
|
163
174
|
|
@@ -115,12 +115,22 @@ def skip_on_arm(reason):
|
|
115
115
|
def skip_if_cuda_includes_missing(fn):
|
116
116
|
# Skip when cuda.h is not available - generally this should indicate
|
117
117
|
# whether the CUDA includes are available or not
|
118
|
-
|
118
|
+
cuda_include_path = libs.get_cuda_include_dir()
|
119
|
+
cuda_h = os.path.join(cuda_include_path, 'cuda.h')
|
119
120
|
cuda_h_file = (os.path.exists(cuda_h) and os.path.isfile(cuda_h))
|
120
121
|
reason = 'CUDA include dir not available on this system'
|
121
122
|
return unittest.skipUnless(cuda_h_file, reason)(fn)
|
122
123
|
|
123
124
|
|
125
|
+
def skip_if_curand_kernel_missing(fn):
|
126
|
+
cuda_include_path = libs.get_cuda_include_dir()
|
127
|
+
curand_kernel_h = os.path.join(cuda_include_path, 'curand_kernel.h')
|
128
|
+
curand_kernel_h_file = (os.path.exists(curand_kernel_h) and
|
129
|
+
os.path.isfile(curand_kernel_h))
|
130
|
+
reason = 'curand_kernel.h not available on this system'
|
131
|
+
return unittest.skipUnless(curand_kernel_h_file, reason)(fn)
|
132
|
+
|
133
|
+
|
124
134
|
def skip_if_mvc_enabled(reason):
|
125
135
|
"""Skip a test if Minor Version Compatibility is enabled"""
|
126
136
|
return unittest.skipIf(config.CUDA_ENABLE_MINOR_VERSION_COMPATIBILITY,
|
{numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_device_func.py
RENAMED
@@ -1,11 +1,14 @@
|
|
1
1
|
import re
|
2
|
-
import
|
2
|
+
import cffi
|
3
3
|
|
4
4
|
import numpy as np
|
5
5
|
|
6
|
-
from numba.cuda.testing import
|
7
|
-
|
6
|
+
from numba.cuda.testing import (skip_if_curand_kernel_missing, skip_on_cudasim,
|
7
|
+
test_data_dir, unittest, CUDATestCase)
|
8
|
+
from numba import cuda, jit, float32, int32, types
|
8
9
|
from numba.core.errors import TypingError
|
10
|
+
from numba.tests.support import skip_unless_cffi
|
11
|
+
from types import ModuleType
|
9
12
|
|
10
13
|
|
11
14
|
class TestDeviceFunc(CUDATestCase):
|
@@ -92,7 +95,7 @@ class TestDeviceFunc(CUDATestCase):
|
|
92
95
|
def add(a, b):
|
93
96
|
return a + b
|
94
97
|
|
95
|
-
mymod =
|
98
|
+
mymod = ModuleType(name='mymod')
|
96
99
|
mymod.add = add
|
97
100
|
del add
|
98
101
|
|
@@ -192,31 +195,162 @@ class TestDeviceFunc(CUDATestCase):
|
|
192
195
|
|
193
196
|
self.assertEqual(0x04010203, x[0])
|
194
197
|
|
195
|
-
|
198
|
+
|
199
|
+
times2_cu = cuda.CUSource("""
|
200
|
+
extern "C" __device__
|
201
|
+
int times2(int *out, int a)
|
202
|
+
{
|
203
|
+
*out = a * 2;
|
204
|
+
return 0;
|
205
|
+
}
|
206
|
+
""")
|
207
|
+
|
208
|
+
|
209
|
+
times4_cu = cuda.CUSource("""
|
210
|
+
extern "C" __device__
|
211
|
+
int times2(int *out, int a);
|
212
|
+
|
213
|
+
extern "C" __device__
|
214
|
+
int times4(int *out, int a)
|
215
|
+
{
|
216
|
+
int tmp;
|
217
|
+
times2(&tmp, a);
|
218
|
+
*out = tmp * 2;
|
219
|
+
return 0;
|
220
|
+
}
|
221
|
+
""")
|
222
|
+
|
223
|
+
jitlink_user_cu = cuda.CUSource("""
|
224
|
+
extern "C" __device__
|
225
|
+
int array_mutator(void *out, int *a);
|
226
|
+
|
227
|
+
extern "C" __device__
|
228
|
+
int use_array_mutator(void *out, int *a) {
|
229
|
+
array_mutator(out, a);
|
230
|
+
return 0;
|
231
|
+
}
|
232
|
+
""")
|
233
|
+
|
234
|
+
rng_cu = cuda.CUSource("""
|
235
|
+
#include <curand_kernel.h>
|
236
|
+
|
237
|
+
extern "C" __device__
|
238
|
+
int random_number(unsigned int *out, unsigned long long seed)
|
239
|
+
{
|
240
|
+
// Initialize state
|
241
|
+
curandStateXORWOW_t state;
|
242
|
+
unsigned long long sequence = 1;
|
243
|
+
unsigned long long offset = 0;
|
244
|
+
curand_init(seed, sequence, offset, &state);
|
245
|
+
|
246
|
+
// Generate one random number
|
247
|
+
*out = curand(&state);
|
248
|
+
|
249
|
+
// Report no exception
|
250
|
+
return 0;
|
251
|
+
}""")
|
252
|
+
|
253
|
+
|
254
|
+
@skip_on_cudasim('External functions unsupported in the simulator')
|
255
|
+
class TestDeclareDevice(CUDATestCase):
|
256
|
+
|
257
|
+
def check_api(self, decl):
|
196
258
|
self.assertEqual(decl.name, 'f1')
|
197
259
|
self.assertEqual(decl.sig.args, (float32[:],))
|
198
260
|
self.assertEqual(decl.sig.return_type, int32)
|
199
261
|
|
200
|
-
@skip_on_cudasim('cudasim does not check signatures')
|
201
262
|
def test_declare_device_signature(self):
|
202
263
|
f1 = cuda.declare_device('f1', int32(float32[:]))
|
203
|
-
self.
|
264
|
+
self.check_api(f1)
|
204
265
|
|
205
|
-
@skip_on_cudasim('cudasim does not check signatures')
|
206
266
|
def test_declare_device_string(self):
|
207
267
|
f1 = cuda.declare_device('f1', 'int32(float32[:])')
|
208
|
-
self.
|
268
|
+
self.check_api(f1)
|
209
269
|
|
210
|
-
@skip_on_cudasim('cudasim does not check signatures')
|
211
270
|
def test_bad_declare_device_tuple(self):
|
212
271
|
with self.assertRaisesRegex(TypeError, 'Return type'):
|
213
272
|
cuda.declare_device('f1', (float32[:],))
|
214
273
|
|
215
|
-
@skip_on_cudasim('cudasim does not check signatures')
|
216
274
|
def test_bad_declare_device_string(self):
|
217
275
|
with self.assertRaisesRegex(TypeError, 'Return type'):
|
218
276
|
cuda.declare_device('f1', '(float32[:],)')
|
219
277
|
|
278
|
+
def test_link_cu_source(self):
|
279
|
+
times2 = cuda.declare_device('times2', 'int32(int32)', link=times2_cu)
|
280
|
+
|
281
|
+
@cuda.jit
|
282
|
+
def kernel(r, x):
|
283
|
+
i = cuda.grid(1)
|
284
|
+
if i < len(r):
|
285
|
+
r[i] = times2(x[i])
|
286
|
+
|
287
|
+
x = np.arange(10, dtype=np.int32)
|
288
|
+
r = np.empty_like(x)
|
289
|
+
|
290
|
+
kernel[1, 32](r, x)
|
291
|
+
|
292
|
+
np.testing.assert_equal(r, x * 2)
|
293
|
+
|
294
|
+
def _test_link_multiple_sources(self, link_type):
|
295
|
+
link = link_type([times2_cu, times4_cu])
|
296
|
+
times4 = cuda.declare_device('times4', 'int32(int32)', link=link)
|
297
|
+
|
298
|
+
@cuda.jit
|
299
|
+
def kernel(r, x):
|
300
|
+
i = cuda.grid(1)
|
301
|
+
if i < len(r):
|
302
|
+
r[i] = times4(x[i])
|
303
|
+
|
304
|
+
x = np.arange(10, dtype=np.int32)
|
305
|
+
r = np.empty_like(x)
|
306
|
+
|
307
|
+
kernel[1, 32](r, x)
|
308
|
+
|
309
|
+
np.testing.assert_equal(r, x * 4)
|
310
|
+
|
311
|
+
def test_link_multiple_sources_set(self):
|
312
|
+
self._test_link_multiple_sources(set)
|
313
|
+
|
314
|
+
def test_link_multiple_sources_tuple(self):
|
315
|
+
self._test_link_multiple_sources(tuple)
|
316
|
+
|
317
|
+
def test_link_multiple_sources_list(self):
|
318
|
+
self._test_link_multiple_sources(list)
|
319
|
+
|
320
|
+
@skip_unless_cffi
|
321
|
+
def test_link_sources_in_memory_and_on_disk(self):
|
322
|
+
jitlink_cu = str(test_data_dir / "jitlink.cu")
|
323
|
+
link = [jitlink_cu, jitlink_user_cu]
|
324
|
+
sig = types.void(types.CPointer(types.int32))
|
325
|
+
ext_fn = cuda.declare_device("use_array_mutator", sig, link=link)
|
326
|
+
|
327
|
+
ffi = cffi.FFI()
|
328
|
+
|
329
|
+
@cuda.jit
|
330
|
+
def kernel(x):
|
331
|
+
ptr = ffi.from_buffer(x)
|
332
|
+
ext_fn(ptr)
|
333
|
+
|
334
|
+
x = np.arange(2, dtype=np.int32)
|
335
|
+
kernel[1, 1](x)
|
336
|
+
|
337
|
+
expected = np.ones(2, dtype=np.int32)
|
338
|
+
np.testing.assert_equal(x, expected)
|
339
|
+
|
340
|
+
@skip_if_curand_kernel_missing
|
341
|
+
def test_include_cuda_header(self):
|
342
|
+
sig = types.int32(types.uint64)
|
343
|
+
link = [rng_cu]
|
344
|
+
random_number = cuda.declare_device("random_number", sig, link=link)
|
345
|
+
|
346
|
+
@cuda.jit
|
347
|
+
def kernel(x, seed):
|
348
|
+
x[0] = random_number(seed)
|
349
|
+
|
350
|
+
x = np.zeros(1, dtype=np.uint32)
|
351
|
+
kernel[1, 1](x, 1)
|
352
|
+
np.testing.assert_equal(x[0], 323845807)
|
353
|
+
|
220
354
|
|
221
355
|
if __name__ == '__main__':
|
222
356
|
unittest.main()
|
@@ -15,16 +15,18 @@ class TestFFI(CUDATestCase):
|
|
15
15
|
import numpy as np
|
16
16
|
import os
|
17
17
|
|
18
|
-
# Declaration of the foreign function
|
19
|
-
mul = cuda.declare_device('mul_f32_f32', 'float32(float32, float32)')
|
20
|
-
|
21
18
|
# Path to the source containing the foreign function
|
22
19
|
# (here assumed to be in a subdirectory called "ffi")
|
23
20
|
basedir = os.path.dirname(os.path.abspath(__file__))
|
24
21
|
functions_cu = os.path.join(basedir, 'ffi', 'functions.cu')
|
25
22
|
|
26
|
-
#
|
27
|
-
|
23
|
+
# Declaration of the foreign function
|
24
|
+
mul = cuda.declare_device('mul_f32_f32', 'float32(float32, float32)',
|
25
|
+
link=functions_cu)
|
26
|
+
|
27
|
+
# A kernel that calls mul; functions.cu is linked automatically due to
|
28
|
+
# the call to mul.
|
29
|
+
@cuda.jit
|
28
30
|
def multiply_vectors(r, x, y):
|
29
31
|
i = cuda.grid(1)
|
30
32
|
|
@@ -54,14 +56,15 @@ class TestFFI(CUDATestCase):
|
|
54
56
|
|
55
57
|
# magictoken.ex_from_buffer_decl.begin
|
56
58
|
signature = 'float32(CPointer(float32), int32)'
|
57
|
-
sum_reduce = cuda.declare_device('sum_reduce', signature
|
59
|
+
sum_reduce = cuda.declare_device('sum_reduce', signature,
|
60
|
+
link=functions_cu)
|
58
61
|
# magictoken.ex_from_buffer_decl.end
|
59
62
|
|
60
63
|
# magictoken.ex_from_buffer_kernel.begin
|
61
64
|
import cffi
|
62
65
|
ffi = cffi.FFI()
|
63
66
|
|
64
|
-
@cuda.jit
|
67
|
+
@cuda.jit
|
65
68
|
def reduction_caller(result, array):
|
66
69
|
array_ptr = ffi.from_buffer(array)
|
67
70
|
result[()] = sum_reduce(array_ptr, len(array))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: numba-cuda
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.5.0
|
4
4
|
Summary: CUDA target for Numba
|
5
5
|
Author: Anaconda Inc., NVIDIA Corporation
|
6
6
|
License: BSD 2-clause
|
@@ -27,7 +27,19 @@ tracker](https://github.com/NVIDIA/numba-cuda/issues).
|
|
27
27
|
To raise questions or initiate discussions, please use the [Numba Discourse
|
28
28
|
forum](https://numba.discourse.group).
|
29
29
|
|
30
|
-
##
|
30
|
+
## Installation with pip
|
31
|
+
|
32
|
+
```shell
|
33
|
+
pip install numba-cuda
|
34
|
+
```
|
35
|
+
|
36
|
+
## Installation with Conda
|
37
|
+
|
38
|
+
```shell
|
39
|
+
conda install -c conda-forge numba-cuda
|
40
|
+
```
|
41
|
+
|
42
|
+
## Installation from source
|
31
43
|
|
32
44
|
Install as an editable install:
|
33
45
|
|
@@ -53,3 +65,9 @@ which will show a path like:
|
|
53
65
|
```
|
54
66
|
<path to numba-cuda repo>/numba_cuda/numba/cuda/__init__.py
|
55
67
|
```
|
68
|
+
|
69
|
+
## Contributing Guide
|
70
|
+
|
71
|
+
Review the
|
72
|
+
[CONTRIBUTING.md](https://github.com/NVIDIA/numba-cuda/blob/main/CONTRIBUTING.md)
|
73
|
+
file for information on how to contribute code and issues to the project.
|
@@ -1 +0,0 @@
|
|
1
|
-
0.4.0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|