Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-orbit
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Katerina Roukounaki
cloud-orbit
Commits
3f177aa3
Commit
3f177aa3
authored
Nov 16, 2014
by
Aggelos Giantsios
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Elaborate on Hosts type, add few funs to Master
First attempt to use Cloud Haskell's primitives
parent
2b963176
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
117 additions
and
5 deletions
+117
-5
Master.hs
Master.hs
+113
-2
Types.hs
Types.hs
+4
-3
No files found.
Master.hs
View file @
3f177aa3
...
...
@@ -4,11 +4,18 @@
module
Master
()
where
import
Control.Distributed.Process
(
ProcessId
(
Process
,
ProcessId
,
receiveWait
,
match
)
import
qualified
Sequential
as
Sq
(
orbit
)
import
Credit
(
is_one
,
credit
)
import
Table
(
sum_freqs
,
freq_from_stat
...
...
@@ -24,13 +31,117 @@ import WorkerAux
)
import
Types
(
Generator
,
Host
,
Host
Info
(
..
)
,
MaybeHosts
(
..
)
,
ParConf
,
Stats
,
Vertex
)
--
DATA
--
Static
Machine
Configuration
:
--
{
Gs
,
%
list
of
generators
--
Master
,
%
pid
of
master
process
--
Workers
,
%
list
of
Worker
--
GlobalTableSize
,
%
size
of
global
hash
table
--
IdleTimeout
,
%
milliseconds
this
worker
idles
before
sending
'd
o
ne'
--
SpawnImgComp
}
%
true
iff
this
worker
spawns
image
computations
--
--
Worker
:
--
{
Pid
,
%
pid
of
worker
process
--
TableOffset
,
%
offset
(
=
index
0
)
of
local
table
into
global
table
--
TableSize
}
%
size
of
local
hash
table
--
--
Host
:
--
{
Node
,
%
atom
naming
Erlang
node
--
Procs
,
%
number
of
processors
--
TableSize
,
%
size
of
hash
table
per
processor
--
IdleTimeout
}
%
milliseconds
a
processor
idles
before
sending
'd
o
ne'
--
--
Statistics
:
--
List
of
pairs
where
the
first
component
is
an
atom
,
the
second
--
some
data
.
Part
of
the
data
is
the
fill
frequency
of
the
table
--
(
a
list
whose
ith
element
indicates
frequency
of
filling
degree
i
)
.
--
MESSAGES
--
Master
->
Worker
:
{
init
,
StaticMachConf
}
--
--
Master
/
Worker
->
Worker
:
{
vertex
,
X
,
Slot
,
K
}
--
%
X
is
vertex
--
%
Slot
is
slot
of
X
on
target
worker
--
%
K
is
atomic
credit
shipped
with
vertex
--
--
Worker
->
Master
:
{
done
,
Cs
}
--
%
Cs
is
non
-
zero
credit
(
rep
as
list
of
ints
)
--
--
Master
->
Worker
:
{
dump
}
--
--
Worker
->
Master
:
{
result
,
Xs
,
Stats
}
--
%
Xs
is
list
of
found
orbit
vertices
--
%
Stats
is
statistics
about
worker's
table
--
compute
orbit
of
elements
in
list
Xs
under
list
of
generators
Gs
;
--
the
argument
Hosts
is
either
an
integer
N
,
a
triple
{
P
,
N
,
T
},
or
--
a
non
-
empty
list
[{
H
,
P
,
N
,
T
}
|
...
]
of
quadruples
:
--
*
N
:
run
the
sequential
algorithm
with
table
size
N
--
*
{
P
,
N
,
T
,
S
}
:
run
the
parallel
algorithm
on
P
processors
--
each
with
table
size
N
,
idle
timeout
T
and
--
spawn
image
computation
flag
S
;
--
*
[{
H
,
P
,
N
,
T
,
S
}
|
...
]
:
run
the
distributed
algorithm
on
the
list
of
--
hosts
,
where
each
quintuple
{
H
,
P
,
N
,
T
,
S
}
--
specifies
--
*
host
name
H
(
ie
.
name
of
Erlang
node
),
--
*
number
of
processors
P
on
H
,
--
*
table
size
N
(
per
processor
),
--
*
idle
timeout
T
,
and
--
*
spawn
image
computation
flag
S
.
--
The
function
returns
a
pair
consisting
of
the
computed
orbit
and
--
a
list
of
statistics
,
the
first
element
of
which
reports
overall
statistics
,
--
and
all
remaining
elements
report
statistics
of
some
worker
.
orbit
::
[
Vertex
->
Vertex
]
->
[
Vertex
]
->
MaybeHosts
->
([
Vertex
],
[
Stats
])
orbit
gs
xs
(
Seq
tablesize
)
=
Sq
.
orbit
gs
xs
tablesize
orbit
gs
xs
(
Par
hostInfo
)
=
par_orbit
gs
xs
hostInfo
--
FIXME
Write
the
proper
par_orbit
par_orbit
::
[
Vertex
->
Vertex
]
->
[
Vertex
]
->
HostInfo
->
([
Vertex
],
[
Stats
])
par_orbit
gs
xs
hosts
=
([
42
],
[[(
"xxx"
,
"xxx"
)]])
--
collect_credit
collects
leftover
credit
from
idle
workers
until
--
the
credit
adds
up
to
1
.
collect_credit
::
[
Int
]
->
Process
()
collect_credit
crdt
=
case
is_one
crdt
of
True
->
return
()
False
->
receiveWait
[
match
$
\
(
"done"
,
workersCredit
)
->
collect_credit
$
credit
workersCredit
crdt
]
--
collect_orbit
collects
partial
orbits
and
stats
from
N
workers
.
collect_orbit
::
Int
->
Int
->
(
Process
[
Vertex
],
Process
[
Stats
])
collect_orbit
elapsedTime
n
=
(
orbit
,
stats
)
where
x
=
do_collect_orbit
n
[]
[]
orbit
=
x
>>=
(
\
(
partOrBits
,
_
)
->
return
$
concat
partOrBits
)
stats
=
x
>>=
(
\
(
_
,
workerStats
)
->
return
$
(
master_stats
elapsedTime
workerStats
)
:
workerStats
)
do_collect_orbit
::
Int
->
[[
Vertex
]]
->
[
Stats
]
->
Process
([[
Vertex
]],
[
Stats
])
do_collect_orbit
0
partOrbits
workerStats
=
return
(
partOrbits
,
workerStats
)
do_collect_orbit
n
partOrbits
workerStats
=
do
receiveWait
[
match
$
\
(
"result"
,
partOrbit
,
workerStat
)
->
do_collect_orbit
(
n
-
1
)
(
partOrbit
:
partOrbits
)
(
workerStat
:
workerStats
)
]
-------------------------------------------------------------------------------
--
auxiliary
functions
...
...
Types.hs
View file @
3f177aa3
...
...
@@ -4,7 +4,7 @@
module
Types
(
Ct
(
..
)
,
Generator
,
Freq
,
Host
,
Host
Info
(
..
)
,
MaybeHosts
(
..
)
,
ParConf
,
SeqConf
...
...
@@ -25,9 +25,10 @@ type Vertex = Int
type
VTable
=
Array
Int
[
Vertex
]
type
Stats
=
[(
String
,
String
)]
type
Generator
=
Vertex
->
Vertex
type
Host
=
(
NodeId
,
Int
,
Int
,
Int
)
--
Node
,
Procs
,
TableSize
,
IdleTimeout
data
MaybeHosts
=
Seq
Int
|
Par
[
Host
]
|
Par
HostInfo
data
HostInfo
=
JustOne
(
Int
,
Int
,
Int
,
Bool
)
--
Procs
,
TableSize
,
IdleTimeout
,
SpwnImgComp
|
Many
[(
NodeId
,
Int
,
Int
,
Int
,
Bool
)]
--
NodeId
,
Procs
,
TableSize
,
IdleTimeout
,
SpwnImgComp
type
SeqConf
=
([
Generator
],
Int
)
type
ParConf
=
([
Generator
],
ProcessId
,
[
ProcessId
],
Int
,
Int
,
Bool
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment