A hybrid approach to automatic program parallelization via efficient tasking with composable data partitioning