0. Getting Started¶
Prerequisites¶
First, make sure to download and install the following prerequisites:
While it’s not at all required, it may be easier to learn to use Spatial if you’ve had experience with Scala or a similar functional programming language in the past. Knowledge of Scala will allow you to use meta-programming to assist your Spatial designs.
If you’d like, check out this Scala tutorial .
Finally, please sign up for the Spatial users google group if you have any questions.
Installation via Quickstart (Recommended)¶
To get started with Spatial, you simply need to clone the spatial-quickstart repo and set your environment:
$ git clone git@github.com:stanford-ppl/spatial-quickstart
$ cd spatial-quickstart
$ export SPATIAL_HOME=`pwd`
You can start writing your apps directly in spatial-lang/src/<filename>.scala
. To run a quick test, you can
run the following:
$ bin/spatial Quicktest
$ cd gen/Quicktest && bash run.sh 7
The app called “Quicktest” is in spatial-quicktest/src/Applications.scala
. It has one input register, reads and
adds 4 to it in the Accel
, and then writes this to an output register.
Installation From Source¶
Run the following (bash) commands to clone and update the spatial-lang repository:
$ git clone https://github.com/stanford-ppl/spatial-lang.git
$ cd spatial-lang
$ git submodule update --init
This will pull Spatial’s submodules argon
, apps
, and scala-virtualized
.
You may need to export your JAVA_HOME environment variable to point to your Java installation (usually /usr/bin)
You are now ready to compile the language. Run the following:
$ cd spatial-lang # Navigate to root of spatial-lang repository
$ sbt compile
A good habit would be to pull from these repositories often and run sbt compile
in your spatial-lang directory.
To run a quick test, you can run the following:
$ bin/spatial InOutArg
$ cd gen/InOutArg && bash run.sh 7
The app called “InOutArg” is in spatial-lang/apps/src/UnitTests.scala
. It has one input register, reads and
adds 4 to it in the Accel
, and then writes this to an output register.
That’s it! Up next, you will learn how to use the language by working through a series of examples. The concepts you will learn in these tutorials are listed below. Feel free to skip around the apps as you find convenient:
- Application skeleton (import statements, application creation, accel scope, host scope)
- ArgIn
- ArgOut
- HostIO
- DRAM
- SRAM
- Reg
- Typing system
- Data transfer between host and accel (setArg, setMem, getArg, getMem, load, store, gather, scatter)
- Basic debugging hooks
- Compiling an app
- Tiling
- Reduce and Fold
- Sequential execution and Coarse-grain pipelining
- Parallelization
- Basic buffering and banking
- MemReduce and MemFold
- Debugging with instrumentation
- Advanced banking
- Advanced buffering
- LineBuffer
- ShiftRegister
- LUT
- Spatial Functions and Multifile Projects
- FSM
- Branching
- FIFO
- Systolic Arrays
- File IO and text management
- Asserts, Breakpoints, and Sleep