|
Boost : |
Subject: Re: [boost] [Fibers] Performance
From: Antony Polukhin (antoshkka_at_[hidden])
Date: 2014-01-14 02:05:16
2014/1/14 Oliver Kowalke <oliver.kowalke_at_[hidden]>
<...>
> I believe you can't and shouldn't compare fibers with qthreads, TBB or
> openmp.
> I'll write a test measuring the overhead of a fiber running in one thread
> (as already described above) first.
>
How about comparing fiber construction and joining with thread construction
and joining? This will help the users to decide, is it beneficial to start
a new thread or to start a fiber.
A few ideas for tests:
* compare construction+join of a single thread and construction+join of
single fiber (empty functors in both cases)
* compare construction+join of a multiple threads and construction+join of
multiple fibers (empty functors in both cases)
* compare construction of a thread and construction of fiber (empty
functors in both cases)
Pseudocode:
void foo(){}
const unsigned N = 1000;
// Test #1
timer start
for (unsigned i = 0; i < N; ++i) {
fiber f(&foo);
f.join();
}
cout << "Fibers: " << timer stop;
timer start
for (unsigned i = 0; i < N; ++i) {
boost::thread f(&foo);
f.join();
}
cout << "Threads: " << timer stop;
// Test #2
timer start
for (unsigned i = 0; i < N; ++i) {
fiber f1(&foo), f2(&foo), f3(&foo), f4(&foo), f5(&foo);
f1.join(); f2.join(); f3.join(); f4.join(); f5.join();
}
cout << "Fibers: " << timer stop;
timer start
for (unsigned i = 0; i < N; ++i) {
boost::thread f1(&foo), f2(&foo), f3(&foo), f4(&foo), f5(&foo);
f1.join(); f2.join(); f3.join(); f4.join(); f5.join();
}
cout << "Threads: " << timer stop;
// Test #3
timer start
for (unsigned i = 0; i < N; ++i) {
fiber(&foo).detach();
}
cout << "Fibers: " << timer stop;
timer start
for (unsigned i = 0; i < N; ++i) {
boost::thread(&foo).detach();
}
cout << "Threads: " << timer stop;
-- Best regards, Antony Polukhin
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk