Previous | Next --- Slide 29 of 55
Back to Lecture Thumbnails
viklassic

To summarize these 4 schedules - sequential means you process every inner controller sequentially in order, and it's very slow in comparison to the others. Pipelined means you can overlap inner controllers of different outer controllers but can't run the same inner controller of different outer controllers at the same time. Fork-join means you can execute the same inner controller of all outer controllers at the same time, but before any one inner controller moves on to the next iteration, they must wait for all inner controllers to finish the current iteration. Finally, stream means each outer controller operates independently as if they were each sequentially being processed on its own, and this is implemented using a FIFO queue.

I was wondering in what situations would fork-join be preferred over stream. It seems like fork-join always waits for the longest inner control before moving on to the next and finish executing all outer controllers at the same time whereas stream just exits each outer controller as it finishes executing. Might be completely off here but one case I can think of is if each outer controller's inner controllers are data load operations where the first data load of every outer controller is loading from contiguous memory, and so on so forth. Then, when using fork-join, perhaps every inner controller can grab memory from the same DRAM row whereas using stream, the controllers might be swapping rows more often.

Please log in to leave a comment.