API Reference › Job › Job.parallel_for
method

Job.parallel_for

Job.parallel_for(count, work, ctx) -> void

Run work(i, ctx) for every i in [0, count) on real OS threads, and return when every call has finished. The indices are split into chunks shared by a worker pool (one thread per core but one, started on first use) and the calling thread, so each index runs exactly once, in no particular order.

work is a top-level function taking (i: int, ctx), named with fn; ctx is whatever it computes on (words, bytes or a pointer). A worker computes on what it was handed and writes only its own index's results: it must not spawn, despawn, push onto a list another thread can see, or use Http or Audio. spawn and despawn on a worker stop the program with a located message. Shared counters go through Sync.add, shared totals behind a Sync.mutex.

Example

program Squares {
  function square(i: int, out: words) -> void { out[i] = i * i }

  entry {
    let sq = words(20000)
    Job.parallel_for(20000, fn square, sq)
    print(sq[141])
  }
}
← All symbols