Accéder au contenu.
Menu Sympa

starpu-devel - Re: [Starpu-devel] Is StarPU busy-waiting for tasks ?

Objet : Developers list for StarPU

Archives de la liste

Re: [Starpu-devel] Is StarPU busy-waiting for tasks ?


Chronologique Discussions 
  • From: Samuel Thibault <samuel.thibault@ens-lyon.org>
  • To: Benoît Lizé <benoit.lize@gmail.com>
  • Cc: starpu-devel@lists.gforge.inria.fr
  • Subject: Re: [Starpu-devel] Is StarPU busy-waiting for tasks ?
  • Date: Thu, 7 Nov 2013 17:56:17 +0100
  • List-archive: <http://lists.gforge.inria.fr/pipermail/starpu-devel>
  • List-id: "Developers list. For discussion of new features, code changes, etc." <starpu-devel.lists.gforge.inria.fr>

Benoît Lizé, le Thu 07 Nov 2013 10:39:40 +0100, a écrit :
> +/* Condition variable and mutex used to pause/resume. */
> +static starpu_pthread_cond_t pause_cond = STARPU_PTHREAD_COND_INITIALIZER;
> +static starpu_pthread_mutex_t pause_mutex =
> STARPU_PTHREAD_MUTEX_INITIALIZER;
> unsigned _starpu_machine_is_running(void)
> {
> unsigned ret;
> - /* running is just protected by a memory barrier */
> + unsigned should_pause;
> + /* running and paused are just protected by a memory barrier */
> STARPU_RMB();
> + should_pause = config.paused;
> +
> + if (STARPU_UNLIKELY(should_pause)) {
> + STARPU_PTHREAD_MUTEX_LOCK(&pause_mutex);

You need to check again should_pause here, otherwise someone may have
run resume in-between.

> + STARPU_PTHREAD_COND_WAIT(&pause_cond, &pause_mutex);
> + STARPU_PTHREAD_MUTEX_UNLOCK(&pause_mutex);
> + }
> +
> ANNOTATE_HAPPENS_AFTER(&config.running);
> ret = config.running;
> ANNOTATE_HAPPENS_BEFORE(&config.running);
> return ret;
> }
>
> +void starpu_pause()
> +{
> + config.paused = 1;

Mmm, I'd rather see pause/resume work as a push/pop mechanism, i.e.
paused is the number of calls to pause() minus the number of calls to
resume.

> @@ -967,6 +993,9 @@ void starpu_shutdown(void)
> initialized = CHANGING;
> STARPU_PTHREAD_MUTEX_UNLOCK(&init_mutex);
>
> + /* If the workers are frozen, no progress can be made. */
> + starpu_resume();

And I'd rather avoid this, and use an ASSERT(!paused) instead.

Samuel





Archives gérées par MHonArc 2.6.19+.

Haut de le page