Library examples.vertex_fibonacci__code
Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_parabs.pool.
Require Import zoo_parabs.vertex.
Require Import zoo_std.ivar_4.
Require Import zoo.options.
Definition vertex_fibonacciู mainโ : val :=
๐ฟ๐ฒ๐ฐ "main" "ctx" "vtx" "r" "n" โ
๐ถ๐ณ "n" โค 1 ๐๐ต๐ฒ๐ป (
"r" <- "n" โฎ
true
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "r1" = ๐ฟ๐ฒ๐ณ 0 ๐ถ๐ป
๐น๐ฒ๐ "vtx1" = vertexู create ยงNone ๐ถ๐ป
๐น๐ฒ๐ "n1" = "n" - 1 ๐ถ๐ป
vertexู set_task
"vtx1"
(๐ณ๐๐ป "ctx" โ "main" "ctx" "vtx1" "r1" "n1") โฎ
vertexู release "ctx" "vtx1" โฎ
๐น๐ฒ๐ "r2" = ๐ฟ๐ฒ๐ณ 0 ๐ถ๐ป
๐น๐ฒ๐ "vtx2" = vertexู create ยงNone ๐ถ๐ป
๐น๐ฒ๐ "n2" = "n" - 2 ๐ถ๐ป
vertexู set_task
"vtx2"
(๐ณ๐๐ป "ctx" โ "main" "ctx" "vtx2" "r2" "n2") โฎ
vertexู release "ctx" "vtx2" โฎ
vertexู precede "vtx1" "vtx" โฎ
vertexู precede "vtx2" "vtx" โฎ
vertexู yield "vtx"
(๐ณ๐๐ป "_ctx" โ "r" <- !"r1" + !"r2" โฎ
true)
).
Definition vertex_fibonacciู main : val :=
๐ณ๐๐ป "num_worker" "n" โ
poolู run
"num_worker"
(๐ณ๐๐ป "ctx" โ
๐น๐ฒ๐ "r" = ๐ฟ๐ฒ๐ณ 0 ๐ถ๐ป
๐น๐ฒ๐ "vtx1" = vertexู create ยงNone ๐ถ๐ป
vertexู set_task
"vtx1"
(๐ณ๐๐ป "ctx" โ
vertex_fibonacciู mainโ "ctx" "vtx1" "r" "n") โฎ
vertexู release "ctx" "vtx1" โฎ
๐น๐ฒ๐ "ivar" = ivar_4ู create () ๐ถ๐ป
๐น๐ฒ๐ "vtx2" =
vertexู create'
(๐ณ๐๐ป "ctx" โ ivar_4ู notify "ivar" "ctx" ())
๐ถ๐ป
vertexู precede "vtx1" "vtx2" โฎ
vertexู release "ctx" "vtx2" โฎ
poolู wait_ivar "ctx" "ivar" โฎ
!"r").
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_parabs.pool.
Require Import zoo_parabs.vertex.
Require Import zoo_std.ivar_4.
Require Import zoo.options.
Definition vertex_fibonacciู mainโ : val :=
๐ฟ๐ฒ๐ฐ "main" "ctx" "vtx" "r" "n" โ
๐ถ๐ณ "n" โค 1 ๐๐ต๐ฒ๐ป (
"r" <- "n" โฎ
true
) ๐ฒ๐น๐๐ฒ (
๐น๐ฒ๐ "r1" = ๐ฟ๐ฒ๐ณ 0 ๐ถ๐ป
๐น๐ฒ๐ "vtx1" = vertexู create ยงNone ๐ถ๐ป
๐น๐ฒ๐ "n1" = "n" - 1 ๐ถ๐ป
vertexู set_task
"vtx1"
(๐ณ๐๐ป "ctx" โ "main" "ctx" "vtx1" "r1" "n1") โฎ
vertexู release "ctx" "vtx1" โฎ
๐น๐ฒ๐ "r2" = ๐ฟ๐ฒ๐ณ 0 ๐ถ๐ป
๐น๐ฒ๐ "vtx2" = vertexู create ยงNone ๐ถ๐ป
๐น๐ฒ๐ "n2" = "n" - 2 ๐ถ๐ป
vertexู set_task
"vtx2"
(๐ณ๐๐ป "ctx" โ "main" "ctx" "vtx2" "r2" "n2") โฎ
vertexู release "ctx" "vtx2" โฎ
vertexู precede "vtx1" "vtx" โฎ
vertexู precede "vtx2" "vtx" โฎ
vertexู yield "vtx"
(๐ณ๐๐ป "_ctx" โ "r" <- !"r1" + !"r2" โฎ
true)
).
Definition vertex_fibonacciู main : val :=
๐ณ๐๐ป "num_worker" "n" โ
poolู run
"num_worker"
(๐ณ๐๐ป "ctx" โ
๐น๐ฒ๐ "r" = ๐ฟ๐ฒ๐ณ 0 ๐ถ๐ป
๐น๐ฒ๐ "vtx1" = vertexู create ยงNone ๐ถ๐ป
vertexู set_task
"vtx1"
(๐ณ๐๐ป "ctx" โ
vertex_fibonacciู mainโ "ctx" "vtx1" "r" "n") โฎ
vertexู release "ctx" "vtx1" โฎ
๐น๐ฒ๐ "ivar" = ivar_4ู create () ๐ถ๐ป
๐น๐ฒ๐ "vtx2" =
vertexู create'
(๐ณ๐๐ป "ctx" โ ivar_4ู notify "ivar" "ctx" ())
๐ถ๐ป
vertexู precede "vtx1" "vtx2" โฎ
vertexู release "ctx" "vtx2" โฎ
poolู wait_ivar "ctx" "ivar" โฎ
!"r").