Even if the runtime of each task was known, optimal multi-core scheduling is NPC iirc../SNIP/...the best we can do is simple heuristic algorithms.
Maybe someone should try it without any sort of optimizing algorithm. If massive mult-core is in the future, then I'd be interested to see how even a dumb implementation works. How about a Lisp where every variable clause of a let (not let*, obviously) is evaluated on a different core if the assignment is a function call, and where the body of the let statement runs once they've all returned.
- Code: Select all
(let ((a (calc-something ...))
(b (calc-something-else ...))
(c (calc-another-thing ...)))
;; once each of the above calc- calls have returned, then continue
(+ a b c))