numba-cuda 0.0.17__py3-none-any.whl → 0.0.19__py3-none-any.whl
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/VERSION +1 -1
- numba_cuda/numba/cuda/codegen.py +15 -3
- numba_cuda/numba/cuda/cuda_paths.py +68 -0
- numba_cuda/numba/cuda/cudadrv/devicearray.py +4 -1
- numba_cuda/numba/cuda/cudadrv/driver.py +209 -47
- numba_cuda/numba/cuda/cudadrv/enums.py +3 -0
- numba_cuda/numba/cuda/cudadrv/libs.py +38 -0
- numba_cuda/numba/cuda/cudadrv/linkable_code.py +63 -0
- numba_cuda/numba/cuda/cudadrv/mappings.py +24 -0
- numba_cuda/numba/cuda/cudadrv/nvrtc.py +9 -4
- numba_cuda/numba/cuda/device_init.py +3 -0
- numba_cuda/numba/cuda/dispatcher.py +48 -8
- numba_cuda/numba/cuda/intrinsics.py +6 -1
- numba_cuda/numba/cuda/runtime/nrt.cu +190 -0
- numba_cuda/numba/cuda/simulator/api.py +14 -0
- numba_cuda/numba/cuda/target.py +8 -2
- numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py +199 -0
- numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py +44 -4
- numba_cuda/numba/cuda/tests/cudapy/test_print.py +2 -2
- numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py +48 -0
- numba_cuda/numba/cuda/tests/nrt/__init__.py +8 -0
- numba_cuda/numba/cuda/tests/nrt/mock_numpy.py +42 -0
- numba_cuda/numba/cuda/tests/nrt/test_nrt.py +110 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/Makefile +51 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py +170 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/test_device_functions.cu +19 -0
- numba_cuda/numba/cuda/tests/test_binary_generation/undefined_extern.cu +3 -0
- {numba_cuda-0.0.17.dist-info → numba_cuda-0.0.19.dist-info}/METADATA +1 -1
- {numba_cuda-0.0.17.dist-info → numba_cuda-0.0.19.dist-info}/RECORD +32 -20
- {numba_cuda-0.0.17.dist-info → numba_cuda-0.0.19.dist-info}/WHEEL +1 -1
- {numba_cuda-0.0.17.dist-info → numba_cuda-0.0.19.dist-info}/LICENSE +0 -0
- {numba_cuda-0.0.17.dist-info → numba_cuda-0.0.19.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,48 @@
|
|
1
|
+
from numba.cuda.testing import (skip_on_cudasim, skip_unless_cudasim, unittest,
|
2
|
+
CUDATestCase)
|
3
|
+
from numba import cuda
|
4
|
+
|
5
|
+
# Basic tests that stream APIs execute on the hardware and in the simulator.
|
6
|
+
#
|
7
|
+
# Correctness of semantics is exercised elsewhere in the test suite (though we
|
8
|
+
# could improve the comprehensiveness of testing by adding more correctness
|
9
|
+
# tests here in future).
|
10
|
+
|
11
|
+
|
12
|
+
class TestStreamAPI(CUDATestCase):
|
13
|
+
def test_stream_create_and_sync(self):
|
14
|
+
s = cuda.stream()
|
15
|
+
s.synchronize()
|
16
|
+
|
17
|
+
def test_default_stream_create_and_sync(self):
|
18
|
+
s = cuda.default_stream()
|
19
|
+
s.synchronize()
|
20
|
+
|
21
|
+
def test_legacy_default_stream_create_and_sync(self):
|
22
|
+
s = cuda.legacy_default_stream()
|
23
|
+
s.synchronize()
|
24
|
+
|
25
|
+
def test_ptd_stream_create_and_sync(self):
|
26
|
+
s = cuda.per_thread_default_stream()
|
27
|
+
s.synchronize()
|
28
|
+
|
29
|
+
@skip_on_cudasim("External streams are unsupported on the simulator")
|
30
|
+
def test_external_stream_create(self):
|
31
|
+
# A dummy pointer value
|
32
|
+
ptr = 0x12345678
|
33
|
+
s = cuda.external_stream(ptr)
|
34
|
+
# We don't test synchronization on the stream because it's not a real
|
35
|
+
# stream - we used a dummy pointer for testing the API, so we just
|
36
|
+
# ensure that the stream handle matches the external stream pointer.
|
37
|
+
self.assertEqual(ptr, s.handle.value)
|
38
|
+
|
39
|
+
@skip_unless_cudasim("External streams are usable with hardware")
|
40
|
+
def test_external_stream_simulator_unavailable(self):
|
41
|
+
ptr = 0x12345678
|
42
|
+
msg = "External streams are unsupported in the simulator"
|
43
|
+
with self.assertRaisesRegex(RuntimeError, msg):
|
44
|
+
cuda.external_stream(ptr)
|
45
|
+
|
46
|
+
|
47
|
+
if __name__ == '__main__':
|
48
|
+
unittest.main()
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
from numba.core import errors, types
|
3
|
+
from numba.core.extending import overload
|
4
|
+
from numba.np.arrayobj import (_check_const_str_dtype, is_nonelike,
|
5
|
+
ty_parse_dtype, ty_parse_shape, numpy_empty_nd)
|
6
|
+
|
7
|
+
|
8
|
+
# Typical tests for allocation use array construction (e.g. np.zeros, np.empty,
|
9
|
+
# etc.) to induce allocations. These don't work in the CUDA target because they
|
10
|
+
# need keyword arguments, which are presently not supported properly in the
|
11
|
+
# CUDA target.
|
12
|
+
#
|
13
|
+
# To work around this, we can define our own function, that works like
|
14
|
+
# the desired one, except that it uses only positional arguments.
|
15
|
+
#
|
16
|
+
# Once the CUDA target supports keyword arguments, this workaround will no
|
17
|
+
# longer be necessary and the tests in this module should be switched to use
|
18
|
+
# the relevant NumPy functions instead.
|
19
|
+
def cuda_empty(shape, dtype):
|
20
|
+
pass
|
21
|
+
|
22
|
+
|
23
|
+
@overload(cuda_empty)
|
24
|
+
def ol_cuda_empty(shape, dtype):
|
25
|
+
_check_const_str_dtype("empty", dtype)
|
26
|
+
if (dtype is float or
|
27
|
+
(isinstance(dtype, types.Function) and dtype.typing_key is float) or
|
28
|
+
is_nonelike(dtype)): #default
|
29
|
+
nb_dtype = types.double
|
30
|
+
else:
|
31
|
+
nb_dtype = ty_parse_dtype(dtype)
|
32
|
+
|
33
|
+
ndim = ty_parse_shape(shape)
|
34
|
+
if nb_dtype is not None and ndim is not None:
|
35
|
+
retty = types.Array(dtype=nb_dtype, ndim=ndim, layout='C')
|
36
|
+
|
37
|
+
def impl(shape, dtype):
|
38
|
+
return numpy_empty_nd(shape, dtype, retty)
|
39
|
+
return impl
|
40
|
+
else:
|
41
|
+
msg = f"Cannot parse input types to function np.empty({shape}, {dtype})"
|
42
|
+
raise errors.TypingError(msg)
|
@@ -0,0 +1,110 @@
|
|
1
|
+
import re
|
2
|
+
import gc
|
3
|
+
import numpy as np
|
4
|
+
import unittest
|
5
|
+
from unittest.mock import patch
|
6
|
+
from numba.core.runtime import rtsys
|
7
|
+
from numba.tests.support import EnableNRTStatsMixin
|
8
|
+
from numba.cuda.testing import CUDATestCase
|
9
|
+
|
10
|
+
from .mock_numpy import cuda_empty
|
11
|
+
|
12
|
+
from numba import cuda
|
13
|
+
|
14
|
+
|
15
|
+
class TestNrtRefCt(EnableNRTStatsMixin, CUDATestCase):
|
16
|
+
|
17
|
+
def setUp(self):
|
18
|
+
# Clean up any NRT-backed objects hanging in a dead reference cycle
|
19
|
+
gc.collect()
|
20
|
+
super(TestNrtRefCt, self).setUp()
|
21
|
+
|
22
|
+
@unittest.expectedFailure
|
23
|
+
def test_no_return(self):
|
24
|
+
"""
|
25
|
+
Test issue #1291
|
26
|
+
"""
|
27
|
+
n = 10
|
28
|
+
|
29
|
+
@cuda.jit
|
30
|
+
def kernel():
|
31
|
+
for i in range(n):
|
32
|
+
temp = cuda_empty(2, np.float64) # noqa: F841
|
33
|
+
return None
|
34
|
+
|
35
|
+
init_stats = rtsys.get_allocation_stats()
|
36
|
+
|
37
|
+
with patch('numba.config.CUDA_ENABLE_NRT', True, create=True):
|
38
|
+
kernel[1,1]()
|
39
|
+
cur_stats = rtsys.get_allocation_stats()
|
40
|
+
self.assertEqual(cur_stats.alloc - init_stats.alloc, n)
|
41
|
+
self.assertEqual(cur_stats.free - init_stats.free, n)
|
42
|
+
|
43
|
+
|
44
|
+
class TestNrtBasic(CUDATestCase):
|
45
|
+
def test_nrt_launches(self):
|
46
|
+
@cuda.jit
|
47
|
+
def f(x):
|
48
|
+
return x[:5]
|
49
|
+
|
50
|
+
@cuda.jit
|
51
|
+
def g():
|
52
|
+
x = cuda_empty(10, np.int64)
|
53
|
+
f(x)
|
54
|
+
|
55
|
+
with patch('numba.config.CUDA_ENABLE_NRT', True, create=True):
|
56
|
+
g[1,1]()
|
57
|
+
cuda.synchronize()
|
58
|
+
|
59
|
+
def test_nrt_ptx_contains_refcount(self):
|
60
|
+
@cuda.jit
|
61
|
+
def f(x):
|
62
|
+
return x[:5]
|
63
|
+
|
64
|
+
@cuda.jit
|
65
|
+
def g():
|
66
|
+
x = cuda_empty(10, np.int64)
|
67
|
+
f(x)
|
68
|
+
|
69
|
+
with patch('numba.config.CUDA_ENABLE_NRT', True, create=True):
|
70
|
+
g[1,1]()
|
71
|
+
|
72
|
+
ptx = next(iter(g.inspect_asm().values()))
|
73
|
+
|
74
|
+
# The following checks that a `call` PTX instruction is
|
75
|
+
# emitted for NRT_MemInfo_alloc_aligned, NRT_incref and
|
76
|
+
# NRT_decref
|
77
|
+
p1 = r"call\.uni(.|\n)*NRT_MemInfo_alloc_aligned"
|
78
|
+
match = re.search(p1, ptx)
|
79
|
+
assert match is not None
|
80
|
+
|
81
|
+
p2 = r"call\.uni.*\n.*NRT_incref"
|
82
|
+
match = re.search(p2, ptx)
|
83
|
+
assert match is not None
|
84
|
+
|
85
|
+
p3 = r"call\.uni.*\n.*NRT_decref"
|
86
|
+
match = re.search(p3, ptx)
|
87
|
+
assert match is not None
|
88
|
+
|
89
|
+
def test_nrt_returns_correct(self):
|
90
|
+
@cuda.jit
|
91
|
+
def f(x):
|
92
|
+
return x[5:]
|
93
|
+
|
94
|
+
@cuda.jit
|
95
|
+
def g(out_ary):
|
96
|
+
x = cuda_empty(10, np.int64)
|
97
|
+
x[5] = 1
|
98
|
+
y = f(x)
|
99
|
+
out_ary[0] = y[0]
|
100
|
+
|
101
|
+
out_ary = np.zeros(1, dtype=np.int64)
|
102
|
+
|
103
|
+
with patch('numba.config.CUDA_ENABLE_NRT', True, create=True):
|
104
|
+
g[1,1](out_ary)
|
105
|
+
|
106
|
+
self.assertEqual(out_ary[0], 1)
|
107
|
+
|
108
|
+
|
109
|
+
if __name__ == '__main__':
|
110
|
+
unittest.main()
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# Generates the input files used by the pynvjitlink binding test suite
|
2
|
+
|
3
|
+
# Test binaries are built taking into account the CC of the GPU in the test machine
|
4
|
+
GPU_CC := $(shell nvidia-smi --query-gpu=compute_cap --format=csv | grep -v compute_cap | head -n 1 | sed 's/\.//')
|
5
|
+
GPU_CC ?= 75
|
6
|
+
|
7
|
+
# Use CC 7.0 as an alternative in fatbin testing, unless CC is 7.x
|
8
|
+
ifeq ($(shell echo "$(GPU_CC)" | cut -c1),7)
|
9
|
+
ALT_CC := 80
|
10
|
+
else
|
11
|
+
ALT_CC := 70
|
12
|
+
endif
|
13
|
+
|
14
|
+
# Gencode flags suitable for most tests
|
15
|
+
GENCODE := -gencode arch=compute_$(GPU_CC),code=sm_$(GPU_CC)
|
16
|
+
|
17
|
+
# Fatbin tests need to generate code for an additional compute capability
|
18
|
+
FATBIN_GENCODE := $(GENCODE) -gencode arch=compute_$(ALT_CC),code=sm_$(ALT_CC)
|
19
|
+
|
20
|
+
# LTO-IR tests need to generate for the LTO "architecture" instead
|
21
|
+
LTOIR_GENCODE := -gencode arch=lto_$(GPU_CC),code=lto_$(GPU_CC)
|
22
|
+
|
23
|
+
# Compile with optimization; use relocatable device code to preserve device
|
24
|
+
# functions in the final output
|
25
|
+
NVCC_FLAGS := -O3 -rdc true
|
26
|
+
|
27
|
+
# Flags specific to output type
|
28
|
+
CUBIN_FLAGS := $(GENCODE) --cubin
|
29
|
+
PTX_FLAGS := $(GENCODE) -ptx
|
30
|
+
OBJECT_FLAGS := $(GENCODE) -dc
|
31
|
+
LIBRARY_FLAGS := $(GENCODE) -lib
|
32
|
+
FATBIN_FLAGS := $(FATBIN_GENCODE) --fatbin
|
33
|
+
LTOIR_FLAGS := $(LTOIR_GENCODE) -dc
|
34
|
+
|
35
|
+
OUTPUT_DIR := ./
|
36
|
+
|
37
|
+
all:
|
38
|
+
@echo "GPU CC: $(GPU_CC)"
|
39
|
+
@echo "Alternative CC: $(ALT_CC)"
|
40
|
+
# Compile all test objects
|
41
|
+
nvcc $(NVCC_FLAGS) $(CUBIN_FLAGS) -o $(OUTPUT_DIR)/undefined_extern.cubin undefined_extern.cu
|
42
|
+
nvcc $(NVCC_FLAGS) $(CUBIN_FLAGS) -o $(OUTPUT_DIR)/test_device_functions.cubin test_device_functions.cu
|
43
|
+
nvcc $(NVCC_FLAGS) $(FATBIN_FLAGS) -o $(OUTPUT_DIR)/test_device_functions.fatbin test_device_functions.cu
|
44
|
+
nvcc $(NVCC_FLAGS) $(PTX_FLAGS) -o $(OUTPUT_DIR)/test_device_functions.ptx test_device_functions.cu
|
45
|
+
nvcc $(NVCC_FLAGS) $(OBJECT_FLAGS) -o $(OUTPUT_DIR)/test_device_functions.o test_device_functions.cu
|
46
|
+
nvcc $(NVCC_FLAGS) $(LIBRARY_FLAGS) -o $(OUTPUT_DIR)/test_device_functions.a test_device_functions.cu
|
47
|
+
|
48
|
+
# Generate LTO-IR wrapped in a fatbin
|
49
|
+
nvcc $(NVCC_FLAGS) $(LTOIR_FLAGS) -o $(OUTPUT_DIR)/test_device_functions.ltoir.o test_device_functions.cu
|
50
|
+
# Generate LTO-IR in a "raw" LTO-IR container
|
51
|
+
python generate_raw_ltoir.py --arch sm_$(GPU_CC) -o $(OUTPUT_DIR)/test_device_functions.ltoir test_device_functions.cu
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# Copyright (c) 2024, NVIDIA CORPORATION.
|
2
|
+
|
3
|
+
import argparse
|
4
|
+
import pathlib
|
5
|
+
import platform
|
6
|
+
import subprocess
|
7
|
+
import sys
|
8
|
+
|
9
|
+
from cuda import nvrtc
|
10
|
+
|
11
|
+
# Magic number found at the start of an LTO-IR file
|
12
|
+
LTOIR_MAGIC = 0x7F4E43ED
|
13
|
+
|
14
|
+
|
15
|
+
def check(args):
|
16
|
+
"""
|
17
|
+
Abort and print an error message in the presence of an error result.
|
18
|
+
|
19
|
+
Otherwise:
|
20
|
+
- Return None if there were no more arguments,
|
21
|
+
- Return the singular argument if there was only one further argument,
|
22
|
+
- Return the tuple of arguments if multiple followed.
|
23
|
+
"""
|
24
|
+
|
25
|
+
result, *args = args
|
26
|
+
value = result.value
|
27
|
+
|
28
|
+
if value:
|
29
|
+
error_string = check(nvrtc.nvrtcGetErrorString(result)).decode()
|
30
|
+
msg = f"NVRTC error, code {value}: {error_string}"
|
31
|
+
print(msg, file=sys.stderr)
|
32
|
+
sys.exit(1)
|
33
|
+
|
34
|
+
if len(args) == 0:
|
35
|
+
return None
|
36
|
+
elif len(args) == 1:
|
37
|
+
return args[0]
|
38
|
+
else:
|
39
|
+
return args
|
40
|
+
|
41
|
+
|
42
|
+
def determine_include_flags():
|
43
|
+
# Inspired by the logic in FindCUDAToolkit.cmake. We need the CUDA include
|
44
|
+
# paths because NVRTC doesn't add them by default, and we can compile a
|
45
|
+
# much broader set of test files if the CUDA includes are available.
|
46
|
+
|
47
|
+
# We invoke NVCC in verbose mode ("-v") and give a dummy filename, without
|
48
|
+
# which it won't produce output.
|
49
|
+
|
50
|
+
cmd = ["nvcc", "-v", "__dummy"]
|
51
|
+
cp = subprocess.run(cmd, capture_output=True)
|
52
|
+
|
53
|
+
# Since the dummy file doesn't actually exist, NVCC is expected to exit
|
54
|
+
# with an error code of 1.
|
55
|
+
rc = cp.returncode
|
56
|
+
if rc != 1:
|
57
|
+
print(f"Unexpected return code ({rc}) from `nvcc -v`. Expected 1.")
|
58
|
+
return None
|
59
|
+
|
60
|
+
# NVCC writes to stdout on Windows and stderr on Linux
|
61
|
+
if platform.system() == 'Windows':
|
62
|
+
stream = cp.stdout
|
63
|
+
else:
|
64
|
+
stream = cp.stderr
|
65
|
+
|
66
|
+
output = stream.decode()
|
67
|
+
lines = output.splitlines()
|
68
|
+
|
69
|
+
includes_lines = [line for line in lines if line.startswith("#$ INCLUDES=")]
|
70
|
+
if len(includes_lines) != 1:
|
71
|
+
print(f"Expected exactly one INCLUDES line. Got {len(includes_lines)}.")
|
72
|
+
return None
|
73
|
+
|
74
|
+
# Parse out the arguments following "INCLUDES=" - these are a space
|
75
|
+
# separated list of strings that are potentially quoted.
|
76
|
+
|
77
|
+
quoted_flags = includes_lines[0].split("INCLUDES=")[1].strip().split()
|
78
|
+
include_flags = [flag.strip('"') for flag in quoted_flags]
|
79
|
+
print(f"Using CUDA include flags: {include_flags}")
|
80
|
+
|
81
|
+
return include_flags
|
82
|
+
|
83
|
+
|
84
|
+
def get_ltoir(source, name, arch):
|
85
|
+
"""Given a CUDA C/C++ source, compile it and return the LTO-IR."""
|
86
|
+
|
87
|
+
program = check(
|
88
|
+
nvrtc.nvrtcCreateProgram(source.encode(), name.encode(), 0, [], [])
|
89
|
+
)
|
90
|
+
|
91
|
+
cuda_include_flags = determine_include_flags()
|
92
|
+
if cuda_include_flags is None:
|
93
|
+
print("Error determining CUDA include flags. Exiting.", file=sys.stderr)
|
94
|
+
sys.exit(1)
|
95
|
+
|
96
|
+
options = [
|
97
|
+
f"--gpu-architecture={arch}",
|
98
|
+
"-dlto",
|
99
|
+
"-rdc",
|
100
|
+
"true",
|
101
|
+
*cuda_include_flags,
|
102
|
+
]
|
103
|
+
options = [o.encode() for o in options]
|
104
|
+
|
105
|
+
result = nvrtc.nvrtcCompileProgram(program, len(options), options)
|
106
|
+
|
107
|
+
# Report compilation errors back to the user
|
108
|
+
if result[0] == nvrtc.nvrtcResult.NVRTC_ERROR_COMPILATION:
|
109
|
+
log_size = check(nvrtc.nvrtcGetProgramLogSize(program))
|
110
|
+
log = b" " * log_size
|
111
|
+
check(nvrtc.nvrtcGetProgramLog(program, log))
|
112
|
+
print("NVRTC compilation error:\n", file=sys.stderr)
|
113
|
+
print(log.decode(), file=sys.stderr)
|
114
|
+
sys.exit(1)
|
115
|
+
|
116
|
+
# Handle other errors in the standard way
|
117
|
+
check(result)
|
118
|
+
|
119
|
+
ltoir_size = check(nvrtc.nvrtcGetLTOIRSize(program))
|
120
|
+
ltoir = b" " * ltoir_size
|
121
|
+
check(nvrtc.nvrtcGetLTOIR(program, ltoir))
|
122
|
+
|
123
|
+
# Check that the output looks like an LTO-IR container
|
124
|
+
header = int.from_bytes(ltoir[:4], byteorder="little")
|
125
|
+
if header != LTOIR_MAGIC:
|
126
|
+
print(
|
127
|
+
f"Unexpected header value 0x{header:X}.\n"
|
128
|
+
f"Expected LTO-IR magic number 0x{LTOIR_MAGIC:X}."
|
129
|
+
"\nExiting.",
|
130
|
+
file=sys.stderr,
|
131
|
+
)
|
132
|
+
sys.exit(1)
|
133
|
+
|
134
|
+
return ltoir
|
135
|
+
|
136
|
+
|
137
|
+
def main(sourcepath, outputpath, arch):
|
138
|
+
with open(sourcepath) as f:
|
139
|
+
source = f.read()
|
140
|
+
|
141
|
+
name = pathlib.Path(sourcepath).name
|
142
|
+
ltoir = get_ltoir(source, name, arch)
|
143
|
+
|
144
|
+
print(f"Writing {outputpath}...")
|
145
|
+
|
146
|
+
with open(outputpath, "wb") as f:
|
147
|
+
f.write(ltoir)
|
148
|
+
|
149
|
+
|
150
|
+
if __name__ == "__main__":
|
151
|
+
description = "Compiles CUDA C/C++ to LTO-IR using NVRTC."
|
152
|
+
parser = argparse.ArgumentParser(description=description)
|
153
|
+
parser.add_argument("sourcepath", help="path to source file")
|
154
|
+
parser.add_argument(
|
155
|
+
"-o", "--output", help="path to output file", default=None
|
156
|
+
)
|
157
|
+
parser.add_argument(
|
158
|
+
"-a",
|
159
|
+
"--arch",
|
160
|
+
help="compute arch to target (e.g. sm_87). " "Defaults to sm_50.",
|
161
|
+
default="sm_50",
|
162
|
+
)
|
163
|
+
|
164
|
+
args = parser.parse_args()
|
165
|
+
outputpath = args.output
|
166
|
+
|
167
|
+
if outputpath is None:
|
168
|
+
outputpath = pathlib.Path(args.sourcepath).with_suffix(".ltoir")
|
169
|
+
|
170
|
+
main(args.sourcepath, outputpath, args.arch)
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#include <cuda_fp16.h>
|
2
|
+
|
3
|
+
extern __device__ bool __heq(__half arg1, __half arg2);
|
4
|
+
|
5
|
+
__device__ __half test_add_fp16(__half arg1, __half arg2) {
|
6
|
+
return __hadd(arg1, arg2);
|
7
|
+
}
|
8
|
+
|
9
|
+
__device__ bool test_cmp_fp16(__half arg1, __half arg2) {
|
10
|
+
return __heq(arg1, arg2);
|
11
|
+
}
|
12
|
+
|
13
|
+
typedef unsigned int uint32_t;
|
14
|
+
|
15
|
+
extern "C" __device__ int add_from_numba(uint32_t *result, uint32_t a,
|
16
|
+
uint32_t b) {
|
17
|
+
*result = a + b;
|
18
|
+
return 0;
|
19
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
_numba_cuda_redirector.pth,sha256=cmfMMmV0JPh3yEpl4bGeM9AuXiVVMSo6Z_b7RaQL3XE,30
|
2
2
|
_numba_cuda_redirector.py,sha256=rc56rnb40w3AtrqnhS66JSgYTSTsi3iTn8yP3NuoQV8,2401
|
3
|
-
numba_cuda/VERSION,sha256=
|
3
|
+
numba_cuda/VERSION,sha256=K2Wn4BRtrXcEkuPZYGGM_h_Orgai6flc272777m5MYQ,7
|
4
4
|
numba_cuda/__init__.py,sha256=atXeUvJKR3JHcAiCFbXCVOJQUHgB1TulmsqSL_9RT3Q,114
|
5
5
|
numba_cuda/_version.py,sha256=jbdUsbR7sVllw0KxQNB0-FMd929CGg3kH2fhHdrlkuc,719
|
6
6
|
numba_cuda/numba/cuda/__init__.py,sha256=idyVHOObC9lTYnp62v7rVprSacRM4d5F6vhXfG5ElTI,621
|
@@ -8,25 +8,25 @@ numba_cuda/numba/cuda/api.py,sha256=shLu7NEZHRMcaZAMEXSoyA5Gi5m0tm6ZRymxKLEKCSg,
|
|
8
8
|
numba_cuda/numba/cuda/api_util.py,sha256=aQfUV2-4RM_oGVvckMjbMr5e3effOQNX04v1T0O2EfQ,861
|
9
9
|
numba_cuda/numba/cuda/args.py,sha256=HloHkw_PQal2DT-I70Xf_XbnGObS1jiUgcRrQ85Gq28,1978
|
10
10
|
numba_cuda/numba/cuda/cg.py,sha256=9V1uZqyGOJX1aFd9c6GAPbLSqq83lE8LoP-vxxrKENY,1490
|
11
|
-
numba_cuda/numba/cuda/codegen.py,sha256=
|
11
|
+
numba_cuda/numba/cuda/codegen.py,sha256=9LnTlei-4JK7iq3Rg-H2Y19Oh_u5ZXMC_CPfattANjw,12358
|
12
12
|
numba_cuda/numba/cuda/compiler.py,sha256=47SjuI5p4yWCujAglIq0Cb0ARO8QxRp4fOZropkNMtQ,16001
|
13
13
|
numba_cuda/numba/cuda/cpp_function_wrappers.cu,sha256=iv84_F6Q9kFjV_kclrQz1msh6Dud8mI3qNkswTid7Qc,953
|
14
14
|
numba_cuda/numba/cuda/cuda_fp16.h,sha256=1IC0mdNdkvKbvAe0-f4uYVS7WFrVqOyI1nRUbBiqr6A,126844
|
15
15
|
numba_cuda/numba/cuda/cuda_fp16.hpp,sha256=vJ7NUr2X2tKhAP7ojydAiCoOjVO6n4QGoXD6m9Srrlw,89130
|
16
|
-
numba_cuda/numba/cuda/cuda_paths.py,sha256=
|
16
|
+
numba_cuda/numba/cuda/cuda_paths.py,sha256=wwZKOUS0FyZloRUgDVDPPCwtm3t6Js7U369_YgMpEC0,9859
|
17
17
|
numba_cuda/numba/cuda/cudadecl.py,sha256=ynUidit8oPGjedc6p1miMGtS20DOji3DiQHzwmx6m0s,23192
|
18
18
|
numba_cuda/numba/cuda/cudaimpl.py,sha256=3YMxQSCv2KClBrpuXGchrTNICV1F6NIjjL2rie5fDZ4,38628
|
19
19
|
numba_cuda/numba/cuda/cudamath.py,sha256=EFNtdzEytAZuwijdRoFGzVKCeal76UzzaNy7wUFQx8I,3978
|
20
20
|
numba_cuda/numba/cuda/decorators.py,sha256=qSpir16-jPYSe2YuRZ6g9INeobmsMNg6ab9IZpwJocM,7823
|
21
21
|
numba_cuda/numba/cuda/descriptor.py,sha256=rNMaurJkjNjIBmHPozDoLC35DMURE0fn_LtnXRmaG_w,985
|
22
|
-
numba_cuda/numba/cuda/device_init.py,sha256=
|
22
|
+
numba_cuda/numba/cuda/device_init.py,sha256=lP79tCsQ0Np9xcbjv_lXcH4JOiVZvV8nwg3INdETxsc,3586
|
23
23
|
numba_cuda/numba/cuda/deviceufunc.py,sha256=yxAH71dpgJWK8okmCJm0FUV6z2AqdThCYOTZspT7z0M,30775
|
24
|
-
numba_cuda/numba/cuda/dispatcher.py,sha256=
|
24
|
+
numba_cuda/numba/cuda/dispatcher.py,sha256=1ND28o_YeP_0YS2iFYwCH9Byc87qTvCVKjT7PHu2Fsg,41233
|
25
25
|
numba_cuda/numba/cuda/errors.py,sha256=XwWHzCllx0DXU6BQdoRH0m3pznGxnTFOBTVYXMmCfqg,1724
|
26
26
|
numba_cuda/numba/cuda/extending.py,sha256=URsyBYls2te-mgE0yvDY6akvawYCA0blBFfD7Lf9DO4,142
|
27
27
|
numba_cuda/numba/cuda/initialize.py,sha256=TQGHGLQoq4ch4J6CLDcJdGsZzXM-g2kDgdyO1u-Rbhg,546
|
28
28
|
numba_cuda/numba/cuda/intrinsic_wrapper.py,sha256=zbcUbegbfF3GdnC2Rl-z26-gozE8xBtaMxpS8LpOhfo,2239
|
29
|
-
numba_cuda/numba/cuda/intrinsics.py,sha256=
|
29
|
+
numba_cuda/numba/cuda/intrinsics.py,sha256=k0mQYAt0FTlJeghE5V8lSBtO4fgKH1jSRRLwHHcH4M0,6100
|
30
30
|
numba_cuda/numba/cuda/libdevice.py,sha256=476LeIEaAth409m-0OO1SMMmY5AHzN2AotXI__k_yYE,60065
|
31
31
|
numba_cuda/numba/cuda/libdevicedecl.py,sha256=xdZbb_rCaftMf8Pbw63g_Lr230N-1QoaYzBxq8udKTg,532
|
32
32
|
numba_cuda/numba/cuda/libdevicefuncs.py,sha256=c80lGpGoFIYkAdgr4fzbxzdNCyJYrLdss64bwa0Mc6w,37471
|
@@ -38,31 +38,34 @@ numba_cuda/numba/cuda/printimpl.py,sha256=Y1BCQ7EgO2wQ7O6LibNVYBG3tmjVTvmURATW40
|
|
38
38
|
numba_cuda/numba/cuda/random.py,sha256=khX8iDdde_RTUPWhAqrxZacHRQAorFr7BokPuxRWzrg,10456
|
39
39
|
numba_cuda/numba/cuda/simulator_init.py,sha256=W_bPRtmPGOQVuiprbgt7ENnnnELv_LPCeLDIsfsvFZ8,460
|
40
40
|
numba_cuda/numba/cuda/stubs.py,sha256=W3tozv4ganMnfbdFqyPjgQXYeX8GQhwx_xXgv8jk6iM,22270
|
41
|
-
numba_cuda/numba/cuda/target.py,sha256=
|
41
|
+
numba_cuda/numba/cuda/target.py,sha256=hBflzmxCGlmTugWT1sYhZj9f4HkQAMK2RQ9lO85pMW4,17052
|
42
42
|
numba_cuda/numba/cuda/testing.py,sha256=E0wP2vfno1yWsl0v1zg31kpbU8FrKxTF-5y9Iv4WjA4,6412
|
43
43
|
numba_cuda/numba/cuda/types.py,sha256=WVfjcly_VUpG9FfKueiEPzZm2NV8Hg0XAFg3bNzPdVc,1314
|
44
44
|
numba_cuda/numba/cuda/ufuncs.py,sha256=txw27IxG80W1Yo7e-XwL2AMcQo0fMnxMjBIMy-n5pCo,23317
|
45
45
|
numba_cuda/numba/cuda/vector_types.py,sha256=s18dY0IUpT-RcaBvQsa_zEbYuuL2IT0Vh6afCeccwmQ,6750
|
46
46
|
numba_cuda/numba/cuda/vectorizers.py,sha256=u_0EzaD5tqVH8uOz4Gmqn3FgPC1rckwDAQuROm0BXm8,8915
|
47
47
|
numba_cuda/numba/cuda/cudadrv/__init__.py,sha256=0TL4MZcJXUoo9qA7uu0vLv7eHrXRerVmyfi7O149ITw,199
|
48
|
-
numba_cuda/numba/cuda/cudadrv/devicearray.py,sha256=
|
48
|
+
numba_cuda/numba/cuda/cudadrv/devicearray.py,sha256=06kM7iFcx1TYiFhs1o9r1kyoA3k5yS7mFAdZDf6nrxA,31215
|
49
49
|
numba_cuda/numba/cuda/cudadrv/devices.py,sha256=6SneNmoq83gue0txFWWx4A65vViAa8xA06FzkApoqAk,7992
|
50
|
-
numba_cuda/numba/cuda/cudadrv/driver.py,sha256=
|
50
|
+
numba_cuda/numba/cuda/cudadrv/driver.py,sha256=uPjKugdtSJfIwVSAo3KgkvQhctbABkQphHAfcq6Q7ec,110892
|
51
51
|
numba_cuda/numba/cuda/cudadrv/drvapi.py,sha256=52ms3X6hfPaQB8E1jb6g7QKqRvHzBMlDQ-V2DM1rXxQ,17178
|
52
52
|
numba_cuda/numba/cuda/cudadrv/dummyarray.py,sha256=nXRngdr-k3h_BNGQuJUxmp89yGNWxqEDJedpwDPEZ44,14209
|
53
|
-
numba_cuda/numba/cuda/cudadrv/enums.py,sha256=
|
53
|
+
numba_cuda/numba/cuda/cudadrv/enums.py,sha256=37zZmyrLvT-7R8wWtwKJkQhN8siLMxsDGiA3_NQ-yx8,23740
|
54
54
|
numba_cuda/numba/cuda/cudadrv/error.py,sha256=zEIryW6aIy8GG4ypmTliB6RgY4Gy2n8ckz7I6W99LUM,524
|
55
|
-
numba_cuda/numba/cuda/cudadrv/libs.py,sha256=
|
55
|
+
numba_cuda/numba/cuda/cudadrv/libs.py,sha256=Gk9zQ1CKcsZsWl-_9QneXeP9VH5q5R1I3Cx043UOytk,7240
|
56
|
+
numba_cuda/numba/cuda/cudadrv/linkable_code.py,sha256=Q_YTv0apBo9t8pkMlKrthPPSVeLd376ZTmVDF5NtVVo,1328
|
57
|
+
numba_cuda/numba/cuda/cudadrv/mappings.py,sha256=-dTPHvAkDjdH6vS5OjgrB71AFuqKO6CRgf7hpOk2wiw,802
|
56
58
|
numba_cuda/numba/cuda/cudadrv/ndarray.py,sha256=HtULWWFyDlgqvrH5459yyPTvU4UbUo2DSdtcNfvbH00,473
|
57
|
-
numba_cuda/numba/cuda/cudadrv/nvrtc.py,sha256=
|
59
|
+
numba_cuda/numba/cuda/cudadrv/nvrtc.py,sha256=rv-XQo0snJj4xyEbfeBqivziIxCwMOQzIIEOnvLQaJI,9825
|
58
60
|
numba_cuda/numba/cuda/cudadrv/nvvm.py,sha256=v2hJJTAQeRmoG59-hnhgMEp5BSVA73QHtEoy636VKao,24107
|
59
61
|
numba_cuda/numba/cuda/cudadrv/rtapi.py,sha256=WdeUoWzsYNYodx8kMRLVIjnNs0QzwpCihd2Q0AaqItE,226
|
60
62
|
numba_cuda/numba/cuda/cudadrv/runtime.py,sha256=Tj9ACrzQqNmDSO6xfpzw12EsQknSywQ-ZGuWMbDdHnQ,4255
|
61
63
|
numba_cuda/numba/cuda/kernels/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
62
64
|
numba_cuda/numba/cuda/kernels/reduction.py,sha256=fQnaWtoNB2yp143MNbE1DujqFIYy0KV_2moQVvbaROU,9362
|
63
65
|
numba_cuda/numba/cuda/kernels/transpose.py,sha256=5FSu-nbTfhintxwfU-bjT2px2otQF5QkKH-JPDDWq_k,2061
|
66
|
+
numba_cuda/numba/cuda/runtime/nrt.cu,sha256=i8Xcf-x84n3uNPzs_xak4c_sLHOH91ast2aE6DKKf9Q,5497
|
64
67
|
numba_cuda/numba/cuda/simulator/__init__.py,sha256=crW0VQ_8e7DMRSHKoAIziZ37ea5mpbh_49tR9M3d5YY,1610
|
65
|
-
numba_cuda/numba/cuda/simulator/api.py,sha256=
|
68
|
+
numba_cuda/numba/cuda/simulator/api.py,sha256=K_fX-w9X4grGx2IAp0XlBW9rth5l7wibMwinQvkE7Jc,3237
|
66
69
|
numba_cuda/numba/cuda/simulator/compiler.py,sha256=eXnvmzSKzIZZzBz6ZFJ-vMNyRAgqbCiB-AO5IJXuUyM,232
|
67
70
|
numba_cuda/numba/cuda/simulator/kernel.py,sha256=GO4HuXBlEstJtgiuMRB_6hjNizBSINR9_hganvMjHH4,10593
|
68
71
|
numba_cuda/numba/cuda/simulator/kernelapi.py,sha256=ZYC_XQqnA51TJCPlAjVHHkOjXeww0yUP6JZeibXw3T8,12397
|
@@ -100,6 +103,7 @@ numba_cuda/numba/cuda/tests/cudadrv/test_is_fp16.py,sha256=0KPe4E9wOZsSV_0QI0Lmj
|
|
100
103
|
numba_cuda/numba/cuda/tests/cudadrv/test_linker.py,sha256=_l2_EQEko2Jet5ooj4XMT0L4BjOuqLjbONGj1_MVI50,10161
|
101
104
|
numba_cuda/numba/cuda/tests/cudadrv/test_managed_alloc.py,sha256=kYXYMkx_3GPAITKp4reLeM8KSzKkpxiC8nxnBvXpaTA,4979
|
102
105
|
numba_cuda/numba/cuda/tests/cudadrv/test_mvc.py,sha256=984jATSa01SRoSrVqxPeO6ujJ7w2jsnZa39ABInFLVI,1529
|
106
|
+
numba_cuda/numba/cuda/tests/cudadrv/test_nvjitlink.py,sha256=m5zv6K6PHLnm-AqHKo5x9f_ZBrn3rmvPX_ZGjjrkPfI,6807
|
103
107
|
numba_cuda/numba/cuda/tests/cudadrv/test_nvvm_driver.py,sha256=DF7KV5uh-yMztks0f47NhpalV64dvsNy-f8HY6GhAhE,7373
|
104
108
|
numba_cuda/numba/cuda/tests/cudadrv/test_pinned.py,sha256=u_TthSS2N-2J4eBIuF4PGg33AjD-wxly7MKpz0vRAKc,944
|
105
109
|
numba_cuda/numba/cuda/tests/cudadrv/test_profiler.py,sha256=MQWZx1j3lbEpWmIpQ1bV9szrGOV3VHN0QrEnJRjAhW4,508
|
@@ -151,7 +155,7 @@ numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scalar.py,sha256=Uhe8Q0u42jySrpwA
|
|
151
155
|
numba_cuda/numba/cuda/tests/cudapy/test_gufunc_scheduling.py,sha256=luDtBxFS_5ZbVemXe1Z7gfqMliaU_EAOR4SuLsU5rhw,2677
|
152
156
|
numba_cuda/numba/cuda/tests/cudapy/test_idiv.py,sha256=HLJ_f2lX8m_NNJjUbl_8zZ0-8GsBlRdBP2CUo_yWb0Y,1056
|
153
157
|
numba_cuda/numba/cuda/tests/cudapy/test_inspect.py,sha256=lP9-8SbWFn2Xc-qmF6UNhcY6LreKTnveaK5CGW2pu8E,5196
|
154
|
-
numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py,sha256=
|
158
|
+
numba_cuda/numba/cuda/tests/cudapy/test_intrinsics.py,sha256=M6-pad8nVM0fuL18uFxvE6tmHw0spLNhnMBLVlO0FKU,36400
|
155
159
|
numba_cuda/numba/cuda/tests/cudapy/test_ipc.py,sha256=fggyy-kmsOkCb906_q3kXPGRziccWu7Co7ir83zBMwM,10536
|
156
160
|
numba_cuda/numba/cuda/tests/cudapy/test_iterators.py,sha256=daQW3kSkp7icCmlTn9pCvnaauz60k_eBf4x1UQF-XVY,2344
|
157
161
|
numba_cuda/numba/cuda/tests/cudapy/test_lang.py,sha256=U1BCVZMjU1AZ4wDSmjsRIPPcAReiq4dB77Cz7GmrdmA,1691
|
@@ -172,7 +176,7 @@ numba_cuda/numba/cuda/tests/cudapy/test_operator.py,sha256=0nJej4D898_JU-jhlif44
|
|
172
176
|
numba_cuda/numba/cuda/tests/cudapy/test_optimization.py,sha256=SvqRsSFgcGxkFDZS-kul5B-mi8GxINTS98uUzAy4dhw,2647
|
173
177
|
numba_cuda/numba/cuda/tests/cudapy/test_overload.py,sha256=u4yUDVFcV9E3NWMlNjM81e3IW4KaIkcDtXig8JYevsw,8538
|
174
178
|
numba_cuda/numba/cuda/tests/cudapy/test_powi.py,sha256=TI82rYRnkSnwv9VN6PMpBnr9JqMJ_F3HhH4cKY6O8tw,3276
|
175
|
-
numba_cuda/numba/cuda/tests/cudapy/test_print.py,sha256=
|
179
|
+
numba_cuda/numba/cuda/tests/cudapy/test_print.py,sha256=r2xmMNx80_ANi3uFB3CQt3AHAXG_JdhStY1S796hlK0,4466
|
176
180
|
numba_cuda/numba/cuda/tests/cudapy/test_py2_div_issue.py,sha256=R88Vfgg3mSAZ0Jy6WT6dJNmkFTsxnVnEmO7XqpqyxuU,986
|
177
181
|
numba_cuda/numba/cuda/tests/cudapy/test_random.py,sha256=rLw7_8a7BBhD_8GNqMal0l_AbWXzLs_Q0hC6_X8gdjA,3467
|
178
182
|
numba_cuda/numba/cuda/tests/cudapy/test_record_dtype.py,sha256=grR64kdRlsLcR0K3IxSfI2VKsTrrqxsXuROOpvj-6nw,18769
|
@@ -183,6 +187,7 @@ numba_cuda/numba/cuda/tests/cudapy/test_serialize.py,sha256=alE5-lTwbjz3Tv6OvQPS
|
|
183
187
|
numba_cuda/numba/cuda/tests/cudapy/test_slicing.py,sha256=bAh_sIk5V9_0_dOVGdzmyjwZkHMLjEbQuEI4e5zRMoU,903
|
184
188
|
numba_cuda/numba/cuda/tests/cudapy/test_sm.py,sha256=kh1F0wwQ2_bd54Q4GUX99y2oiWHQwBpyC__ckk-jiTU,14575
|
185
189
|
numba_cuda/numba/cuda/tests/cudapy/test_sm_creation.py,sha256=bTXDjU94ezo6Bz_lktlPyowTcJHBOWfy7-nJB9e-B_s,7231
|
190
|
+
numba_cuda/numba/cuda/tests/cudapy/test_stream_api.py,sha256=alwSPm2xLvuYEwzpuCE6UUkOp6xcEoVqZjyJk3VJjtY,1743
|
186
191
|
numba_cuda/numba/cuda/tests/cudapy/test_sync.py,sha256=Y851UqNkT80U9q_C05SQfvPRCY7jjRARHOMk6g0lU4Y,7837
|
187
192
|
numba_cuda/numba/cuda/tests/cudapy/test_transpose.py,sha256=JAQX2EUHwlpKCfJDGspaldmsIRbHxnXpsNUrvRrnIEE,3134
|
188
193
|
numba_cuda/numba/cuda/tests/cudapy/test_ufuncs.py,sha256=-ehvkxelr45aT8sUNL9Hq8cn2GU_K4GL1yWeX-rHqEM,9680
|
@@ -224,8 +229,15 @@ numba_cuda/numba/cuda/tests/nocuda/test_function_resolution.py,sha256=o4DYocyHK7
|
|
224
229
|
numba_cuda/numba/cuda/tests/nocuda/test_import.py,sha256=teiL8rpFGQOh41kyBSSNHHFYAJYgpdStXkTcpK4_fxo,1641
|
225
230
|
numba_cuda/numba/cuda/tests/nocuda/test_library_lookup.py,sha256=7kJOPHEcrjy_kTA9Ym-iT_B972bgFRu3UkRtwIgWtuI,7948
|
226
231
|
numba_cuda/numba/cuda/tests/nocuda/test_nvvm.py,sha256=n0_-xFaw6QqiZbhe55oy7lnEeOwqTvA55p5EUFiTpNw,2006
|
227
|
-
numba_cuda
|
228
|
-
numba_cuda
|
229
|
-
numba_cuda
|
230
|
-
numba_cuda
|
231
|
-
numba_cuda
|
232
|
+
numba_cuda/numba/cuda/tests/nrt/__init__.py,sha256=43EXdiXXRBd6yIcVGMrU9F_EJCD9Uw3mzOP3SB53AEE,260
|
233
|
+
numba_cuda/numba/cuda/tests/nrt/mock_numpy.py,sha256=Qtn52GoKZ_ydre3oqkLWVdImC37tuPClUy4uHSutaJo,1568
|
234
|
+
numba_cuda/numba/cuda/tests/nrt/test_nrt.py,sha256=Ox6ei2DldvSSS-CndTXRxLnsvWdteOQNgn6GvKHB244,2789
|
235
|
+
numba_cuda/numba/cuda/tests/test_binary_generation/Makefile,sha256=OFC_6irwscCNGAyJJKq7fTchzWosCUuiVWU02m0bcUQ,2248
|
236
|
+
numba_cuda/numba/cuda/tests/test_binary_generation/generate_raw_ltoir.py,sha256=V0raLZLGSiWbE_K-JluI0CnmNkXbhlMVj-TH7P1OV8E,5014
|
237
|
+
numba_cuda/numba/cuda/tests/test_binary_generation/test_device_functions.cu,sha256=cUf-t6ZM9MK_x7X_aKwsrKW1LdR97XcpR-qnYr5faOE,453
|
238
|
+
numba_cuda/numba/cuda/tests/test_binary_generation/undefined_extern.cu,sha256=q3oxZziT8KDodeNcEBiWULH6vMrHCWucmJmtrg8C0d0,128
|
239
|
+
numba_cuda-0.0.19.dist-info/LICENSE,sha256=eHeYE-XjASmwbxfsP5AImgfzRwZurZGqH1f6OFwJ4io,1326
|
240
|
+
numba_cuda-0.0.19.dist-info/METADATA,sha256=GAWms3JiCaxTzo4WMk-5h31_Oqo8YFPgekLKFR_YfqA,1393
|
241
|
+
numba_cuda-0.0.19.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
242
|
+
numba_cuda-0.0.19.dist-info/top_level.txt,sha256=C50SsH-8tXDmt7I0Y3nlJYhS5s6pqWflCPdobe9vx2M,11
|
243
|
+
numba_cuda-0.0.19.dist-info/RECORD,,
|
File without changes
|
File without changes
|