Browse Source

Merge branch 'master' of git+ssh://scm.gforge.inria.fr/gitroot/starpu/starpu

Samuel Thibault 5 years ago
parent
commit
de4bd22fd6

+ 0 - 1
Makefile.am

@@ -68,7 +68,6 @@ versincludedir = $(includedir)/starpu/$(STARPU_EFFECTIVE_VERSION)
 versinclude_HEADERS = 				\
 	include/starpu.h			\
 	include/starpu_helper.h			\
-	include/starpu_bitmap.h			\
 	include/starpu_data_filters.h		\
 	include/starpu_data_interfaces.h	\
 	include/starpu_worker.h			\

+ 0 - 1
include/starpu.h

@@ -79,7 +79,6 @@ typedef INT_PTR intptr_t;
 #include <starpu_tree.h>
 #include <starpu_openmp.h>
 #include <starpu_simgrid_wrap.h>
-#include <starpu_bitmap.h>
 #include <starpu_clusters.h>
 #include <starpu_perf_monitoring.h>
 #include <starpu_perf_steering.h>

+ 0 - 70
include/starpu_bitmap.h

@@ -1,70 +0,0 @@
-/* StarPU --- Runtime system for heterogeneous multicore architectures.
- *
- * Copyright (C) 2013-2020  Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
- * Copyright (C) 2013       Simon Archipoff
- *
- * StarPU is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or (at
- * your option) any later version.
- *
- * StarPU is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * See the GNU Lesser General Public License in COPYING.LGPL for more details.
- */
-
-#ifndef __STARPU_BITMAP_H__
-#define __STARPU_BITMAP_H__
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/**
-   @defgroup API_Bitmap Bitmap
-   @brief This is the interface for the bitmap utilities provided by StarPU.
-   @{
- */
-
-/** create a empty starpu_bitmap */
-struct starpu_bitmap *starpu_bitmap_create(void) STARPU_ATTRIBUTE_MALLOC;
-/** free \p b */
-void starpu_bitmap_destroy(struct starpu_bitmap *b);
-
-/** set bit \p e in \p b */
-void starpu_bitmap_set(struct starpu_bitmap *b, int e);
-/** unset bit \p e in \p b */
-void starpu_bitmap_unset(struct starpu_bitmap *b, int e);
-/** unset all bits in \p b */
-void starpu_bitmap_unset_all(struct starpu_bitmap *b);
-
-/** return true iff bit \p e is set in \p b */
-int starpu_bitmap_get(struct starpu_bitmap *b, int e);
-/** Basically compute \c starpu_bitmap_unset_all(\p a) ; \p a = \p b & \p c; */
-void starpu_bitmap_unset_and(struct starpu_bitmap *a, struct starpu_bitmap *b, struct starpu_bitmap *c);
-/** Basically compute \p a |= \p b */
-void starpu_bitmap_or(struct starpu_bitmap *a, struct starpu_bitmap *b);
-/** return 1 iff \p e is set in \p b1 AND \p e is set in \p b2 */
-int starpu_bitmap_and_get(struct starpu_bitmap *b1, struct starpu_bitmap *b2, int e);
-/** return the number of set bits in \p b */
-int starpu_bitmap_cardinal(struct starpu_bitmap *b);
-
-/** return the index of the first set bit of \p b, -1 if none */
-int starpu_bitmap_first(struct starpu_bitmap *b);
-/** return the position of the last set bit of \p b, -1 if none */
-int starpu_bitmap_last(struct starpu_bitmap *b);
-/** return the position of set bit right after \p e in \p b, -1 if none */
-int starpu_bitmap_next(struct starpu_bitmap *b, int e);
-/** todo */
-int starpu_bitmap_has_next(struct starpu_bitmap *b, int e);
-
-/** @} */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif

+ 1 - 0
include/starpu_sched_component.h

@@ -20,6 +20,7 @@
 #define __STARPU_SCHED_COMPONENT_H__
 
 #include <starpu.h>
+#include <common/starpu_bitmap.h>
 
 #ifdef STARPU_HAVE_HWLOC
 #include <hwloc.h>

+ 1 - 1
src/Makefile.am

@@ -130,6 +130,7 @@ noinst_HEADERS = 						\
 	common/prio_list.h					\
 	common/graph.h						\
 	common/knobs.h						\
+	common/starpu_bitmap.h					\
 	drivers/driver_common/driver_common.h			\
 	drivers/mp_common/mp_common.h				\
 	drivers/mp_common/source_common.h			\
@@ -160,7 +161,6 @@ noinst_HEADERS = 						\
 libstarpu_@STARPU_EFFECTIVE_VERSION@_la_SOURCES = 		\
 	common/barrier.c					\
 	common/barrier_counter.c				\
-	common/bitmap.c						\
 	common/hash.c 						\
 	common/rwlock.c						\
 	common/starpu_spinlock.c				\

+ 0 - 265
src/common/bitmap.c

@@ -1,265 +0,0 @@
-/* StarPU --- Runtime system for heterogeneous multicore architectures.
- *
- * Copyright (C) 2013-2020  Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
- * Copyright (C) 2013       Simon Archipoff
- *
- * StarPU is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation; either version 2.1 of the License, or (at
- * your option) any later version.
- *
- * StarPU is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- * See the GNU Lesser General Public License in COPYING.LGPL for more details.
- */
-
-#include <starpu.h>
-#include <starpu_bitmap.h>
-
-#include <limits.h>
-#include <string.h>
-#include <stdlib.h>
-
-#ifndef LONG_BIT
-#define LONG_BIT (sizeof(unsigned long) * 8)
-#endif
-
-struct starpu_bitmap
-{
-	unsigned long * bits;
-	int size; /* the size of bits array in number of unsigned long */
-	int cardinal;
-};
-
-//#define DEBUG_BITMAP
-
-#ifdef DEBUG_BITMAP
-static int check_bitmap(struct starpu_bitmap *b)
-{
-	int card = b->cardinal;
-	int i = starpu_bitmap_first(b);
-	int j;
-	for(j = 0; j < card; j++)
-	{
-		if(i == -1)
-			return 0;
-		int tmp = starpu_bitmap_next(b,i);
-		if(tmp == i)
-			return 0;
-		i = tmp;
-	}
-	if(i != -1)
-		return 0;
-	return 1;
-}
-#else
-#define check_bitmap(b) 1
-#endif
-
-static int _count_bit(unsigned long e)
-{
-#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__) >= 4)
-	return __builtin_popcountl(e);
-#else
-	int c = 0;
-	while(e)
-	{
-		c += e&1;
-		e >>= 1;
-	}
-	return c;
-#endif
-}
-
-struct starpu_bitmap * starpu_bitmap_create(void)
-{
-	struct starpu_bitmap *b;
-	_STARPU_CALLOC(b, 1, sizeof(*b));
-	return b;
-}
-void starpu_bitmap_destroy(struct starpu_bitmap * b)
-{
-	if(b)
-	{
-		free(b->bits);
-		free(b);
-	}
-}
-
-void starpu_bitmap_set(struct starpu_bitmap * b, int e)
-{
-
-	if(!starpu_bitmap_get(b, e))
-		b->cardinal++;
-	else
-		return;
-	if((e/LONG_BIT) + 1 > b->size)
-	{
-		_STARPU_REALLOC(b->bits, sizeof(unsigned long) * ((e/LONG_BIT) + 1));
-		memset(b->bits + b->size, 0, sizeof(unsigned long) * ((e/LONG_BIT + 1) - b->size));
-		b->size = (e/LONG_BIT) + 1;
-	}
-	b->bits[e/LONG_BIT] |= (1ul << (e%LONG_BIT));
-	STARPU_ASSERT(check_bitmap(b));
-}
-void starpu_bitmap_unset(struct starpu_bitmap *b, int e)
-{
-	if(starpu_bitmap_get(b, e))
-		b->cardinal--;
-	else
-		return;
-	if(e / LONG_BIT > b->size)
-		return;
-	b->bits[e/LONG_BIT] &= ~(1ul << (e%LONG_BIT));
-	STARPU_ASSERT(check_bitmap(b));
-}
-
-void starpu_bitmap_unset_all(struct starpu_bitmap * b)
-{
-	free(b->bits);
-	b->bits = NULL;
-	b->size = 0;
-}
-
-void starpu_bitmap_unset_and(struct starpu_bitmap * a, struct starpu_bitmap * b, struct starpu_bitmap * c)
-{
-	int n = STARPU_MIN(b->size, c->size);
-	_STARPU_REALLOC(a->bits, sizeof(unsigned long) * n);
-	a->size = n;
-	a->cardinal = 0;
-	int i;
-	for(i = 0; i < n; i++)
-	{
-		a->bits[i] = b->bits[i] & c->bits[i];
-		a->cardinal += _count_bit(a->bits[i]);
-	}
-}
-
-int starpu_bitmap_get(struct starpu_bitmap * b, int e)
-{
-	if(e / LONG_BIT >= b->size)
-		return 0;
-	return (b->bits[e/LONG_BIT] & (1ul << (e%LONG_BIT))) ?
-		1:
-		0;
-}
-
-void starpu_bitmap_or(struct starpu_bitmap * a, struct starpu_bitmap * b)
-{
-	if(a->size < b->size)
-	{
-		_STARPU_REALLOC(a->bits, b->size * sizeof(unsigned long));
-		memset(a->bits + a->size, 0, (b->size - a->size) * sizeof(unsigned long));
-		a->size = b->size;
-
-	}
-	int i;
-	for(i = 0; i < b->size; i++)
-	{
-		a->bits[i] |= b->bits[i];
-	}
-	a->cardinal = 0;
-	for(i = 0; i < a->size; i++)
-		a->cardinal += _count_bit(a->bits[i]);
-}
-
-
-int starpu_bitmap_and_get(struct starpu_bitmap * b1, struct starpu_bitmap * b2, int e)
-{
-	return starpu_bitmap_get(b1,e) && starpu_bitmap_get(b2,e);
-}
-
-int starpu_bitmap_cardinal(struct starpu_bitmap * b)
-{
-	return b->cardinal;
-}
-
-
-static inline int get_first_bit_rank(unsigned long ms)
-{
-	STARPU_ASSERT(ms != 0);
-#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
-	return __builtin_ffsl(ms) - 1;
-#else
-	unsigned long m = 1ul;
-	int i = 0;
-	while(!(m&ms))
-		i++,m<<=1;
-	return i;
-#endif
-}
-
-static inline int get_last_bit_rank(unsigned long l)
-{
-	STARPU_ASSERT(l != 0);
-#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
-	return 8*sizeof(l) - __builtin_clzl(l);
-#else
-	int ibit = LONG_BIT - 1;
-	while((!(1ul << ibit)) & l)
-		ibit--;
-	STARPU_ASSERT(ibit >= 0);
-	return ibit;
-#endif
-}
-
-int starpu_bitmap_first(struct starpu_bitmap * b)
-{
-	int i = 0;
-	while(i < b->size && !b->bits[i])
-		i++;
-	if( i == b->size)
-		return -1;
-	int nb_long = i;
-	unsigned long ms = b->bits[i];
-
-	return (nb_long * LONG_BIT) + get_first_bit_rank(ms);
-}
-
-int starpu_bitmap_has_next(struct starpu_bitmap * b, int e)
-{
-	int nb_long = (e+1) / LONG_BIT;
-	int nb_bit = (e+1) % LONG_BIT;
-	unsigned long mask = (~0ul) << nb_bit;
-	if(b->bits[nb_long] & mask)
-		return 1;
-	for(nb_long++; nb_long < b->size; nb_long++)
-		if(b->bits[nb_long])
-			return 1;
-	return 0;
-}
-
-int starpu_bitmap_last(struct starpu_bitmap * b)
-{
-	if(b->cardinal == 0)
-		return -1;
-	int ilong;
-	for(ilong = b->size - 1; ilong >= 0; ilong--)
-	{
-		if(b->bits[ilong])
-			break;
-	}
-	STARPU_ASSERT(ilong >= 0);
-	unsigned long l = b->bits[ilong];
-	return ilong * LONG_BIT + get_last_bit_rank(l);
-}
-
-int starpu_bitmap_next(struct starpu_bitmap *b, int e)
-{
-	int nb_long = e / LONG_BIT;
-	int nb_bit = e % LONG_BIT;
-	unsigned long rest = nb_bit == LONG_BIT - 1 ? 0 : (~0ul << (nb_bit + 1)) & b->bits[nb_long];
-	if(nb_bit != (LONG_BIT - 1) && rest)
-	{
-		int i = get_first_bit_rank(rest);
-		STARPU_ASSERT(i >= 0 && i < LONG_BIT);
-		return (nb_long * LONG_BIT) + i;
-	}
-
-	for(nb_long++;nb_long < b->size; nb_long++)
-		if(b->bits[nb_long])
-			return nb_long * LONG_BIT + get_first_bit_rank(b->bits[nb_long]);
-	return -1;
-}

+ 275 - 0
src/common/starpu_bitmap.h

@@ -0,0 +1,275 @@
+#ifndef __STARPU_STATIC_INLINE_BITMAP_H__
+#define __STARPU_STATIC_INLINE_BITMAP_H__
+
+#include <common/utils.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef LONG_BIT
+#define LONG_BIT (sizeof(unsigned long) * 8)
+#endif
+
+#define BITMAP_SIZE ((STARPU_NMAXWORKERS - 1)/LONG_BIT) + 1
+
+/** */
+static inline struct starpu_bitmap *starpu_bitmap_create(void) STARPU_ATTRIBUTE_MALLOC;
+/** free \p b */
+static inline void starpu_bitmap_destroy(struct starpu_bitmap *b);
+
+/** set bit \p e in \p b */
+static inline void starpu_bitmap_set(struct starpu_bitmap *b, int e);
+/** unset bit \p e in \p b */
+static inline void starpu_bitmap_unset(struct starpu_bitmap *b, int e);
+/** unset all bits in \p b */
+static inline void starpu_bitmap_unset_all(struct starpu_bitmap *b);
+
+/** return true iff bit \p e is set in \p b */
+static inline int starpu_bitmap_get(struct starpu_bitmap *b, int e);
+/** Basically compute \c starpu_bitmap_unset_all(\p a) ; \p a = \p b & \p c; */
+static inline void starpu_bitmap_unset_and(struct starpu_bitmap *a, struct starpu_bitmap *b, struct starpu_bitmap *c);
+/** Basically compute \p a |= \p b */
+static inline void starpu_bitmap_or(struct starpu_bitmap *a, struct starpu_bitmap *b);
+/** return 1 iff \p e is set in \p b1 AND \p e is set in \p b2 */
+static inline int starpu_bitmap_and_get(struct starpu_bitmap *b1, struct starpu_bitmap *b2, int e);
+/** return the number of set bits in \p b */
+static inline int starpu_bitmap_cardinal(struct starpu_bitmap *b);
+
+/** return the index of the first set bit of \p b, -1 if none */
+static inline int starpu_bitmap_first(struct starpu_bitmap *b);
+/** return the position of the last set bit of \p b, -1 if none */
+static inline int starpu_bitmap_last(struct starpu_bitmap *b);
+/** return the position of set bit right after \p e in \p b, -1 if none */
+static inline int starpu_bitmap_next(struct starpu_bitmap *b, int e);
+/** todo */
+static inline int starpu_bitmap_has_next(struct starpu_bitmap *b, int e);
+
+
+
+struct starpu_bitmap
+{
+	unsigned long bits[BITMAP_SIZE];
+	int cardinal;
+};
+
+#ifdef DEBUG_BITMAP
+static int check_bitmap(struct starpu_bitmap *b)
+{
+	int card = b->cardinal;
+	int i = starpu_bitmap_first(b);
+	int j;
+	for(j = 0; j < card; j++)
+	{
+		if(i == -1)
+			return 0;
+		int tmp = starpu_bitmap_next(b,i);
+		if(tmp == i)
+			return 0;
+		i = tmp;
+	}
+	if(i != -1)
+		return 0;
+	return 1;
+}
+#else
+#define check_bitmap(b) 1
+#endif
+
+static int _count_bit_static(unsigned long e)
+{
+#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__) >= 4)
+	return __builtin_popcountl(e);
+#else
+	int c = 0;
+	while(e)
+	{
+		c += e&1;
+		e >>= 1;
+	}
+	return c;
+#endif
+}
+
+static inline struct starpu_bitmap *starpu_bitmap_create()
+{
+	struct starpu_bitmap *b;
+	_STARPU_CALLOC(b, 1, sizeof(*b));
+	for(int i=0 ; i < BITMAP_SIZE; i++)
+		b->bits[i] = 0;	
+	return b;
+}
+
+static inline void starpu_bitmap_destroy(struct starpu_bitmap * b)
+{
+	if(b)
+	{
+		free(b);
+	}
+}
+
+static inline void starpu_bitmap_set(struct starpu_bitmap * b, int e)
+{
+	if(!starpu_bitmap_get(b, e))
+		b->cardinal++;
+	else
+		return;
+	STARPU_ASSERT(e/LONG_BIT < BITMAP_SIZE);
+	b->bits[e/LONG_BIT] |= (1ul << (e%LONG_BIT));
+	STARPU_ASSERT(check_bitmap(b));
+}
+static inline void starpu_bitmap_unset(struct starpu_bitmap *b, int e)
+{
+	if(starpu_bitmap_get(b, e))
+		b->cardinal--;
+	else
+		return;
+	STARPU_ASSERT(e/LONG_BIT < BITMAP_SIZE);
+	if(e / LONG_BIT > BITMAP_SIZE)
+		return;
+	b->bits[e/LONG_BIT] &= ~(1ul << (e%LONG_BIT));
+	STARPU_ASSERT(check_bitmap(b));
+}
+
+static inline void starpu_bitmap_unset_all(struct starpu_bitmap * b)
+{
+	memset(b->bits, 0, BITMAP_SIZE * sizeof(unsigned long));
+}
+
+static inline void starpu_bitmap_unset_and(struct starpu_bitmap * a, struct starpu_bitmap * b, struct starpu_bitmap * c)
+{
+	a->cardinal = 0;
+	int i;
+	for(i = 0; i < BITMAP_SIZE; i++)
+	{
+		a->bits[i] = b->bits[i] & c->bits[i];
+		a->cardinal += _count_bit_static(a->bits[i]);
+	}
+}
+
+static inline int starpu_bitmap_get(struct starpu_bitmap * b, int e)
+{
+	STARPU_ASSERT(e / LONG_BIT < BITMAP_SIZE);
+	if(e / LONG_BIT >= BITMAP_SIZE)
+		return 0;
+	return (b->bits[e/LONG_BIT] & (1ul << (e%LONG_BIT))) ?
+		1:
+		0;
+}
+
+static inline void starpu_bitmap_or(struct starpu_bitmap * a, struct starpu_bitmap * b)
+{
+	int i;
+	a->cardinal = 0;
+	for(i = 0; i < BITMAP_SIZE; i++)
+	{
+		a->bits[i] |= b->bits[i];
+		a->cardinal += _count_bit_static(a->bits[i]);
+	}
+}
+
+
+int starpu_bitmap_and_get(struct starpu_bitmap * b1, struct starpu_bitmap * b2, int e)
+{
+	return starpu_bitmap_get(b1,e) && starpu_bitmap_get(b2,e);
+}
+
+static inline int starpu_bitmap_cardinal(struct starpu_bitmap * b)
+{
+	return b->cardinal;
+}
+
+
+static inline int get_first_bit_rank(unsigned long ms)
+{
+	STARPU_ASSERT(ms != 0);
+#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
+	return __builtin_ffsl(ms) - 1;
+#else
+	unsigned long m = 1ul;
+	int i = 0;
+	while(!(m&ms))
+		i++,m<<=1;
+	return i;
+#endif
+}
+
+static inline int get_last_bit_rank(unsigned long l)
+{
+	STARPU_ASSERT(l != 0);
+#if (__GNUC__ >= 4) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4))
+	return 8*sizeof(l) - __builtin_clzl(l);
+#else
+	int ibit = LONG_BIT - 1;
+	while((!(1ul << ibit)) & l)
+		ibit--;
+	STARPU_ASSERT(ibit >= 0);
+	return ibit;
+#endif
+}
+
+static inline int starpu_bitmap_first(struct starpu_bitmap * b)
+{
+	int i = 0;
+	while(i < BITMAP_SIZE && !b->bits[i])
+		i++;
+	if( i == BITMAP_SIZE)
+		return -1;
+	int nb_long = i;
+	unsigned long ms = b->bits[i];
+
+	return (nb_long * LONG_BIT) + get_first_bit_rank(ms);
+}
+
+static inline int starpu_bitmap_has_next(struct starpu_bitmap * b, int e)
+{
+	int nb_long = (e+1) / LONG_BIT;
+	int nb_bit = (e+1) % LONG_BIT;
+	unsigned long mask = (~0ul) << nb_bit;
+	if(b->bits[nb_long] & mask)
+		return 1;
+	for(nb_long++; nb_long < BITMAP_SIZE; nb_long++)
+		if(b->bits[nb_long])
+			return 1;
+	return 0;
+}
+
+static inline int starpu_bitmap_last(struct starpu_bitmap * b)
+{
+	if(b->cardinal == 0)
+		return -1;
+	int ilong;
+	for(ilong = BITMAP_SIZE - 1; ilong >= 0; ilong--)
+	{
+		if(b->bits[ilong])
+			break;
+	}
+	STARPU_ASSERT(ilong >= 0);
+	unsigned long l = b->bits[ilong];
+	return ilong * LONG_BIT + get_last_bit_rank(l);
+}
+
+static inline int starpu_bitmap_next(struct starpu_bitmap *b, int e)
+{
+	int nb_long = e / LONG_BIT;
+	int nb_bit = e % LONG_BIT;
+	unsigned long rest = nb_bit == LONG_BIT - 1 ? 0 : (~0ul << (nb_bit + 1)) & b->bits[nb_long];
+	if(nb_bit != (LONG_BIT - 1) && rest)
+	{
+		int i = get_first_bit_rank(rest);
+		STARPU_ASSERT(i >= 0 && i < LONG_BIT);
+		return (nb_long * LONG_BIT) + i;
+	}
+
+	for(nb_long++;nb_long < BITMAP_SIZE; nb_long++)
+		if(b->bits[nb_long])
+			return nb_long * LONG_BIT + get_first_bit_rank(b->bits[nb_long]);
+	return -1;
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STARPU_STATIC_INLINE_BITMAP_H__ */

+ 1 - 1
src/sched_policies/eager_central_policy.c

@@ -24,7 +24,7 @@
 #include <starpu_scheduler.h>
 #include <sched_policies/fifo_queues.h>
 #include <common/thread.h>
-#include <starpu_bitmap.h>
+#include <common/starpu_bitmap.h>
 #include <core/workers.h>
 
 struct _starpu_eager_center_policy_data

+ 1 - 1
src/sched_policies/eager_central_priority_policy.c

@@ -24,7 +24,7 @@
 
 #include <starpu.h>
 #include <starpu_scheduler.h>
-#include <starpu_bitmap.h>
+#include <common/starpu_bitmap.h>
 #include "prio_deque.h"
 #include <limits.h>
 

+ 1 - 1
src/sched_policies/graph_test_policy.c

@@ -30,7 +30,7 @@
 #include <sched_policies/prio_deque.h>
 #include <common/graph.h>
 #include <common/thread.h>
-#include <starpu_bitmap.h>
+#include <common/starpu_bitmap.h>
 #include <core/task.h>
 #include <core/workers.h>
 

+ 1 - 0
src/sched_policies/heteroprio.c

@@ -25,6 +25,7 @@
 #include <core/task.h>
 #include <core/workers.h>
 #include <core/debug.h>
+#include <common/starpu_bitmap.h>
 
 #include <sched_policies/prio_deque.h>
 #include <limits.h>