The oil exploration code is a perfect testbed for leveraging the possibilities of the OmpSs programming model.


The Full Waveform Inversion (FWI) code for enhancing oil exploration by BSC is built around OmpSs. This makes it a perfect use case for exploiting all the different options this task-based programming model offers: parallelisation, task management, resiliency and offloading of tasks to additional nodes.


OmpSs offload

First, with the instruction “#pragma omp task” code parts can be parallelised. Second, by adding the “onto” clause, OmpSs executes the offload and executes the respective tasks on the specified target, handling the data transfer and task orchestration transparently.

The application FWI uses two nested OmpSs offloads. After the pre-processing phase, the required Cluster Nodes are allocated and the computation of a shot is managed in a master-slave fashion on this level. The slaves are created in a second OmpSs offload to the Booster Nodes. Third, the different tasks within the workflow of the FWI code are implemented as OmpSs tasks to allow the OmpSs scheduler to manage their execution. The tasks will start as soon as they have their dependencies satisfied.


OmpSs for improved resiliency

Last but not least, FWI makes use of the OmpSs resiliency features in the most straightforward way: by adding the “recover” clause to the OmpSs tasks, all the required information is stored to be able to restart this task.