Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/clippy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ jobs:
env:
CUDA_TOOLKIT_PATH: ${{ steps.cuda-toolkit.outputs.CUDA_PATH }}
CARGO_TARGET_DIR: ${{ runner.temp }}/clippy-shared-target
RUSTC_BOOTSTRAP: "1"
run: |
set -e
example_roots=(
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/fmt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ jobs:
working-directory: cuda-oxide/crates/cuda-macros/tests/device-only

- name: Check example and model crate formatting
env:
RUSTC_BOOTSTRAP: "1"
run: |
set -euo pipefail
# `cargo fmt --all` also formats local path dependencies. Running it
Expand Down
3 changes: 3 additions & 0 deletions cuda-oxide/.cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ oxide = "run --package cargo-oxide --"

# Environment variables for all builds
[env]
# Unlock `-Z` flags and `#![feature(rustc_private)]` on the pinned stable
# release (`rust-toolchain.toml`).
RUSTC_BOOTSTRAP = "1"
# libmathdx installation path (for libmathdx-sys crate)
# Required only when using --features libmathdx with mathdx_ffi_test.
# IMPORTANT: Replace the placeholder below with your libmathdx install dir,
Expand Down
2 changes: 1 addition & 1 deletion cuda-oxide/.devcontainer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This dev container provides the toolchain expected by cuda-oxide:
- CUDA Toolkit 13.0
- LLVM 21 with NVPTX support
- Clang 21 resource headers for `bindgen`
- Rust `nightly-2026-10-11` with `rust-src`, `rustc-dev`, `rust-analyzer`,
- Rust `1.99.1` with `rust-src`, `rustc-dev`, `rust-analyzer`,
`rustfmt` and `clippy`. `llvm-tools` is not preinstalled in the image;
rustup adds it on your first cargo command under `cuda-oxide/`, because
`cuda-oxide/rust-toolchain.toml` names it. The image ships LLVM 21 and
Expand Down
2 changes: 1 addition & 1 deletion cuda-oxide/.devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"upgradePackages": false
},
"ghcr.io/devcontainers/features/rust:1": {
"version": "nightly-2026-10-11",
"version": "1.99.1",
"profile": "minimal",
"components": "rust-src,rustc-dev,rust-analyzer,rustfmt,clippy"
}
Expand Down
4 changes: 4 additions & 0 deletions cuda-oxide/Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ set windows-shell := ["powershell.exe", "-NoLogo", "-Command"]
# Use Bash on Unix
set shell := ["bash", "-c"]

# Unlock unstable Cargo (`cargo-features = ["profile-rustflags"]`) and rustc
# (`-Z`, `#![feature(rustc_private)]`) gates on the pinned stable toolchain.
export RUSTC_BOOTSTRAP := "1"

# Format all Rust code (SIMT workspace, codegen, examples)
fmt:
cargo oxide fmt
Expand Down
10 changes: 5 additions & 5 deletions cuda-oxide/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,17 +161,17 @@ cargo oxide update

From `cuda-oxide/`, `cargo oxide` works out of the box via a workspace alias.

For use outside the repo (your own projects), install it with the pinned nightly toolchain:
For use outside the repo (your own projects), install it with the pinned toolchain:

```bash
cargo +nightly-2026-10-11 install --git https://github.com/NVIDIA/cuda-rust.git cargo-oxide
cargo +1.99.1 install --git https://github.com/NVIDIA/cuda-rust.git cargo-oxide
```

On first run, `cargo-oxide` will automatically fetch and build the codegen backend.

#### Nix (alternative)

If you have Nix with flakes enabled, `nix develop` from `cuda-oxide/` gives you a reproducible shell with CUDA 13, LLVM 22, Clang, and the pinned Rust nightly — no manual apt installs. The shellHook auto-discovers host NVIDIA drivers on NixOS and non-NixOS systems.
If you have Nix with flakes enabled, `nix develop` from `cuda-oxide/` gives you a reproducible shell with CUDA 13, LLVM 22, Clang, and the pinned Rust toolchain - no manual apt installs. The shellHook auto-discovers host NVIDIA drivers on NixOS and non-NixOS systems.

```bash
# From the repository root:
Expand All @@ -187,8 +187,8 @@ nix run 'github:NVIDIA/cuda-rust?dir=cuda-oxide#new' -- my-project
```bash
# Toolchain installed automatically via rust-toolchain.toml
# Manual install if needed:
rustup toolchain install nightly-2026-10-11
rustup component add rust-src rustc-dev rust-analyzer clippy rustfmt llvm-tools --toolchain nightly-2026-10-11
rustup toolchain install 1.99.1
rustup component add rust-src rustc-dev rust-analyzer clippy rustfmt llvm-tools --toolchain 1.99.1
```

#### CUDA
Expand Down
4 changes: 2 additions & 2 deletions cuda-oxide/crates/cargo-oxide/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ Replaces the previous `xtask` pattern with a proper cargo subcommand that works

**External users**:

Install with the project's pinned nightly toolchain:
Install with the project's pinned toolchain:

```bash
cargo +nightly-2026-10-11 install --git https://github.com/NVIDIA/cuda-rust.git cargo-oxide
cargo +1.99.1 install --git https://github.com/NVIDIA/cuda-rust.git cargo-oxide
```

On first run, `cargo-oxide` will automatically fetch and build the codegen backend if it's not already available.
Expand Down
1 change: 1 addition & 0 deletions cuda-oxide/crates/cargo-oxide/src/backend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1056,6 +1056,7 @@ fn backend_build_command_in(
cmd.env("CARGO_ENCODED_RUSTFLAGS", "");
cmd.env_remove("RUSTFLAGS");
cmd.env_remove("CARGO_BUILD_RUSTFLAGS");
cmd.env("RUSTC_BOOTSTRAP", "1");

if let Some(path) = rustc_lib_path {
cmd.env("LIBRARY_PATH", build_library_path(path));
Expand Down
2 changes: 2 additions & 0 deletions cuda-oxide/crates/cargo-oxide/src/commands/codegen_env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,7 @@ fn apply_codegen_rustflags(
append_full_debug_rustflags(&mut encoded, cmd, inherited_debug.as_deref());

cmd.env("CARGO_ENCODED_RUSTFLAGS", encoded)
.env("RUSTC_BOOTSTRAP", "1")
.env_remove("RUSTFLAGS");
apply_profile_pins(cmd, profile);
}
Expand Down Expand Up @@ -553,6 +554,7 @@ pub fn has_configured_arch(ctx: &Context, cli_arch: Option<&str>) -> bool {
}

pub(super) fn apply_config_env(cmd: &mut Command, ctx: &Context) {
cmd.env("RUSTC_BOOTSTRAP", "1");
for (key, value) in &ctx.config.env {
if matches!(key.as_str(), "RUSTFLAGS" | "CARGO_ENCODED_RUSTFLAGS") {
continue;
Expand Down
1 change: 1 addition & 0 deletions cuda-oxide/crates/cargo-oxide/src/commands/fmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ fn run_cargo_fmt_manifest(manifest: &Path, check: bool) -> bool {
}

fn run_fmt_command(mut cmd: Command) -> bool {
cmd.env("RUSTC_BOOTSTRAP", "1");
match cmd.status() {
Ok(status) => status.success(),
Err(e) => {
Expand Down
1 change: 1 addition & 0 deletions cuda-oxide/crates/cargo-oxide/src/commands/host_cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,7 @@ fn cargo_package_manifest_matches(package: &serde_json::Value, manifest_path: &P

fn cargo_metadata(manifest_dir: &Path) -> Result<serde_json::Value, String> {
let output = Command::new("cargo")
.env("RUSTC_BOOTSTRAP", "1")
.args(["metadata", "--format-version=1", "--no-deps"])
.current_dir(manifest_dir)
.output()
Expand Down
2 changes: 1 addition & 1 deletion cuda-oxide/crates/cargo-oxide/src/commands/scaffold.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use super::*;
const GIT_REPO: &str = "https://github.com/NVIDIA/cuda-rust.git";

const RUST_TOOLCHAIN_TOML: &str = r#"[toolchain]
channel = "nightly-2026-10-11"
channel = "1.99.1"
components = ["rust-src", "rustc-dev", "rust-analyzer", "clippy", "rustfmt", "llvm-tools"]
"#;

Expand Down
2 changes: 1 addition & 1 deletion cuda-oxide/crates/cuda-device/src/atomic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -494,7 +494,7 @@ define_float_atomic! {
///
/// `swap` lowers to hardware `atom.exch.b32`; this API does not expose
/// `compare_exchange` for floats. `fetch_add` uses LLVM `atomicrmw fadd`.
/// With the pinned `nightly-2026-10-11` toolchain's LLVM 23 NVPTX defaults,
/// With the pinned `1.99.1` toolchain's LLVM 23 NVPTX defaults,
/// global and generic `f32` adds use a compare-and-swap loop; shared `f32`
/// and `f64` adds still use native instructions on supported targets.
///
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ error[E0080]: evaluation panicked: Swizzle<B, M, S> requires M + B <= S, otherwi
|
::: src/swizzle.rs
|
| impl<const B: usize, const M: usize, const S: usize> Swizzle<B, M, S> {
| /// Compile-time check that the swizzle is an involution.
| const INVOLUTION: () = assert!(
| ____________________________-
| | M + B <= S,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,3 @@ note: method defined here
|
| pub fn get_mut<'kernel>(&mut self, idx: ThreadIndex<'kernel, IndexSpace>) -> Option<&mut T> {
| ^^^^^^^
note: the `get_mut` call is resolved to the method in `cuda_device::DisjointSlice<'a, T, IndexSpace>`, shadowing the method of the same name on the inherent impl for `cuda_device::DisjointSlice<'a, T, cuda_device::Runtime2DIndex>`
--> tests/compile_fail/thread_index_runtime_mismatch.rs:18:17
|
18 | let _ = out.get_mut(idx);
| ^^^^^^^ refers to `cuda_device::DisjointSlice::<'a, T, IndexSpace>::get_mut`
= note: additionally, there is 1 other available method that isn't in scope
help: you might have meant to call one of the other methods; you can use the fully-qualified path to call one of them explicitly
|
18 - let _ = out.get_mut(idx);
18 + let _ = DisjointSlice::get_mut(&mut out, idx);
|
18 - let _ = out.get_mut(idx);
18 + let _ = <_ as std::slice::SliceIndex<_>>::get_mut(out, idx);
|
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,3 @@ note: method defined here
|
| pub fn get_mut<'kernel>(&mut self, idx: ThreadIndex<'kernel, IndexSpace>) -> Option<&mut T> {
| ^^^^^^^
note: the `get_mut` call is resolved to the method in `cuda_device::DisjointSlice<'a, T, IndexSpace>`, shadowing the method of the same name on the inherent impl for `cuda_device::DisjointSlice<'a, T, cuda_device::Runtime2DIndex>`
--> tests/compile_fail/thread_index_stride_mismatch.rs:11:17
|
11 | let _ = out.get_mut(idx);
| ^^^^^^^ refers to `cuda_device::DisjointSlice::<'a, T, IndexSpace>::get_mut`
= note: additionally, there is 1 other available method that isn't in scope
help: you might have meant to call one of the other methods; you can use the fully-qualified path to call one of them explicitly
|
11 - let _ = out.get_mut(idx);
11 + let _ = DisjointSlice::get_mut(&mut out, idx);
|
11 - let _ = out.get_mut(idx);
11 + let _ = <_ as std::slice::SliceIndex<_>>::get_mut(out, idx);
|
7 changes: 2 additions & 5 deletions cuda-oxide/crates/cuda-host/src/entry_registry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ fn type_id_divergence_message(
format!(
"generic kernel PTX entry `{requested}` was not found, but the loaded module DOES \
contain `{base}` under a different type-identity hash: {found}. The host \
(core::intrinsics::reflection::type_id) and the device backend (tcx.type_id_hash) disagreed on \
(core::intrinsics::type_id) and the device backend (tcx.type_id_hash) disagreed on \
the kernel's `_TID_` name, which means the TypeId-to-u128 extraction in \
cuda_host::type_id is no longer value-correct on this toolchain. Host and device \
code must be built by the same pinned nightly; re-verify the TypeId contract in \
Expand Down Expand Up @@ -329,10 +329,7 @@ mod tests {
"{message}"
);
// The message must identify the two hash producers and the remedy.
assert!(
message.contains("core::intrinsics::reflection::type_id"),
"{message}"
);
assert!(message.contains("core::intrinsics::type_id"), "{message}");
assert!(message.contains("tcx.type_id_hash"), "{message}");
assert!(message.contains("same pinned nightly"), "{message}");
assert!(message.contains("compute_kernel_export_name"), "{message}");
Expand Down
2 changes: 1 addition & 1 deletion cuda-oxide/crates/cuda-host/src/launch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ pub trait CudaKernel {
/// The bound on `ptx_name` is intentionally just whatever the kernel
/// itself declared — typically `Copy` on the value-passed generics. No
/// `'static` is added: the helper `cuda_host::type_id_u128` uses
/// `core::intrinsics::reflection::type_id`, which is bound `T: ?Sized` rather than
/// `core::intrinsics::type_id`, which is bound `T: ?Sized` rather than
/// `T: 'static`, so closures that borrow non-`'static` data still go
/// through the typed launch path (just like they did under the legacy
/// `type_name`-based scheme).
Expand Down
2 changes: 1 addition & 1 deletion cuda-oxide/crates/cuda-host/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* SPDX-License-Identifier: Apache-2.0
*/

// Required for `type_id_u128`'s use of `core::intrinsics::reflection::type_id`. The
// Required for `type_id_u128`'s use of `core::intrinsics::type_id`. The
// intrinsic is the only way to obtain the same 128-bit hash the backend
// uses while keeping the bound at `T: ?Sized` (stable `TypeId::of` would
// force `T: 'static` on every kernel marker — see `type_id.rs` for why
Expand Down
8 changes: 4 additions & 4 deletions cuda-oxide/crates/cuda-host/src/type_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
//! API would force a `T: 'static` bound on the kernel marker, which would in
//! turn reject perfectly valid non-`'static` borrowing closures (e.g. a kernel
//! launcher capturing `&[f32]` from a stack frame the caller keeps alive
//! across the launch). The `core::intrinsics::reflection::type_id` form has bound
//! across the launch). The `core::intrinsics::type_id` form has bound
//! `T: ?Sized` — i.e. no `'static` requirement — and produces the exact same
//! 128-bit value that `tcx.type_id_hash` does for that type, because both go
//! through the same `erase_and_anonymize_regions` + stable-hash pipeline.
Expand All @@ -20,10 +20,10 @@
//! every monomorphized type and const argument, so one hash covers the complete
//! specialization without inventing a parallel encoding for const values.
//!
//! Framing note for future contributors: `core::intrinsics::reflection::type_id` is an
//! Framing note for future contributors: `core::intrinsics::type_id` is an
//! internal API and requires `#![feature(core_intrinsics)]` on the owning
//! crate. cuda-oxide already ships against `rustc_private` and pins a
//! nightly toolchain, so this is inside our existing risk surface — but the
//! toolchain, so this is inside our existing risk surface, but the
//! helper cannot be lifted into a stable-feeling utility crate without
//! re-introducing the feature gate there.

Expand Down Expand Up @@ -54,7 +54,7 @@ static GENERIC_KERNEL_NAMES: OnceLock<Mutex<HashMap<KernelNameKey, &'static str>
/// caller (the borrow must outlive `stream.synchronize()`).
#[inline]
pub fn type_id_u128<T: ?Sized>() -> u128 {
let id = const { core::intrinsics::reflection::type_id::<T>() };
let id = const { core::intrinsics::type_id::<T>() };
unsafe { core::mem::transmute::<TypeId, u128>(id) }
}

Expand Down
22 changes: 21 additions & 1 deletion cuda-oxide/crates/cuda-intrinsics-gen/src/probe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1799,6 +1799,22 @@ fn parse_ptxas_version(stdout: &str, stderr: &str) -> Result<String> {
Ok(version.to_owned())
}

fn llvm_major_minor_series(version: &str) -> Option<&str> {
let rest = version.strip_prefix("LLVM version ")?;
let mut parts = rest.split(['.', '-']);
let major = parts.next()?;
let minor = parts.next()?;
if major.is_empty()
|| !major.bytes().all(|b| b.is_ascii_digit())
|| minor.is_empty()
|| !minor.bytes().all(|b| b.is_ascii_digit())
{
return None;
}
let prefix_len = "LLVM version ".len() + major.len() + 1 + minor.len();
Some(&version[..prefix_len])
}

fn validate_backend_identity(
expected_version: &str,
expected_commit: &RustcCommit,
Expand All @@ -1807,8 +1823,12 @@ fn validate_backend_identity(
let ProbeBackendIdentity::SelectedEvidence(actual) = actual else {
return Ok(());
};
let same_version_or_series = actual.tool.version == expected_version
|| (llvm_major_minor_series(&actual.tool.version).is_some()
&& llvm_major_minor_series(&actual.tool.version)
== llvm_major_minor_series(expected_version));
ensure!(
actual.tool.version == expected_version,
same_version_or_series,
"rust-toolchain llc version mismatch: selected evidence records {expected_version:?}, found {:?}; use an explicit `--llc` only for a comparison probe",
actual.tool.version
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ note: required by a bound in `LoadedModule::alias_fakes_row_width`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::alias_fakes_row_width`
...
22 | pub fn alias_fakes_row_width(mut out: DisjointSlice<f32, Runtime2DIndex>) {
| --------------------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ note: required by a bound in `LoadedModule::alias_hides_row_width`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::alias_hides_row_width`
...
22 | pub fn alias_hides_row_width(mut out: DisjointSlice<f32, Rt>) {
| --------------------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ note: required by a bound in `LoadedModule::prepare_lookalike`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::prepare_lookalike`
...
21 | pub fn lookalike(mut out: DisjointSlice<u32>) {
| --------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound `for<'__cuda_oxide_disjoint> DisjointSlice<'__cuda_oxide_disjoint, u32>: cuda_device::disjoint::__LaunchContractDisjointSliceAbi<u32, false>` is not satisfied
Expand Down Expand Up @@ -56,4 +57,5 @@ note: required by a bound in `LoadedModule::prepare_lookalike`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::prepare_lookalike`
...
21 | pub fn lookalike(mut out: DisjointSlice<u32>) {
| --------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,5 @@ note: required by a bound in `LoadedModule::prepare_misleading_name`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::prepare_misleading_name`
...
13 | pub fn misleading_name(mut out: DisjointSlice<u32, Index2D>) {
| --------------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ note: required by a bound in `LoadedModule::prepare_reordered`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::prepare_reordered`
...
17 | pub fn reordered(mut out: DisjointSlice<Index1D, u64>) {
| --------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound `for<'__cuda_oxide_disjoint> cuda_device::DisjointSlice<'__cuda_oxide_disjoint, u64>: cuda_device::disjoint::__LaunchContractDisjointSliceAbi<cuda_device::Index1D, false>` is not satisfied
Expand All @@ -48,4 +49,5 @@ note: required by a bound in `LoadedModule::prepare_reordered`
| ^^^^^^^^^^^^^^ required by this bound in `LoadedModule::prepare_reordered`
...
17 | pub fn reordered(mut out: DisjointSlice<Index1D, u64>) {
| --------- required by a bound in this associated function
= note: this error originates in the attribute macro `cuda_module` (in Nightly builds, run with -Z macro-backtrace for more info)
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
error[E0080]: evaluation panicked: partial unroll factor must be in 2..=1024, or 0 for full unrolling
--> $WORKSPACE/crates/cuda-device/src/thread.rs
|
| pub fn __unroll_config<const FACTOR: u32>() {
| const { validate_unroll_factor(FACTOR) }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `cuda_device::__unroll_config::<1>::{constant#0}` failed inside this call
|
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,3 @@
warning: `feature(generic_const_exprs)` is not supported with the next-generation trait solver
--> tests/compile_fail/policy_config_unresolved.rs:4:12
|
4 | #![feature(generic_const_exprs)]
| ^^^^^^^^^^^^^^^^^^^
|
= note: `-Znext-solver=globally` is currently enabled by default for testing
= note: reverted the setting to `-Znext-solver=coherence` for this crate
= note: the currently stable trait solver will be used for this crate
= note: see issues #160895 <https://github.com/rust-lang/rust/issues/160895> for more information

error[E0599]: no associated function or constant named `MAX_THREADS` found for type parameter `P` in the current scope
--> tests/compile_fail/policy_config_unresolved.rs:10:20
|
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
error[E0080]: evaluation panicked: launch_bounds maximum threads must be greater than zero
--> $WORKSPACE/crates/cuda-device/src/thread.rs
|
| pub fn __launch_bounds_config<const MAX_THREADS: u32, const MIN_BLOCKS: u32>() {
| const { validate_launch_bounds(MAX_THREADS) }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `cuda_device::__launch_bounds_config::<0, 0>::{constant#0}` failed inside this call
|
Expand Down
Loading
Loading