JuliaParallel/Dagger.jl

`@spawn` has confusing move semantics

Open

#357 opened on 2022年9月9日

GitHub で見る
 (8 comments) (0 reactions) (1 assignee)Julia (86 forks)batch import
documentationeager apienhancementhelp wanted

Repository metrics

Stars
 (706 stars)
PR merge metrics
 (平均マージ 12d 5h) (30d で 4 merged PRs)

説明

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

コントリビューターガイド