| ... | ... | @@ -10,6 +10,7 @@ Dav1d can execute the following task types: |
|
|
|
Dav1d has some additional task types to administratively blend these tasks together across multiple frames at the same time, and can therefore effectively process multiple tiles, sbrows and frames at the same time.
|
|
|
|
|
|
|
|
**Dependency mechanism:**
|
|
|
|
|
|
|
|
Concurrency is primarily limited by each task's dependencies, and therefore it's critically important that these are minimal-but-complete and that the scheduler orders tasks to achieve maximal parallelism.
|
|
|
|
|
|
|
|
Dependencies are in most cases simple progress-integers ("reconstruction of previous reference frame should be below X") that are checked against their reference. There is no `pthread_cond_wait()` in the code - instead, tasks with unmet dependencies are simply kept in the task-queue.
|
| ... | ... | @@ -25,4 +26,5 @@ At the same time, tasks can schedule implicit-dependency follow-up tasks. For ex |
|
|
|
- a user does not have to be aware of technical stream characteristics ("does it have tiles?").
|
|
|
|
|
|
|
|
**Complications:**
|
|
|
|
|
|
|
|
- the complexity sits in the scheduler, and there's a fair number of heuristical choices that are important but not necessarily obvious. |
|
|
\ No newline at end of file |