  Task-based programming models are excellent tools to parallelize and
seamlessly load balance an application workload. However, the integration of
I/O intensive applications and task-based programming models is lacking.
Typically, I/O operations stall the requesting thread until the data is
serviced by the backing device. Because the core where the thread was running
becomes idle, it should be possible to overlap the data query operation with
either computation workloads or even more I/O operations. Nonetheless,
overlapping I/O tasks with other tasks entails an extra degree of complexity
currently not managed by programming models' runtimes. In this work, we focus
on integrating storage I/O into the tasking model by introducing the Task-Aware
Storage I/O (TASIO) library. We test TASIO extensively with a custom benchmark
for a number of configurations and conclude that it is able to achieve speedups
up to 2x depending on the workload, although it might lead to slowdowns if not
used with the right settings.
