JuliaParallel/Dagger.jl

`@spawn` has confusing move semantics

Open

#357 ouverte le 9 sept. 2022

Voir sur GitHub
 (8 commentaires) (0 réactions) (1 assigné)Julia (86 forks)batch import
documentationeager apienhancementhelp wanted

Métriques du dépôt

Stars
 (706 stars)
Métriques de merge PR
 (Merge moyen 12j 5h) (4 PRs mergées en 30 j)

Description

Note that

◖◗ Dagger.@spawn single=2 println(myid())
EagerThunk (running)

◖◗       From worker 2:        1
◖◗

◖◗ Dagger.spawn(() -> println(myid()), single=2)
EagerThunk (running)

◖◗       From worker 2:        2

I think what's happening here is that in the former case it is evaluating myid() on process 1 and the function executed on worker 2 is just println(1).

This seems like a problem, it's hard to guess that these examples would be different. I suggest that @spawn should match spawn so that its arguments can be read as if it were the function body passed to spawn. Otherwise I think it will need a lot of documentation.

A stronger argument might be that Distributed.@spawnat already works as I'm suggesting:

◖◗ @spawnat 2 println(myid());

◖◗       From worker 2:        2

(My suggestion is clearly badly breaking at least in principle, so this is tricky.)

Guide contributeur