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.
Files changed (258) hide show
  1. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/PKG-INFO +20 -2
  2. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/README.md +19 -1
  3. numba_cuda-0.5.0/numba_cuda/VERSION +1 -0
  4. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/compiler.py +7 -6
  5. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadecl.py +6 -2
  6. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/linkable_code.py +13 -9
  7. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/nvvm.py +6 -1
  8. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/decorators.py +9 -2
  9. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/dispatcher.py +13 -2
  10. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/testing.py +11 -1
  11. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_device_func.py +145 -11
  12. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_ffi.py +10 -7
  13. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/PKG-INFO +20 -2
  14. numba_cuda-0.4.0/numba_cuda/VERSION +0 -1
  15. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/LICENSE +0 -0
  16. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/__init__.py +0 -0
  17. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/_version.py +0 -0
  18. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/__init__.py +0 -0
  19. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/api.py +0 -0
  20. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/api_util.py +0 -0
  21. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/args.py +0 -0
  22. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cg.py +0 -0
  23. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/codegen.py +0 -0
  24. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cpp_function_wrappers.cu +0 -0
  25. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cuda_fp16.h +0 -0
  26. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cuda_fp16.hpp +0 -0
  27. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cuda_paths.py +0 -0
  28. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/__init__.py +0 -0
  29. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/devicearray.py +0 -0
  30. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/devices.py +0 -0
  31. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/driver.py +0 -0
  32. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/drvapi.py +0 -0
  33. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/dummyarray.py +0 -0
  34. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/enums.py +0 -0
  35. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/error.py +0 -0
  36. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/libs.py +0 -0
  37. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/mappings.py +0 -0
  38. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/ndarray.py +0 -0
  39. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/nvrtc.py +0 -0
  40. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/rtapi.py +0 -0
  41. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudadrv/runtime.py +0 -0
  42. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudaimpl.py +0 -0
  43. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/cudamath.py +0 -0
  44. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/descriptor.py +0 -0
  45. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/device_init.py +0 -0
  46. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/deviceufunc.py +0 -0
  47. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/errors.py +0 -0
  48. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/extending.py +0 -0
  49. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/initialize.py +0 -0
  50. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/intrinsic_wrapper.py +0 -0
  51. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/intrinsics.py +0 -0
  52. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/kernels/__init__.py +0 -0
  53. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/kernels/reduction.py +0 -0
  54. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/kernels/transpose.py +0 -0
  55. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdevice.py +0 -0
  56. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdevicedecl.py +0 -0
  57. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdevicefuncs.py +0 -0
  58. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/libdeviceimpl.py +0 -0
  59. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/mathimpl.py +0 -0
  60. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/models.py +0 -0
  61. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/nvvmutils.py +0 -0
  62. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/printimpl.py +0 -0
  63. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/random.py +0 -0
  64. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/reshape_funcs.cu +0 -0
  65. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/__init__.py +0 -0
  66. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/memsys.cu +0 -0
  67. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/memsys.cuh +0 -0
  68. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/nrt.cu +0 -0
  69. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/runtime/nrt.py +0 -0
  70. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/__init__.py +0 -0
  71. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/api.py +0 -0
  72. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/compiler.py +0 -0
  73. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/__init__.py +0 -0
  74. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/devicearray.py +0 -0
  75. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/devices.py +0 -0
  76. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/driver.py +0 -0
  77. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/drvapi.py +0 -0
  78. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/dummyarray.py +0 -0
  79. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/error.py +0 -0
  80. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/libs.py +0 -0
  81. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/nvvm.py +0 -0
  82. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/cudadrv/runtime.py +0 -0
  83. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/kernel.py +0 -0
  84. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/kernelapi.py +0 -0
  85. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/reduction.py +0 -0
  86. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator/vector_types.py +0 -0
  87. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/simulator_init.py +0 -0
  88. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/stubs.py +0 -0
  89. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/target.py +0 -0
  90. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/__init__.py +0 -0
  91. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/__init__.py +0 -0
  92. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_array_attr.py +0 -0
  93. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_context_stack.py +0 -0
  94. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_array_slicing.py +0 -0
  95. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_auto_context.py +0 -0
  96. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_devicerecord.py +0 -0
  97. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_driver.py +0 -0
  98. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_libraries.py +0 -0
  99. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_memory.py +0 -0
  100. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_cuda_ndarray.py +0 -0
  101. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_deallocations.py +0 -0
  102. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_detect.py +0 -0
  103. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_emm_plugins.py +0 -0
  104. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_events.py +0 -0
  105. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_host_alloc.py +0 -0
  106. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_init.py +0 -0
  107. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_inline_ptx.py +0 -0
  108. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py +0 -0
  109. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_linker.py +0 -0
  110. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py +0 -0
  111. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_mvc.py +0 -0
  112. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +0 -0
  113. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py +0 -0
  114. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py +0 -0
  115. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py +0 -0
  116. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_ptds.py +0 -0
  117. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_reset_device.py +0 -0
  118. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_runtime.py +0 -0
  119. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_select_device.py +0 -0
  120. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudadrv/test_streams.py +0 -0
  121. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/__init__.py +0 -0
  122. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/cache_usecases.py +0 -0
  123. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/cache_with_cpu_usecases.py +0 -0
  124. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/extensions_usecases.py +0 -0
  125. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/jitlink.ptx +0 -0
  126. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/recursion_usecases.py +0 -0
  127. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_alignment.py +0 -0
  128. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_array.py +0 -0
  129. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_array_args.py +0 -0
  130. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_array_methods.py +0 -0
  131. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_atomics.py +0 -0
  132. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_blackscholes.py +0 -0
  133. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_boolean.py +0 -0
  134. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_caching.py +0 -0
  135. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_casting.py +0 -0
  136. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cffi.py +0 -0
  137. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_compiler.py +0 -0
  138. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_complex.py +0 -0
  139. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_complex_kernel.py +0 -0
  140. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_const_string.py +0 -0
  141. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_constmem.py +0 -0
  142. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cooperative_groups.py +0 -0
  143. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cuda_array_interface.py +0 -0
  144. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_cuda_jit_no_types.py +0 -0
  145. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_datetime.py +0 -0
  146. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_debug.py +0 -0
  147. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_debuginfo.py +0 -0
  148. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_dispatcher.py +0 -0
  149. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_enums.py +0 -0
  150. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_errors.py +0 -0
  151. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_exception.py +0 -0
  152. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_extending.py +0 -0
  153. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_fastmath.py +0 -0
  154. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_forall.py +0 -0
  155. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_freevar.py +0 -0
  156. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_frexp_ldexp.py +0 -0
  157. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_globals.py +0 -0
  158. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_gufunc.py +0 -0
  159. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py +0 -0
  160. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py +0 -0
  161. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_idiv.py +0 -0
  162. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_inspect.py +0 -0
  163. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +0 -0
  164. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_ipc.py +0 -0
  165. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_iterators.py +0 -0
  166. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_lang.py +0 -0
  167. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_laplace.py +0 -0
  168. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_libdevice.py +0 -0
  169. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_lineinfo.py +0 -0
  170. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_localmem.py +0 -0
  171. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_mandel.py +0 -0
  172. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_math.py +0 -0
  173. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_matmul.py +0 -0
  174. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_minmax.py +0 -0
  175. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_montecarlo.py +0 -0
  176. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_multigpu.py +0 -0
  177. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_multiprocessing.py +0 -0
  178. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_multithreads.py +0 -0
  179. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_nondet.py +0 -0
  180. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_operator.py +0 -0
  181. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_optimization.py +0 -0
  182. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_overload.py +0 -0
  183. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_powi.py +0 -0
  184. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_print.py +0 -0
  185. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py +0 -0
  186. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_random.py +0 -0
  187. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py +0 -0
  188. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_recursion.py +0 -0
  189. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_reduction.py +0 -0
  190. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_retrieve_autoconverted_arrays.py +0 -0
  191. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_serialize.py +0 -0
  192. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_slicing.py +0 -0
  193. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_sm.py +0 -0
  194. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py +0 -0
  195. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +0 -0
  196. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_sync.py +0 -0
  197. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_transpose.py +0 -0
  198. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py +0 -0
  199. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_userexc.py +0 -0
  200. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vector_type.py +0 -0
  201. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize.py +0 -0
  202. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_complex.py +0 -0
  203. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_decor.py +0 -0
  204. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_device.py +0 -0
  205. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_vectorize_scalar_arg.py +0 -0
  206. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_warning.py +0 -0
  207. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudapy/test_warp_ops.py +0 -0
  208. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudasim/__init__.py +0 -0
  209. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudasim/support.py +0 -0
  210. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/cudasim/test_cudasim_issues.py +0 -0
  211. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/__init__.py +0 -0
  212. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/cuda_include.cu +0 -0
  213. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/error.cu +0 -0
  214. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/jitlink.cu +0 -0
  215. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/jitlink.ptx +0 -0
  216. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/data/warn.cu +0 -0
  217. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/__init__.py +0 -0
  218. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/ffi/__init__.py +0 -0
  219. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/ffi/functions.cu +0 -0
  220. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_cg.py +0 -0
  221. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_cpu_gpu_compat.py +0 -0
  222. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_laplace.py +0 -0
  223. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_matmul.py +0 -0
  224. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_montecarlo.py +0 -0
  225. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_random.py +0 -0
  226. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_reduction.py +0 -0
  227. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_sessionize.py +0 -0
  228. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_ufunc.py +0 -0
  229. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/doc_examples/test_vecadd.py +0 -0
  230. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/__init__.py +0 -0
  231. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_dummyarray.py +0 -0
  232. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py +0 -0
  233. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_import.py +0 -0
  234. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py +0 -0
  235. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py +0 -0
  236. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/__init__.py +0 -0
  237. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/mock_numpy.py +0 -0
  238. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/test_nrt.py +0 -0
  239. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/nrt/test_nrt_refct.py +0 -0
  240. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/support.py +0 -0
  241. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/Makefile +0 -0
  242. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py +0 -0
  243. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/test_device_functions.cu +0 -0
  244. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/tests/test_binary_generation/undefined_extern.cu +0 -0
  245. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/types.py +0 -0
  246. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/ufuncs.py +0 -0
  247. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/utils.py +0 -0
  248. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/vector_types.py +0 -0
  249. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda/numba/cuda/vectorizers.py +0 -0
  250. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/SOURCES.txt +0 -0
  251. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/dependency_links.txt +0 -0
  252. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/requires.txt +0 -0
  253. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/numba_cuda.egg-info/top_level.txt +0 -0
  254. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/pyproject.toml +0 -0
  255. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/setup.cfg +0 -0
  256. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/setup.py +0 -0
  257. {numba_cuda-0.4.0 → numba_cuda-0.5.0}/site-packages/_numba_cuda_redirector.pth +0 -0
  258. {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.4.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
- ## Building from source
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
- ## Building from source
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(object):
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 can be passed in the `link` list argument to `@cuda.jit`
6
- kernels to supply code to be linked from memory."""
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 Source code in memory"""
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++ Source code in memory"""
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
- """A fatbin ELF in memory"""
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
- """A cubin ELF in memory"""
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
- cuda_h = os.path.join(config.CUDA_INCLUDE_PATH, 'cuda.h')
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,
@@ -1,11 +1,14 @@
1
1
  import re
2
- import types
2
+ import cffi
3
3
 
4
4
  import numpy as np
5
5
 
6
- from numba.cuda.testing import unittest, skip_on_cudasim, CUDATestCase
7
- from numba import cuda, jit, float32, int32
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 = types.ModuleType(name='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
- def _test_declare_device(self, decl):
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._test_declare_device(f1)
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._test_declare_device(f1)
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
- # Kernel that links in functions.cu and calls mul
27
- @cuda.jit(link=[functions_cu])
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(link=[functions_cu])
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.4.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
- ## Building from source
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