OmpSs extends OpenMP with a data-flow execution model to exploit unstructured parallelism. It uses in/out pragmas to enable dependence analysis and locality optimizations. This allows tasks to execute asynchronously with dependencies satisfied at runtime. OmpSs has been used to improve scalability in large applications by overlapping communication and computation. It also facilitates programming across heterogeneous systems like CPUs and GPUs. The asynchronous data-flow approach of OmpSs is well-suited to enable exascale computing through features like lookahead, locality optimizations, and hybridization of MPI and OpenMP.