Rust-GPU / Rust-GPU/rust-gpu

64 bit and 128 bit integers are not supported at all

Aperta
#359 9 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug
Lingua principale
Rust
Stelle
3.4k
Fork
125
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Expected Behaviour

I want to port some code using fixed::FixedI128 to the gpu, so I tried using rust-gpu to avoid needing to re-implement the wheel.

Well, this failed epically.

Figuring out how to use rust-gpu from the docs and examples is impossible, so I looked at rust-gpu-chimera, and I was able to figure out how to use it.

Of course, even though fixed is no-std and does not allocate, it does not compile, so I started to try to clone it locally and monkeypatch any issues until it would build.

But after the errors just never ended, I thought it more prudent to LITERALLY manually dig through the thousands of lines of macro-generated code for fixed and inline all the code I was using.

Of course, this failed because rust-gpu does not ACTUALLY support 128 bit integers.

Of course, the errors don't explicitly say this, instead they say "unsupported type for constant i128" or something else, and never explicitly admit to not supporting 128 bit integers.

Ok, that's really disappointing, but sure I'll rewrite all these functions to work on 64 bit limbs explicitly instead.

Well, actually, rust-gpu does not support 64 bit integers either, so that was a waste of time.

Now the error does sort of explicitly say this: "error: u64 type used without OpCapability Int64".

This is pretty surprising because on 32 bit CPU targets we can use 128 bit ints with reckless abandon and the compiler will just figure it out, but some part of this when translating from rust to llvm ir to spriv is not putting the square peg into the square hole.

Example & Steps To Reproduce

This kernel stub should have the same error, even with none of the implementation actually present:

#[cfg(target_arch = "spirv")]
#[spirv(compute(threads(1024)))]
pub fn bqa_kernel(
    #[spirv(global_invocation_id)] gid: UVec3,
    #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] data: &mut [((u64, i64), i64, i64)],
    #[spirv(push_constant)] param: &BqaParams,
) {
    let thread_id = ThreadId::new(gid.x);
    bqa_helper(thread_id, data, (param.r0, param.r1), param.b_min, param.b_max);
}

we don't even need to look into bqa_helper or any other implementation details, the error will be something like

     Compiling kernel v0.1.0 (/home/hac/projects/rust-gpu-chimera/kernel)
  error: `u64` type used without `OpCapability Int64`
      |
      = note: used by `core::option::Option<i64>`
      = note: used by `((u64, i64), i64, i64)`
      = note: used by unnamed type
      = note: used by unnamed type
  note: used from within GLCompute entry-point `bqa_kernel`
     --> kernel/src/lib.rs:171:5
      |
  171 |     #[spirv(storage_buffer, descriptor_set = 0, binding = 0)] data: &mut [((u64, i64), i64, i64)],
      |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  error: `i64` type used without `OpCapability Int64`

System Info

Rustc version is pinned to nightly-2025-06-23 by rust-gpu-chimera
SPIRV-Tools v2025.3 v2025.3.rc1-0-g33e025681
OS: linux 6.15.8-zen (arch linux)
GPU: Intel Arc B580
I'm using the webgpu backend following rust-gpu-chimera

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dal punto di ingresso kernel/src/lib.rs e riproduci le diagnosi segnalate per i tipi di buffer di archiviazione u64 e i64. Traccia il modo in cui i tipi interi vengono tradotti in capacità SPIR-V e considera il problema risolto quando le larghezze intere supportate vengono compilate correttamente oppure le loro limitazioni vengono segnalate esplicitamente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
rust
Ambito
compilers, computer-graphics
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.