JuliaParallel/Dagger.jl

`@spawn` has confusing move semantics

Open

#357 aberto em 9 de set. de 2022

Ver no GitHub
 (8 comments) (0 reactions) (1 assignee)Julia (86 forks)batch import
documentationeager apienhancementhelp wanted

Métricas do repositório

Stars
 (706 stars)
Métricas de merge de PR
 (Mesclagem média 12d 5h) (4 fundiu PRs em 30d)

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.)

Guia do colaborador