|
@@ -603,8 +603,19 @@ void starpurm_initialize(void)
|
|
|
hwloc_topology_load(rm->topology);
|
|
|
rm->global_cpuset = hwloc_bitmap_alloc();
|
|
|
hwloc_bitmap_zero(rm->global_cpuset);
|
|
|
+
|
|
|
rm->all_cpu_workers_cpuset = hwloc_bitmap_alloc();
|
|
|
hwloc_bitmap_zero(rm->all_cpu_workers_cpuset);
|
|
|
+
|
|
|
+ rm->all_opencl_device_workers_cpuset = hwloc_bitmap_alloc();
|
|
|
+ hwloc_bitmap_zero(rm->all_opencl_device_workers_cpuset);
|
|
|
+
|
|
|
+ rm->all_cuda_device_workers_cpuset = hwloc_bitmap_alloc();
|
|
|
+ hwloc_bitmap_zero(rm->all_cuda_device_workers_cpuset);
|
|
|
+
|
|
|
+ rm->all_mic_device_workers_cpuset = hwloc_bitmap_alloc();
|
|
|
+ hwloc_bitmap_zero(rm->all_mic_device_workers_cpuset);
|
|
|
+
|
|
|
rm->all_device_workers_cpuset = hwloc_bitmap_alloc();
|
|
|
hwloc_bitmap_zero(rm->all_device_workers_cpuset);
|
|
|
|
|
@@ -705,6 +716,7 @@ void starpurm_initialize(void)
|
|
|
rm->units[unitid].worker_cpuset = starpu_worker_get_hwloc_cpuset(rm->units[unitid].workerid);
|
|
|
pthread_cond_init(&rm->units[unitid].unit_available_cond, NULL);
|
|
|
hwloc_bitmap_or(rm->global_cpuset, rm->global_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
+ hwloc_bitmap_or(rm->all_opencl_device_workers_cpuset, rm->all_opencl_device_workers_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
hwloc_bitmap_or(rm->all_device_workers_cpuset, rm->all_device_workers_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
unitid++;
|
|
|
}
|
|
@@ -725,6 +737,7 @@ void starpurm_initialize(void)
|
|
|
rm->units[unitid].worker_cpuset = starpu_worker_get_hwloc_cpuset(rm->units[unitid].workerid);
|
|
|
pthread_cond_init(&rm->units[unitid].unit_available_cond, NULL);
|
|
|
hwloc_bitmap_or(rm->global_cpuset, rm->global_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
+ hwloc_bitmap_or(rm->all_cuda_device_workers_cpuset, rm->all_cuda_device_workers_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
hwloc_bitmap_or(rm->all_device_workers_cpuset, rm->all_device_workers_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
unitid++;
|
|
|
}
|
|
@@ -745,6 +758,7 @@ void starpurm_initialize(void)
|
|
|
rm->units[unitid].worker_cpuset = starpu_worker_get_hwloc_cpuset(rm->units[unitid].workerid);
|
|
|
pthread_cond_init(&rm->units[unitid].unit_available_cond, NULL);
|
|
|
hwloc_bitmap_or(rm->global_cpuset, rm->global_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
+ hwloc_bitmap_or(rm->all_mic_device_workers_cpuset, rm->all_mic_device_workers_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
hwloc_bitmap_or(rm->all_device_workers_cpuset, rm->all_device_workers_cpuset, rm->units[unitid].worker_cpuset);
|
|
|
unitid++;
|
|
|
}
|
|
@@ -851,6 +865,9 @@ void starpurm_shutdown(void)
|
|
|
|
|
|
hwloc_bitmap_free(rm->global_cpuset);
|
|
|
hwloc_bitmap_free(rm->all_cpu_workers_cpuset);
|
|
|
+ hwloc_bitmap_free(rm->all_opencl_device_workers_cpuset);
|
|
|
+ hwloc_bitmap_free(rm->all_cuda_device_workers_cpuset);
|
|
|
+ hwloc_bitmap_free(rm->all_mic_device_workers_cpuset);
|
|
|
hwloc_bitmap_free(rm->all_device_workers_cpuset);
|
|
|
hwloc_bitmap_free(rm->selected_cpuset);
|
|
|
|
|
@@ -1576,6 +1593,33 @@ hwloc_cpuset_t starpurm_get_all_cpu_workers_cpuset(void)
|
|
|
return hwloc_bitmap_dup(rm->all_cpu_workers_cpuset);
|
|
|
}
|
|
|
|
|
|
+static hwloc_cpuset_t starpurm_get_all_opencl_device_workers_cpuset(void)
|
|
|
+{
|
|
|
+ assert(_starpurm != NULL);
|
|
|
+ assert(_starpurm->state != state_uninitialized);
|
|
|
+ struct s_starpurm *rm = _starpurm;
|
|
|
+
|
|
|
+ return hwloc_bitmap_dup(rm->all_opencl_device_workers_cpuset);
|
|
|
+}
|
|
|
+
|
|
|
+static hwloc_cpuset_t starpurm_get_all_cuda_device_workers_cpuset(void)
|
|
|
+{
|
|
|
+ assert(_starpurm != NULL);
|
|
|
+ assert(_starpurm->state != state_uninitialized);
|
|
|
+ struct s_starpurm *rm = _starpurm;
|
|
|
+
|
|
|
+ return hwloc_bitmap_dup(rm->all_cuda_device_workers_cpuset);
|
|
|
+}
|
|
|
+
|
|
|
+static hwloc_cpuset_t starpurm_get_all_mic_device_workers_cpuset(void)
|
|
|
+{
|
|
|
+ assert(_starpurm != NULL);
|
|
|
+ assert(_starpurm->state != state_uninitialized);
|
|
|
+ struct s_starpurm *rm = _starpurm;
|
|
|
+
|
|
|
+ return hwloc_bitmap_dup(rm->all_mic_device_workers_cpuset);
|
|
|
+}
|
|
|
+
|
|
|
hwloc_cpuset_t starpurm_get_all_device_workers_cpuset(void)
|
|
|
{
|
|
|
assert(_starpurm != NULL);
|
|
@@ -1585,3 +1629,18 @@ hwloc_cpuset_t starpurm_get_all_device_workers_cpuset(void)
|
|
|
return hwloc_bitmap_dup(rm->all_device_workers_cpuset);
|
|
|
}
|
|
|
|
|
|
+hwloc_cpuset_t starpurm_get_all_device_workers_cpuset_by_type(int typeid)
|
|
|
+{
|
|
|
+ assert(_starpurm != NULL);
|
|
|
+ assert(_starpurm->state != state_uninitialized);
|
|
|
+ assert(typeid != starpurm_unit_cpu);
|
|
|
+ if (typeid == starpurm_unit_opencl)
|
|
|
+ return starpurm_get_all_opencl_device_workers_cpuset();
|
|
|
+ if (typeid == starpurm_unit_cuda)
|
|
|
+ return starpurm_get_all_cuda_device_workers_cpuset();
|
|
|
+ if (typeid == starpurm_unit_mic)
|
|
|
+ return starpurm_get_all_mic_device_workers_cpuset();
|
|
|
+ hwloc_cpuset_t empty_bitmap = hwloc_bitmap_alloc();
|
|
|
+ hwloc_bitmap_zero(empty_bitmap);
|
|
|
+ return empty_bitmap;
|
|
|
+}
|