[[builtin(global_invocation_id)]] var global_id: vec3; [[block]] struct PrimeIndices { data: [[stride(4)]] array; }; // this is used as both input and output for convenience [[group(0), binding(0)]] var v_indices: [[access(read_write)]] PrimeIndices; // The Collatz Conjecture states that for any integer n: // If n is even, n = n/2 // If n is odd, n = 3n+1 // And repeat this process for each new n, you will always eventually reach 1. // Though the conjecture has not been proven, no counterexample has ever been found. // This function returns how many times this recurrence needs to be applied to reach 1. fn collatz_iterations(n_base: u32) -> u32{ var n: u32 = n_base; var i: u32 = 0u; loop { if (n <= 1u) { break; } if (n % 2u == 0u) { n = n / 2u; } else { n = 3u * n + 1u; } i = i + 1u; } return i; } [[stage(compute), workgroup_size(1)]] fn main() { v_indices.data[global_id.x] = collatz_iterations(v_indices.data[global_id.x]); }