Concepts

On this page, we introduce the key PyKokkos concepts. We will use the following example to illustrate the key concepts.

import pykokkos as pk

@pk.workunit
def hello(i: int):
    pk.printf("Hello, World! from i = %d\n", i)

def main():
    pk.parallel_for(10, hello)

main()
  • Pattern specifies the structure of computation (e.g., parallel_for)

  • Policy specifies the way computations are executed (e.g., 10 parallel units of work)

  • Work Unit is a function that performs each unit of work (e.g., hello)

Execution of a Pattern creates work. In the example above, there will be 10 units of work, such that each unit executes the hello function. Index, which is the first argument of the Work Unit, identifies a unique unit of work. PyKokkos maps work to execution resources.

Note

Ordering of execution of units of work is not guaranteed by the runtime.

The three key concepts are closely intertwined.

Kokkos

Note

This section might be of interest only to those familiar with Kokkos.

Unlike in Kokkos, we do not use the term “Computational Body” (but rather “Work Unit”), because code for any work is always in a separate function. Due to the limitation of Python lambdas, there are no multiple ways like in Kokkos to write computational bodies.