Skip to content

Commit 427da00

Browse files
committed
24.06.01 release
1 parent 510e24a commit 427da00

File tree

12 files changed

+88
-65
lines changed

12 files changed

+88
-65
lines changed

.github/workflows/ci-gh-nightly-release.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,17 @@ jobs:
2323
upload-enabled:
2424
- true
2525
- false
26+
python-version:
27+
- "3.10"
28+
- "3.11"
29+
- "3.12"
2630
uses:
2731
./.github/workflows/gh-build-and-test.yml
2832
with:
2933
target-device: ${{ matrix.target-device }}
3034
platform: ${{ matrix.platform }}
3135
build-type: release
3236
upload-enabled: ${{ matrix.upload-enabled }}
37+
python-version: ${{ matrix.python-version }}
3338
dependencies-workflow: "ci-gh-nightly-release.yml"
3439
secrets: inherit

.github/workflows/ci-gh-release.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ jobs:
2525
- cpu
2626
upload-enabled:
2727
- false
28+
python-version:
29+
- "3.12"
2830
exclude:
2931
- platform: linux-aarch64
3032
target-device: gpu
@@ -35,5 +37,6 @@ jobs:
3537
platform: ${{ matrix.platform }}
3638
build-type: release
3739
upload-enabled: ${{ matrix.upload-enabled }}
40+
python-version: ${{ matrix.python-version }}
3841
dependencies-workflow: "ci-gh-nightly-release.yml"
3942
secrets: inherit

.github/workflows/gh-build-and-test.yml

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ on:
1717
required: true
1818
type: string
1919
description: The workflow file name used by the dependency
20+
python-version:
21+
required: false
22+
type: string
23+
default: "3.12"
2024

2125
jobs:
2226
setup-build:
@@ -41,9 +45,9 @@ jobs:
4145
4246
build:
4347
needs: setup-build
44-
name: "Build (${{ inputs.platform }}, ${{ inputs.target-device }}, ${{ inputs.build-type }})"
48+
name: "Build (${{ inputs.platform }}, ${{ inputs.target-device }}, ${{ inputs.build-type }}, Python ${{ inputs.python-version }})"
4549
uses:
46-
nv-legate/legate-gh-ci/.github/workflows/gh-build.yml@v1.8
50+
nv-legate/legate-gh-ci/.github/workflows/gh-build.yml@v1.9
4751
with:
4852
client-repo: ${{ github.event.repository.name }}
4953
target-device: ${{ inputs.target-device }}
@@ -53,10 +57,11 @@ jobs:
5357
platform: ${{ inputs.platform }}
5458
dependencies-file: "cmake/versions.json"
5559
dependencies-workflow: ${{ inputs.dependencies-workflow }}
56-
legate-gh-ci-tag: "v1.8"
60+
legate-gh-ci-tag: "v1.9"
5761
build-mode: ""
5862
ucx-enabled: false
5963
upload-enabled: ${{ inputs.upload-enabled }}
64+
python-version: ${{ inputs.python-version }}
6065
secrets: inherit
6166

6267

@@ -65,20 +70,21 @@ jobs:
6570
if: ${{ github.repository_owner == 'nv-legate' && contains(github.workflow, 'release') && inputs.upload-enabled == true }}
6671
name: Upload package to Server
6772
uses:
68-
nv-legate/legate-gh-ci/.github/workflows/gh-upload.yml@v1.8
73+
nv-legate/legate-gh-ci/.github/workflows/gh-upload.yml@v1.9
6974
with:
7075
client-repo: ${{ github.event.repository.name }}
7176
build-type: ${{ inputs.build-type }}
7277
name: Upload package to Server
7378
target-device: ${{ inputs.target-device }}
7479
platform: ${{ inputs.platform }}
75-
legate-gh-ci-tag: "v1.8"
80+
legate-gh-ci-tag: "v1.9"
7681
build-mode: ""
7782
ucx-enabled: false
7883
upload-enabled: ${{ inputs.upload-enabled }}
7984
upload-action: "upload-package"
8085
pkgSubString: "cunumeric-"
8186
repos-Root: "cunumeric"
87+
python-version: ${{ inputs.python-version }}
8288
secrets: inherit
8389

8490
setup-test:
@@ -150,7 +156,7 @@ jobs:
150156
matrix: ${{fromJson(needs.setup-test.outputs.matrix)}}
151157

152158
uses:
153-
nv-legate/legate-gh-ci/.github/workflows/gh-test-within-container.yml@v1.8
159+
nv-legate/legate-gh-ci/.github/workflows/gh-test-within-container.yml@v1.9
154160
with:
155161
client-repo: ${{ github.event.repository.name }}
156162
build-type: ${{ inputs.build-type }}
@@ -160,29 +166,31 @@ jobs:
160166
has-gpu: ${{ matrix.runner.type == 'gpu' }}
161167
test-options: ${{ matrix.test-config.test-options }}
162168
platform: ${{ inputs.platform }}
163-
legate-gh-ci-tag: "v1.8"
169+
legate-gh-ci-tag: "v1.9"
164170
build-mode: ""
165171
ucx-enabled: false
166172
upload-enabled: ${{ inputs.upload-enabled }}
173+
python-version: ${{ inputs.python-version }}
167174
secrets: inherit
168175

169176
updateTestStatus:
170177
needs: test
171178
name: Update Test status on Server
172179
if: ${{ (github.repository_owner == 'nv-legate') && contains(github.workflow, 'Nightly') && (inputs.upload-enabled == true) }}
173180
uses:
174-
nv-legate/legate-gh-ci/.github/workflows/gh-upload.yml@v1.8
181+
nv-legate/legate-gh-ci/.github/workflows/gh-upload.yml@v1.9
175182
with:
176183
client-repo: ${{ github.event.repository.name }}
177184
build-type: ${{ inputs.build-type }}
178185
name: UpdateTestStatus
179186
target-device: ${{ inputs.target-device }}
180187
platform: ${{ inputs.platform }}
181-
legate-gh-ci-tag: "v1.8"
188+
legate-gh-ci-tag: "v1.9"
182189
build-mode: ""
183190
ucx-enabled: false
184191
upload-enabled: true
185192
upload-action: "update-test-status"
186193
pkgSubString: "cunumeric-"
187-
repos-Root: "cunumeric"
194+
repos-Root: "cunumeric"
195+
python-version: ${{ inputs.python-version }}
188196
secrets: inherit

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ include(rapids-cuda)
5757
include(rapids-export)
5858
include(rapids-find)
5959

60-
set(cunumeric_version 24.05.00)
60+
set(cunumeric_version 24.06.00)
6161

6262
# For now we want the optimization flags to match on both normal make and cmake
6363
# builds so we override the cmake defaults here for release, this changes

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,14 @@ or install it into an existing environment:
5252
conda install -c conda-forge -c legate cunumeric
5353
```
5454

55+
In an environment without GPUs available, `conda install` will by default choose a CPU-only package.
56+
To install a version with GPU support in such an environment, use environment variable `CONDA_OVERRIDE_CUDA`.
57+
58+
```shell
59+
CONDA_OVERRIDE_CUDA="12.2" \
60+
conda install -c conda-forge -c legate legate-core
61+
```
62+
5563
Once installed, you can verify the installation by running one of the examples
5664
from the cuNumeric repository, for instance:
5765

cmake/versions.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
"packages" : {
33
"legate_core" : {
44
"repo": "legate.core.internal",
5-
"artifact_name": "${{ inputs.platform }}-${{ inputs.build-type }}-<<repo>>-${{ inputs.target-device }}-release-<<git_tag>>",
6-
"version": "24.05.00",
5+
"artifact_name": "${{ inputs.platform }}-${{ inputs.build-type }}-<<repo>>-python${{ env.PYTHON_VERSION }}-${{ inputs.target-device }}-release-<<git_tag>>",
6+
"version": "24.06.00",
77
"git_url" : "git@github.com:nv-legate/legate.core.internal.git",
88
"git_shallow": false,
99
"always_download": false,
10-
"git_tag" : "2e1ca409a4f67593aeb859834085919907e9e531"
10+
"git_tag" : "6f1c6e55789be286ec8e2e94dc1d95e5dbbc10a2"
1111
}
1212
}
1313
}

conda/conda-build/meta.yaml

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,15 @@ build:
8484
- AWS_SECRET_ACCESS_KEY
8585
{% if not gpu_enabled_bool %}
8686
- CPU_ONLY=1
87+
# The CPU-only packages having more track_features than the GPU builds helps
88+
# the solver to prefer the GPU builds when both are viable candidates.
89+
# ref: https://docs.conda.io/projects/conda-build/en/latest/resources/define-metadata.html#track-features
8790
track_features:
8891
- cpu_only
8992
{% endif %}
9093

9194
ignore_run_exports_from:
92-
# scikit-build should really be a part of the build env, but then it installs its own Python. Conda build stacks
95+
# scikit-build should really be a part of the build env, but then it installs its own Python. Conda build stacks
9396
# the build environment on the host environment, and the build python takes over causing paths havoc. So, we put
9497
# scikit-build into the host env, but we ignore any exports it may bring.
9598
- scikit-build
@@ -101,12 +104,11 @@ requirements:
101104
- cmake {{ cmake_version }}
102105
- {{ compiler('c') }} =11.2
103106
- {{ compiler('cxx') }} =11.2
104-
# the nvcc requirement is necessary because it contains crt/host_config.h used by cuda runtime. This is a packaging bug that has been reported.
105-
106-
- cuda-nvcc ={{ cuda_version }}
107+
# the nvcc requirement is necessary because it contains crt/host_config.h used by cuda runtime. This is a packaging bug that has been reported.
108+
- cuda-nvcc
107109
# cudart needed for CPU and GPU builds because of curand
108-
109-
- cuda-cudart-dev ={{ cuda_version }}
110+
- cuda-cudart-dev
111+
- cuda-version ={{ cuda_version }}
110112

111113

112114
host:
@@ -125,19 +127,24 @@ requirements:
125127
{% else %}
126128
- legate-core >={{ core_version }} =*_cpu*
127129
{% endif %}
130+
- cuda-version ={{ cuda_version }}
128131

129132
run:
130133
- numpy {{ numpy_version }}
131134
- libnvjitlink
132135
- libcusparse
133136
- opt_einsum >=3.3
134137
- scipy
138+
- openblas =* =*openmp*
139+
# Pin to all minor versions of CUDA newer than the one built against, within the same major version.
140+
# cuda-version constrains the CUDA runtime version and ensures a compatible driver is available
141+
- {{ pin_compatible('cuda-version', min_pin='x.x', max_pin='x') }}
142+
{% if gpu_enabled_bool %}
143+
- __cuda >={{ cuda_version }}
144+
{% endif %}
135145

136146
run_constrained:
137147
- __glibc >=2.17 # [linux]
138-
{% if gpu_enabled_bool %}
139-
- __cuda
140-
{% endif %}
141148

142149
about:
143150
home: https://github.com/nv-legate/cunumeric

src/cunumeric/item/write.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ namespace cunumeric {
2121

2222
using namespace legate;
2323

24-
template <typename VAL>
25-
struct WriteImplBody<VariantKind::CPU, VAL> {
26-
void operator()(AccessorWO<VAL, 1> out, const AccessorRO<VAL, 1>& value) const
24+
template <typename VAL, int DIM>
25+
struct WriteImplBody<VariantKind::CPU, VAL, DIM> {
26+
void operator()(const AccessorWO<VAL, 1>& out, const AccessorRO<VAL, DIM>& value) const
2727
{
28-
out[0] = value[0];
28+
out[0] = value[Point<DIM>::ZEROES()];
2929
}
3030
};
3131

src/cunumeric/item/write.cu

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,19 @@
2020

2121
namespace cunumeric {
2222

23-
template <typename VAL>
23+
template <typename VAL, int DIM>
2424
static __global__ void __launch_bounds__(1, 1)
25-
write_value(const AccessorWO<VAL, 1> out, const AccessorRO<VAL, 1> value)
25+
write_value(const AccessorWO<VAL, 1> out, const AccessorRO<VAL, DIM> value)
2626
{
27-
out[0] = value[0];
27+
out[0] = value[Point<DIM>::ZEROES()];
2828
}
2929

30-
template <typename VAL>
31-
struct WriteImplBody<VariantKind::GPU, VAL> {
32-
void operator()(const AccessorWO<VAL, 1>& out, const AccessorRO<VAL, 1>& value) const
30+
template <typename VAL, int DIM>
31+
struct WriteImplBody<VariantKind::GPU, VAL, DIM> {
32+
void operator()(const AccessorWO<VAL, 1>& out, const AccessorRO<VAL, DIM>& value) const
3333
{
3434
auto stream = get_cached_stream();
35-
write_value<VAL><<<1, 1, 0, stream>>>(out, value);
35+
write_value<VAL, DIM><<<1, 1, 0, stream>>>(out, value);
3636
CUNUMERIC_CHECK_CUDA_STREAM(stream);
3737
}
3838
};

src/cunumeric/item/write_template.inl

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,18 @@ namespace cunumeric {
2323

2424
using namespace legate;
2525

26-
template <VariantKind KIND, typename VAL>
26+
template <VariantKind KIND, typename VAL, int DIM>
2727
struct WriteImplBody;
2828

2929
template <VariantKind KIND>
3030
struct WriteImpl {
31-
template <Type::Code CODE>
31+
template <Type::Code CODE, int DIM>
3232
void operator()(legate::PhysicalStore out_arr, legate::PhysicalStore in_arr) const
3333
{
3434
using VAL = type_of<CODE>;
3535
auto out = out_arr.write_accessor<VAL, 1>();
36-
auto in = in_arr.read_accessor<VAL, 1>();
37-
WriteImplBody<KIND, VAL>()(out, in);
36+
auto in = in_arr.read_accessor<VAL, DIM>();
37+
WriteImplBody<KIND, VAL, DIM>()(out, in);
3838
}
3939
};
4040

@@ -43,7 +43,8 @@ static void write_template(TaskContext& context)
4343
{
4444
auto in = context.input(0);
4545
auto out = context.output(0);
46-
type_dispatch(out.type().code(), WriteImpl<KIND>{}, out, in);
46+
auto dim = std::max(1, in.dim());
47+
legate::double_dispatch(dim, out.type().code(), WriteImpl<KIND>(), out, in);
4748
}
4849

4950
} // namespace cunumeric

tests/cpp/integration/util.inl

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,23 @@
1515
*/
1616

1717
namespace {
18+
19+
template <typename T, typename U = void>
20+
struct has_operator_left_shift : std::false_type {};
21+
1822
template <typename T>
19-
std::stringstream& print_value(std::stringstream& ss, T value)
20-
{
21-
ss << value;
22-
return ss;
23-
}
23+
struct has_operator_left_shift<T, std::void_t<decltype(std::cout << std::declval<T>())>>
24+
: std::true_type {};
2425

25-
template <>
26-
std::stringstream& print_value<complex<float>>(std::stringstream& ss, complex<float> value)
27-
{
28-
// operator<< missing for cuda::std::complex
29-
// The issue is going to be fixed in the next cuda release.
30-
#if CUDART_VERSION >= 12050
31-
ss << value;
32-
#endif
33-
return ss;
34-
}
26+
template <typename T>
27+
constexpr bool has_operator_left_shift_v = has_operator_left_shift<T>::value;
3528

36-
template <>
37-
std::stringstream& print_value<complex<double>>(std::stringstream& ss, complex<double> value)
29+
template <typename T>
30+
std::stringstream& print_value(std::stringstream& ss, T value)
3831
{
39-
// operator<< missing for cuda::std::complex
40-
// The issue is going to be fixed in the next cuda release.
41-
#if CUDART_VERSION >= 12050
42-
ss << value;
43-
#endif
32+
if constexpr (has_operator_left_shift_v<T>) {
33+
ss << value;
34+
}
4435
return ss;
4536
}
4637

tests/integration/test_singleton_access.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ def array_gen(lib):
6464
yield arr
6565
for arr in nonscalar_gen(lib):
6666
idx_tuple = arr.ndim * (2,)
67-
arr[idx_tuple] = -1
67+
arr[idx_tuple] = lib.full((1,), -1)
6868
yield arr
6969
for arr in nonscalar_gen(lib):
7070
idx_tuple = arr.ndim * (2,)
71-
arr[idx_tuple] = -1
71+
arr[idx_tuple] = lib.full((1, 1), -1)
7272
yield arr
7373
# set single item on scalar array
7474
for arr in scalar_gen(lib, 42):
@@ -77,11 +77,11 @@ def array_gen(lib):
7777
yield arr
7878
for arr in scalar_gen(lib, 42):
7979
idx_tuple = arr.ndim * (0,)
80-
arr[idx_tuple] = -1
80+
arr[idx_tuple] = lib.full((1,), -1)
8181
yield arr
8282
for arr in scalar_gen(lib, 42):
8383
idx_tuple = arr.ndim * (0,)
84-
arr[idx_tuple] = -1
84+
arr[idx_tuple] = lib.full((1, 1), -1)
8585
yield arr
8686
# set "multiple" items on scalar array
8787
for arr in scalar_gen(lib, 42):

0 commit comments

Comments
 (0)