DAL: Programming Efficient and Fault-Tolerant Applications for Many-Core Systems