Dynamic DAG scheduling under memory constraints for shared-memory platforms