소스 검색

openmp: fix a crash with _starpu_omp_get_task() for non-CPU workers

For the KStar heterogeneous study, we added a new 'where' clause on task
constructs. This clause can be used to tell the runtime where to execute
the tasks, the flag accepts the following values cpu, gpu and all.

To know if the current thread comes from a CPU or a GPU worker, we
hacked up omp_is_initial_device() which should return 0 for GPU workers,
and 1 for CPU workers.

That workaround is only for experimental uses and it's not going to be
part of the official specification.
Samuel Pitoiset 8 년 전
부모
커밋
ed203ce01a
1개의 변경된 파일4개의 추가작업 그리고 1개의 파일을 삭제
  1. 4 1
      src/util/openmp_runtime_support_omp_api.c

+ 4 - 1
src/util/openmp_runtime_support_omp_api.c

@@ -267,7 +267,10 @@ int starpu_omp_get_team_num(void)
 
 
 int starpu_omp_is_initial_device(void)
 int starpu_omp_is_initial_device(void)
 {
 {
-	const struct starpu_omp_device * const device = _starpu_omp_get_task()->owner_region->owner_device;
+	struct starpu_omp_task *task = _starpu_omp_get_task();
+	if (!task)
+		return 0;
+	const struct starpu_omp_device * const device = task->owner_region->owner_device;
 	return device == _starpu_omp_global_state->initial_device;
 	return device == _starpu_omp_global_state->initial_device;
 }
 }