Dynamic Task Execution On Shared And Distributed Memory Architectures