Changeset View
Changeset View
Standalone View
Standalone View
libomptarget/deviceRTLs/nvptx/src/libcall.cu
Show All 31 Lines | |||||
EXTERN void omp_set_num_threads(int num) { | EXTERN void omp_set_num_threads(int num) { | ||||
// Ignore it for SPMD mode. | // Ignore it for SPMD mode. | ||||
if (isSPMDMode()) | if (isSPMDMode()) | ||||
return; | return; | ||||
ASSERT0(LT_FUSSY, isRuntimeInitialized(), "Expected initialized runtime."); | ASSERT0(LT_FUSSY, isRuntimeInitialized(), "Expected initialized runtime."); | ||||
PRINT(LD_IO, "call omp_set_num_threads(num %d)\n", num); | PRINT(LD_IO, "call omp_set_num_threads(num %d)\n", num); | ||||
if (num <= 0) { | if (num <= 0) { | ||||
WARNING0(LW_INPUT, "expected positive num; ignore\n"); | WARNING0(LW_INPUT, "expected positive num; ignore\n"); | ||||
} else if (parallelLevel[GetWarpId()] == 0) { | } else if (getParallelLevel(GetWarpId()) == 0) { | ||||
nThreads = num; | nThreads = num; | ||||
} | } | ||||
} | } | ||||
EXTERN int omp_get_num_threads(void) { | EXTERN int omp_get_num_threads(void) { | ||||
int rc = GetNumberOfOmpThreads(isSPMDMode()); | int rc = GetNumberOfOmpThreads(isSPMDMode()); | ||||
PRINT(LD_IO, "call omp_get_num_threads() return %d\n", rc); | PRINT(LD_IO, "call omp_get_num_threads() return %d\n", rc); | ||||
return rc; | return rc; | ||||
} | } | ||||
EXTERN int omp_get_max_threads(void) { | EXTERN int omp_get_max_threads(void) { | ||||
if (parallelLevel[GetWarpId()] > 0) | int parLevel = getParallelLevel(GetWarpId()); | ||||
if (parLevel > 0) | |||||
// We're already in parallel region. | // We're already in parallel region. | ||||
return 1; // default is 1 thread avail | return 1; // default is 1 thread avail | ||||
// Not currently in a parallel region, return what was set. | // Not currently in a parallel region, return what was set. | ||||
int rc = 1; | int rc = 1; | ||||
if (parallelLevel[GetWarpId()] == 0) | if (parLevel == 0) | ||||
rc = nThreads; | rc = nThreads; | ||||
ASSERT0(LT_FUSSY, rc >= 0, "bad number of threads"); | ASSERT0(LT_FUSSY, rc >= 0, "bad number of threads"); | ||||
PRINT(LD_IO, "call omp_get_max_threads() return %d\n", rc); | PRINT(LD_IO, "call omp_get_max_threads() return %d\n", rc); | ||||
return rc; | return rc; | ||||
} | } | ||||
EXTERN int omp_get_thread_limit(void) { | EXTERN int omp_get_thread_limit(void) { | ||||
if (isSPMDMode()) | if (isSPMDMode()) | ||||
Show All 13 Lines | |||||
EXTERN int omp_get_num_procs(void) { | EXTERN int omp_get_num_procs(void) { | ||||
int rc = GetNumberOfProcsInDevice(isSPMDMode()); | int rc = GetNumberOfProcsInDevice(isSPMDMode()); | ||||
PRINT(LD_IO, "call omp_get_num_procs() returns %d\n", rc); | PRINT(LD_IO, "call omp_get_num_procs() returns %d\n", rc); | ||||
return rc; | return rc; | ||||
} | } | ||||
EXTERN int omp_in_parallel(void) { | EXTERN int omp_in_parallel(void) { | ||||
int rc = parallelLevel[GetWarpId()] > OMP_ACTIVE_PARALLEL_LEVEL ? 1 : 0; | int rc = getParallelLevel(GetWarpId()) > OMP_ACTIVE_PARALLEL_LEVEL ? 1 : 0; | ||||
PRINT(LD_IO, "call omp_in_parallel() returns %d\n", rc); | PRINT(LD_IO, "call omp_in_parallel() returns %d\n", rc); | ||||
return rc; | return rc; | ||||
} | } | ||||
EXTERN int omp_in_final(void) { | EXTERN int omp_in_final(void) { | ||||
// treat all tasks as final... Specs may expect runtime to keep | // treat all tasks as final... Specs may expect runtime to keep | ||||
// track more precisely if a task was actively set by users... This | // track more precisely if a task was actively set by users... This | ||||
// is not explicitely specified; will treat as if runtime can | // is not explicitely specified; will treat as if runtime can | ||||
Show All 32 Lines | |||||
EXTERN int omp_get_max_active_levels(void) { | EXTERN int omp_get_max_active_levels(void) { | ||||
int rc = 1; | int rc = 1; | ||||
PRINT(LD_IO, "call omp_get_max_active_levels() returns %d\n", rc); | PRINT(LD_IO, "call omp_get_max_active_levels() returns %d\n", rc); | ||||
return rc; | return rc; | ||||
} | } | ||||
EXTERN int omp_get_level(void) { | EXTERN int omp_get_level(void) { | ||||
int level = parallelLevel[GetWarpId()] & (OMP_ACTIVE_PARALLEL_LEVEL - 1); | int level = getParallelLevel(GetWarpId()) & (OMP_ACTIVE_PARALLEL_LEVEL - 1); | ||||
PRINT(LD_IO, "call omp_get_level() returns %d\n", level); | PRINT(LD_IO, "call omp_get_level() returns %d\n", level); | ||||
return level; | return level; | ||||
} | } | ||||
EXTERN int omp_get_active_level(void) { | EXTERN int omp_get_active_level(void) { | ||||
int level = parallelLevel[GetWarpId()] > OMP_ACTIVE_PARALLEL_LEVEL ? 1 : 0; | int level = getParallelLevel(GetWarpId()) > OMP_ACTIVE_PARALLEL_LEVEL ? 1 : 0; | ||||
PRINT(LD_IO, "call omp_get_active_level() returns %d\n", level) | PRINT(LD_IO, "call omp_get_active_level() returns %d\n", level) | ||||
return level; | return level; | ||||
} | } | ||||
EXTERN int omp_get_ancestor_thread_num(int level) { | EXTERN int omp_get_ancestor_thread_num(int level) { | ||||
if (isSPMDMode()) | if (isSPMDMode()) | ||||
return level == 1 ? GetThreadIdInBlock() : 0; | return level == 1 ? GetThreadIdInBlock() : 0; | ||||
int rc = -1; | int rc = -1; | ||||
// If level is 0 or all parallel regions are not active - return 0. | // If level is 0 or all parallel regions are not active - return 0. | ||||
unsigned parLevel = parallelLevel[GetWarpId()]; | int parLevel = getParallelLevel(GetWarpId()); | ||||
if (level == 1 && parLevel > OMP_ACTIVE_PARALLEL_LEVEL) { | if (level == 1 && parLevel > OMP_ACTIVE_PARALLEL_LEVEL) { | ||||
int totLevel = omp_get_level(); | int totLevel = omp_get_level(); | ||||
if (level <= totLevel) { | if (level <= totLevel) { | ||||
omptarget_nvptx_TaskDescr *currTaskDescr = | omptarget_nvptx_TaskDescr *currTaskDescr = | ||||
getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false); | getMyTopTaskDescriptor(/*isSPMDExecutionMode=*/false); | ||||
int steps = totLevel - level; | int steps = totLevel - level; | ||||
PRINT(LD_IO, "backtrack %d steps\n", steps); | PRINT(LD_IO, "backtrack %d steps\n", steps); | ||||
ASSERT0(LT_FUSSY, currTaskDescr, | ASSERT0(LT_FUSSY, currTaskDescr, | ||||
Show All 36 Lines | PRINT(LD_IO, "call omp_get_ancestor_thread_num(level %d) returns %d\n", level, | ||||
rc) | rc) | ||||
return rc; | return rc; | ||||
} | } | ||||
EXTERN int omp_get_team_size(int level) { | EXTERN int omp_get_team_size(int level) { | ||||
if (isSPMDMode()) | if (isSPMDMode()) | ||||
return level == 1 ? GetNumberOfThreadsInBlock() : 1; | return level == 1 ? GetNumberOfThreadsInBlock() : 1; | ||||
int rc = -1; | int rc = -1; | ||||
unsigned parLevel = parallelLevel[GetWarpId()]; | int parLevel = getParallelLevel(GetWarpId()); | ||||
// If level is 0 or all parallel regions are not active - return 1. | // If level is 0 or all parallel regions are not active - return 1. | ||||
if (level == 1 && parLevel > OMP_ACTIVE_PARALLEL_LEVEL) { | if (level == 1 && parLevel > OMP_ACTIVE_PARALLEL_LEVEL) { | ||||
rc = threadsInTeam; | rc = threadsInTeam; | ||||
} else if (level == 0 || | } else if (level == 0 || | ||||
(level > 0 && parLevel < OMP_ACTIVE_PARALLEL_LEVEL && | (level > 0 && parLevel < OMP_ACTIVE_PARALLEL_LEVEL && | ||||
level <= parLevel) || | level <= parLevel) || | ||||
(level > 1 && parLevel > OMP_ACTIVE_PARALLEL_LEVEL && | (level > 1 && parLevel > OMP_ACTIVE_PARALLEL_LEVEL && | ||||
level <= (parLevel - OMP_ACTIVE_PARALLEL_LEVEL))) { | level <= (parLevel - OMP_ACTIVE_PARALLEL_LEVEL))) { | ||||
▲ Show 20 Lines • Show All 227 Lines • Show Last 20 Lines |