Back to Lecture Thumbnails
fizzbuzz
nickbowman
Here's a summary of what was discussed in our breakout room and what Kunle touched on when we all came back together:
Spatial Programmer's Responsibility
- Describing the algorithm as a hierarchy of different controllers (outer/inner)
- Describing the memory hierarchy of the algorithm and data flow (what information should go in DRAM vs SRAM) as well as explicit data movement between DRAM/SRAM
- Picking tiling factors for iteration, parallelism for inner controllers and scheduling for outer controllers
Spatial System's Responsibility
- Does necessary banking and buffering of memory on the programmer's behalf in order to maximize performance and minimize resources (for things like pipelining)
- Handles hardware generation for the desired target platform (FPGA and/or ASIC)
- Gives performance debugging feedback (discussed extensively later on in the lecture)
(apologies if the above Markdown formatting doesn't come out right)
Please log in to leave a comment.
Copyright 2020 Stanford University
In most circumstances, a language that specified things as low-level as what data should go in dram would be considered imperative, but spatial comes off as rather declarative. I guess that the terms imperative and declarative really should be used in reference to some task rather than just as static properties of a language or programming system.