An OpenMP Runtime for Transparent Work Sharing Across Cache-Incoherent Heterogeneous Nodes