Quickstart

Contents

Quickstart#

The shortest path from install to a first answer: one kernel, built for the CPU, run, and read back. New words (plane, kernel kind, …) are in the glossary.

Install first (pip install raptor-hawk raptor-eagle matplotlib for the CPU route; see installation). Then write a kernel. It is a plain Python function decorated @hawk.kernel; each parameter’s type says what role it plays for every sample:

import hawk
from hawk import Mutable, Param, Scalar


@hawk.kernel
def scale(x: Scalar,              # a per-sample input
          a: Param, b: Param,     # a shared constant: one value for the run
          y: Mutable[Scalar]):    # an output plane the body assigns
    y = a * x + b

Build it for the host (the CPU alone, no GPU and no eagle involved), load it and run it:

import pathlib
import tempfile

import hawk
import numpy as np

work_dir = pathlib.Path(tempfile.mkdtemp())
hawk.build([scale], work_dir, targets=("host",))

host_kernel = hawk.load(work_dir, "scale")
x = np.linspace(0.0, 7.0, 8)
y = np.zeros(8)
hawk.run(host_kernel, x=x, a=2.0, b=1.0, y=y)
y

The printed answer, as recorded in the first tutorial’s executed run:

array([ 1.,  3.,  5.,  7.,  9., 11., 13., 15.])

That is 2x + 1 for every x. The same kernel runs on a GPU through eagle with no change to its source; the tutorial shows how.

Where next#

  • Tutorials: eight notebooks that build on each other, starting with this kernel in full.

  • Vocabulary: declare your own kernel family, derivative and tape.

  • How-to guides: one task per notebook.