void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) { if (length < MIN_MERGE_SIZE*2L) { // Una tasca de tareador por cada llamada // Base case #if _EXTRAE_ Extrae_event(PROGRAM, MERGE); #endif #if _TAREADOR_ tareador_start_task("basemerge"); #endif basicmerge(n, left, right, result, start, length); #if _TAREADOR_ tareador_end_task(); #endif #if _EXTRAE_ Extrae_event(PROGRAM, END); #endif } else { // Recursive decomposition #if _TAREADOR_ tareador_start_task("mergeinside1"); #endif merge(n, left, right, result, start, length/2); #if _TAREADOR_ tareador_end_task(); tareador_start_task("mergeinside2"); #endif merge(n, left, right, result, start + length/2, length/2); #if _TAREADOR_ tareador_end_task(); #endif } }
void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) { if (length < MIN_MERGE_SIZE*2L) { // Base case basicmerge(n, left, right, result, start, length); } else { // Recursive decomposition #pragma omp task merge(n, left, right, result, start, length/2); #pragma omp task merge(n, left, right, result, start + length/2, length/2); } }
void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) { if (length < MIN_MERGE_SIZE*2L) { // Base case tareador_start_task("BaseCaseMerge"); basicmerge(n, left, right, result, start, length); tareador_end_task("BaseCaseMerge"); } else { // Recursive decomposition tareador_start_task("RecursiveMerge"); merge(n, left, right, result, start, length/2); merge(n, left, right, result, start + length/2, length/2); tareador_end_task("RecursiveMerge"); } }
void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) { if (length < MIN_MERGE_SIZE*2L) { // Base case #if _EXTRAE_ Extrae_event(PROGRAM, MERGE); #endif basicmerge(n, left, right, result, start, length); #if _EXTRAE_ Extrae_event(PROGRAM, END); #endif } else { // Recursive decomposition #pragma omp task merge(n, left, right, result, start, length/2); #pragma omp task merge(n, left, right, result, start + length/2, length/2); #pragma omp taskwait } }
void merge(long n, T left[n], T right[n], T result[n*2], long start, long length) { basicmerge(n, left, right, result, start, length); }