// Split the first four memebers into a separate thread group if wavefront›take(4) { log.debug("In first chunk") arr: [4096]uint if wavefront›is_leader() { // Make the leader generate some ints _ = rand.read(mem.ptr_to_bytes(&arr)) } // Sync the pointer to the int array slice := wavefront›sync_def(arr[:]) // Make everyone sum the array by themselves sum: uint = 0 for i in slice do sum += i log.debug(sum) wavefront›wait() // Cooperative sum par_sum: uint = 0 // Splits the overarching range, giving each thread equal subranges iter := wavefront›range(len(slice)) for i in wavefront›next(&iter) do par_sum += slice[i] co_sum: uint = 0 co_sum_ptr := wavefront›sync_def(&co_sum) sync.atomic_add(co_sum_ptr, par_sum) wavefront›wait() log.debug("Total sum: ", co_sum_ptr^) } else { log.debug("In second chunk, doing nothing :d") }