SOMA: An OpenMP Toolchain For Multicore Partitioning