Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
ac3711b6
Commit
ac3711b6
authored
Jan 08, 2012
by
neverlord
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
benchmark update
parent
c01e6d47
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
195 additions
and
12 deletions
+195
-12
.gitignore
.gitignore
+1
-0
benchmarks/Makefile.am
benchmarks/Makefile.am
+3
-1
benchmarks/MixedCase.scala
benchmarks/MixedCase.scala
+150
-0
benchmarks/mixed_case.cpp
benchmarks/mixed_case.cpp
+40
-11
cppa.files
cppa.files
+1
-0
No files found.
.gitignore
View file @
ac3711b6
...
...
@@ -15,6 +15,7 @@ test
*.class
benchmarks/mailbox_performance
benchmarks/actor_creation
benchmarks/mixed_case
theron_mailbox_performance
.libs/
.deps/
...
...
benchmarks/Makefile.am
View file @
ac3711b6
...
...
@@ -3,13 +3,15 @@ ACLOCAL_AMFLAGS = -I ../m4
AM_CXXFLAGS
=
-I
../
--std
=
c++0x
-pedantic
-Wall
-Wextra
noinst_PROGRAMS
=
actor_creation mailbox_performance
noinst_PROGRAMS
=
actor_creation mailbox_performance
mixed_case
actor_creation_SOURCES
=
actor_creation.cpp
mailbox_performance_SOURCES
=
mailbox_performance.cpp
mixed_case_SOURCES
=
mixed_case.cpp
EXAMPLES_LIBS
=
-L
../.libs/
-lcppa
$(BOOST_LDFLAGS)
$(BOOST_THREAD_LIB)
actor_creation_LDADD
=
$(EXAMPLES_LIBS)
mailbox_performance_LDADD
=
$(EXAMPLES_LIBS)
mixed_case_LDADD
=
$(EXAMPLES_LIBS)
benchmarks/MixedCase.scala
0 → 100644
View file @
ac3711b6
import
scala.actors.Actor
import
scala.actors.Actor._
import
akka.actor.Actor.actorOf
import
scala.annotation.tailrec
case
class
Token
(
value
:
Int
)
case
class
Init
(
ringSize
:
Int
,
repetitions
:
Int
)
case
class
Calc
(
value
:
Long
)
case
class
Factors
(
values
:
List
[
Long
])
object
global
{
final
val
taskN
=
((
Long
)
86028157
)
*
329545133
final
val
factor1
:
Long
=
86028157
final
val
factor2
:
Long
=
329545133
final
val
numMessages
=
1000
val
latch
=
new
java
.
util
.
concurrent
.
CountDownLatch
(
1
)
val
checkFactors
(
f
:
List
[
Long
])
{
assert
(
f
.
length
==
2
&&
f
(
1
)
==
factor1
&&
f
(
2
)
==
factor2
)
}
}
object
factorize
{
def
apply
(
arg
:
Long
)
:
List
[
Long
]
{
var
n
=
arg
if
(
n
<=
3
)
return
List
[
Long
](
n
)
var
result
=
new
List
[
Long
]
var
d
:
Long
=
2
while
(
d
<
n
)
{
if
((
n
%
d
)
==
0
)
{
result
append
d
n
=
n
/
d
}
else
d
=
if
(
d
==
2
)
3
else
d
+
2
}
result
append
d
}
}
class
ThreadedChainLink
(
next
:
Actor
)
extends
Actor
{
override
def
act
()
{
receive
{
case
Token
(
value
)
=>
next
!
Token
(
value
)
if
(
value
>
0
)
act
}
}
}
class
ThreadedChainMaster
extends
Actor
{
@tailrec
final
def
newRing
(
a
:
Actor
,
i
:
Int
)
{
val
next
=
new
ThreadedChainLink
(
a
)
if
(
i
>
0
)
newRing
(
next
,
i
-
1
)
else
next
}
def
checkFactors
(
f
:
List
[
Long
])
{
}
override
def
act
()
{
val
worker
=
actor
{
receive
{
case
Calc
(
value
)
=>
reply
factorize
(
value
)
}
}
receive
{
case
Init
(
rsize
,
iterations
)
=>
var
remainingFactors
=
iterations
for
(
_
<-
0
until
iterations
)
{
val
next
=
newRing
(
rsize
)
worker
!
Calc
(
global
.
taskN
)
while
(
state
!=
0x2
)
receive
{
case
Token
(
value
)
=>
if
(
value
>
0
)
next
!
Token
(
value
-
1
)
}
}
}
}
}
class
ThreadedReceiver
(
n
:
Long
)
extends
Actor
{
override
def
act
()
{
var
i
:
Long
=
0
while
(
i
<
n
)
receive
{
case
Msg
=>
i
+=
1
}
}
}
class
ThreadlessReceiver
(
n
:
Long
)
extends
Actor
{
var
i
:
Long
=
0
override
def
act
()
{
react
{
case
Msg
=>
i
+=
1
if
(
i
<
n
)
act
}
}
}
class
AkkaReceiver
(
n
:
Long
)
extends
akka
.
actor
.
Actor
{
var
received
:
Long
=
0
def
receive
=
{
case
Msg
=>
received
+=
1
if
(
received
==
n
)
{
global
.
latch
.
countDown
self
.
exit
}
}
}
object
MailboxPerformance
{
def
usage
()
{
Console
println
"usage: (threaded|threadless|akka) (num_threads) (msgs_per_thread)"
}
def
main
(
args
:
Array
[
String
])
=
{
if
(
args
.
size
!=
3
)
{
usage
throw
new
IllegalArgumentException
(
""
)
}
val
threads
=
args
(
1
).
toInt
val
msgs
=
args
(
2
).
toInt
val
impl
=
List
(
"threaded"
,
"threadless"
,
"akka"
).
indexOf
(
args
(
0
))
if
(
impl
==
-
1
)
{
usage
}
else
if
(
impl
<
2
)
{
val
rcvRef
=
if
(
impl
==
0
)
(
new
ThreadedReceiver
(
threads
*
msgs
)).
start
else
(
new
ThreadlessReceiver
(
threads
*
msgs
)).
start
for
(
i
<-
0
until
threads
)
(
new
java
.
lang
.
Thread
{
override
def
run
()
{
for
(
_
<-
0
until
msgs
)
rcvRef
!
Msg
}
}).
start
}
else
{
val
rcvRef
=
actorOf
(
new
AkkaReceiver
(
threads
*
msgs
)).
start
for
(
i
<-
0
until
threads
)
(
new
java
.
lang
.
Thread
{
override
def
run
()
{
for
(
_
<-
0
until
msgs
)
rcvRef
!
Msg
}
}).
start
global
.
latch
.
await
}
}
}
benchmarks/mixed_case.cpp
View file @
ac3711b6
...
...
@@ -42,7 +42,7 @@ using std::endl;
using
std
::
int64_t
;
using
std
::
uint64_t
;
typedef
std
::
vector
<
uint64_t
>
;
typedef
std
::
vector
<
uint64_t
>
factors
;
using
namespace
cppa
;
...
...
@@ -79,6 +79,13 @@ factors factorize(uint64_t n)
return
std
::
move
(
result
);
}
void
check_factors
(
factors
const
&
vec
)
{
assert
(
vec
.
size
()
==
2
);
assert
(
vec
[
0
]
==
s_factor1
);
assert
(
vec
[
1
]
==
s_factor2
);
}
struct
fsm_worker
:
fsm_actor
<
fsm_worker
>
{
behavior
init_state
;
...
...
@@ -120,6 +127,7 @@ struct fsm_chain_master : fsm_actor<fsm_chain_master>
actor_ptr
next
;
actor_ptr
worker
;
behavior
init_state
;
int
remainig_results
;
void
new_ring
(
int
ring_size
)
{
send
(
worker
,
atom
(
"calc"
),
s_task_n
);
...
...
@@ -128,10 +136,12 @@ struct fsm_chain_master : fsm_actor<fsm_chain_master>
{
next
=
spawn
(
new
fsm_chain_link
(
next
));
}
++
remainig_results
;
send
(
next
,
atom
(
"token"
),
s_num_messages
);
}
fsm_chain_master
()
:
iteration
(
0
)
{
remainig_results
=
0
;
worker
=
spawn
(
new
fsm_worker
);
init_state
=
(
...
...
@@ -153,7 +163,25 @@ struct fsm_chain_master : fsm_actor<fsm_chain_master>
{
send
(
worker
,
atom
(
":Exit"
),
exit_reason
::
user_defined
);
quit
(
exit_reason
::
normal
);
if
(
remainig_results
==
0
)
{
quit
(
exit_reason
::
normal
);
}
else
{
become
(
on
<
atom
(
"result"
),
factors
>
()
>>
[
=
](
factors
const
&
vec
)
{
check_factors
(
vec
);
--
remainig_results
;
if
(
remainig_results
==
0
)
{
quit
(
exit_reason
::
normal
);
}
}
);
}
}
}
else
...
...
@@ -161,11 +189,10 @@ struct fsm_chain_master : fsm_actor<fsm_chain_master>
send
(
next
,
atom
(
"token"
),
v
-
1
);
}
},
on
<
atom
(
"result"
),
factors
>
()
>>
[](
factors
const
&
vec
)
on
<
atom
(
"result"
),
factors
>
()
>>
[
=
](
factors
const
&
vec
)
{
assert
(
vec
.
size
()
==
2
);
assert
(
vec
[
0
]
==
s_factor1
);
assert
(
vec
[
1
]
==
s_factor2
);
check_factors
(
vec
);
--
remainig_results
;
}
);
}
...
...
@@ -202,6 +229,7 @@ void chain_master()
);
});
actor_ptr
next
;
int
remaining_results
=
0
;
auto
new_ring
=
[
&
](
int
ring_size
)
{
send
(
worker
,
atom
(
"calc"
),
s_task_n
);
...
...
@@ -211,6 +239,7 @@ void chain_master()
next
=
spawn
(
chain_link
,
next
);
}
send
(
next
,
atom
(
"token"
),
s_num_messages
);
++
remaining_results
;
};
receive
(
...
...
@@ -234,14 +263,14 @@ void chain_master()
send
(
next
,
atom
(
"token"
),
v
-
1
);
}
},
on
<
atom
(
"result"
),
factors
>
()
>>
[](
factors
const
&
vec
)
on
<
atom
(
"result"
),
factors
>
()
>>
[
&
](
factors
const
&
vec
)
{
assert
(
vec
.
size
()
==
2
);
assert
(
vec
[
0
]
==
s_factor1
);
assert
(
vec
[
1
]
==
s_factor2
);
--
remaining_results
;
check_factors
(
vec
);
}
)
.
until
([
&
]()
{
return
iteration
==
repetitions
;
});
.
until
([
&
]()
{
return
iteration
==
repetitions
&&
remaining_results
==
0
;
});
}
);
send
(
worker
,
atom
(
":Exit"
),
exit_reason
::
user_defined
);
...
...
cppa.files
View file @
ac3711b6
...
...
@@ -246,3 +246,4 @@ cppa/behavior.hpp
src/receive.cpp
benchmarks/actor_creation.cpp
benchmarks/mailbox_performance.cpp
benchmarks/mixed_case.cpp
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