Research Article

Locality-Aware Task Scheduling and Data Distribution for OpenMP Programs on NUMA Systems and Manycore Processors

Listing 2

Program using the proposed interface for selecting data distribution policies.
int main() {
  
  /* Allocate data */
  size_t sz = 8 * UNIT_SIZE;
  /* NUMA system: UNIT_SIZE = PAGE_SIZE */
  /* TILEPro64: UNIT_SIZE = PAGE_SIZE/CACHE_LINE_SIZE */
  void* A = omp_malloc(sz);
  void* B = omp_malloc(sz);
  void* C = omp_malloc_specific(sz, OMP_MALLOC_COARSE);
  void* D = omp_malloc_specific(sz, OMP_MALLOC_COARSE);
  void* E = omp_malloc_specific(sz, OMP_MALLOC_FINE);
  /* Initialize data */
  init(A, B, C, D, E, sz, );
  /* Work in parallel */
  #pragma omp parallel
  {
  
  export OMP_DATA_DISTRIBUTION=<standardfinecoarse>
  <invoke program>