|
@@ -26,10 +26,11 @@
|
|
|
|
|
|
static void find_workers(hwloc_obj_t obj, int cpu_workers[STARPU_NMAXWORKERS], unsigned *n)
|
|
static void find_workers(hwloc_obj_t obj, int cpu_workers[STARPU_NMAXWORKERS], unsigned *n)
|
|
{
|
|
{
|
|
- if (!obj->userdata)
|
|
|
|
|
|
+ struct _starpu_hwloc_userdata *data = obj->userdata;
|
|
|
|
+ if (!data->worker_list)
|
|
/* Not something we run something on, don't care */
|
|
/* Not something we run something on, don't care */
|
|
return;
|
|
return;
|
|
- if (obj->userdata == (void*) -1)
|
|
|
|
|
|
+ if (data->worker_list == (void*) -1)
|
|
{
|
|
{
|
|
/* Intra node, recurse */
|
|
/* Intra node, recurse */
|
|
unsigned i;
|
|
unsigned i;
|
|
@@ -39,7 +40,7 @@ static void find_workers(hwloc_obj_t obj, int cpu_workers[STARPU_NMAXWORKERS], u
|
|
}
|
|
}
|
|
|
|
|
|
/* Got to a PU leaf */
|
|
/* Got to a PU leaf */
|
|
- struct _starpu_worker_list *workers = obj->userdata;
|
|
|
|
|
|
+ struct _starpu_worker_list *workers = data->worker_list;
|
|
struct _starpu_worker *worker;
|
|
struct _starpu_worker *worker;
|
|
for(worker = _starpu_worker_list_begin(workers); worker != _starpu_worker_list_end(workers); worker = _starpu_worker_list_next(worker))
|
|
for(worker = _starpu_worker_list_begin(workers); worker != _starpu_worker_list_end(workers); worker = _starpu_worker_list_next(worker))
|
|
{
|
|
{
|
|
@@ -73,7 +74,7 @@ static void synthesize_intermediate_workers(hwloc_obj_t *children, unsigned min,
|
|
chunk_start = 0;
|
|
chunk_start = 0;
|
|
for (i = 0 ; i < arity; i++)
|
|
for (i = 0 ; i < arity; i++)
|
|
{
|
|
{
|
|
- if (children[i]->userdata)
|
|
|
|
|
|
+ if (((struct _starpu_hwloc_userdata*)children[i]->userdata)->worker_list)
|
|
{
|
|
{
|
|
n++;
|
|
n++;
|
|
_STARPU_DEBUG("child %u\n", i);
|
|
_STARPU_DEBUG("child %u\n", i);
|
|
@@ -120,7 +121,7 @@ static void find_and_assign_combinations(hwloc_obj_t obj, unsigned min, unsigned
|
|
_STARPU_DEBUG("Looking at %s\n", name);
|
|
_STARPU_DEBUG("Looking at %s\n", name);
|
|
|
|
|
|
for (n = 0, i = 0; i < obj->arity; i++)
|
|
for (n = 0, i = 0; i < obj->arity; i++)
|
|
- if (obj->children[i]->userdata)
|
|
|
|
|
|
+ if (((struct _starpu_hwloc_userdata *)obj->children[i]->userdata)->worker_list)
|
|
/* it has a CPU worker */
|
|
/* it has a CPU worker */
|
|
n++;
|
|
n++;
|
|
|
|
|
|
@@ -154,7 +155,7 @@ static void find_and_assign_combinations(hwloc_obj_t obj, unsigned min, unsigned
|
|
|
|
|
|
/* And recurse */
|
|
/* And recurse */
|
|
for (i = 0; i < obj->arity; i++)
|
|
for (i = 0; i < obj->arity; i++)
|
|
- if (obj->children[i]->userdata == (void*) -1)
|
|
|
|
|
|
+ if (((struct _starpu_hwloc_userdata*) obj->children[i]->userdata)->worker_list == (void*) -1)
|
|
find_and_assign_combinations(obj->children[i], min, max, synthesize_arity);
|
|
find_and_assign_combinations(obj->children[i], min, max, synthesize_arity);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -187,7 +188,7 @@ static void find_and_assign_combinations_with_hwloc(int *workerids, int nworkers
|
|
obj = obj->parent;
|
|
obj = obj->parent;
|
|
while (obj)
|
|
while (obj)
|
|
{
|
|
{
|
|
- obj->userdata = (void*) -1;
|
|
|
|
|
|
+ ((struct _starpu_hwloc_userdata*) obj->userdata)->worker_list = (void*) -1;
|
|
obj = obj->parent;
|
|
obj = obj->parent;
|
|
}
|
|
}
|
|
}
|
|
}
|