-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!goblin1!goblin.stu.neva.ru!postnews.google.com!glegroupsg2000goo.googl
egroups.com!not-for-mail
From: Roman W <b...@g...pl>
Newsgroups: pl.comp.programming
Subject: Re: OpenMP - jest szybciej czy wolniej?
Date: Mon, 5 Mar 2012 03:02:00 -0800 (PST)
Organization: http://groups.google.com
Lines: 103
Message-ID: <16246163.3061.1330945320697.JavaMail.geo-discussion-forums@vblb5>
References: <4f4feb4d$0$1271$65785112@news.neostrada.pl><jip3ao$9u9$...@n...news.atma
n.pl><4f501330$0$26703$65785112@news.neostrada.pl><jip477$asl$...@n...new
s.atman.pl><4f50b4a4$0$26698$65785112@news.neostrada.pl><jiqdm3$dvn$5@ine
ws.gazeta.pl>
<4f50bea4$0$1268$65785112@news.neostrada.pl><jiqfeg$dvn$...@i...gazeta.pl
><4f50c486$0$26685$65785112@news.neostrada.pl><jiqhqe$dvn$...@i...gazeta.
pl>
<jiqi0e$dvn$10@inews.gazeta.pl><4f50ddac$0$1279$6...@n...neostrada.p
l><jiqqlu$dvn$13@inews.gazeta.pl><4f50f4d2$0$26694$6...@n...neostrad
a.pl> <jiqt59$dvn$15@inews.gazeta.pl>
<4f50fa41$0$26701$65785112@news.neostrada.pl>
<jisdma$441$1@inews.gazeta.pl>
<4f51eeb2$0$1213$65785112@news.neostrada.pl>
<jit2t8$q3u$1@inews.gazeta.pl> <jiuvio$ea6$1@inews.gazeta.pl>
<20754956.1627.1330856982202.JavaMail.geo-discussion-forums@vbxv4>
<jivip6$9jm$1@inews.gazeta.pl>
NNTP-Posting-Host: 193.189.80.39
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
X-Trace: posting.google.com 1330945793 27060 127.0.0.1 (5 Mar 2012 11:09:53 GMT)
X-Complaints-To: g...@g...com
NNTP-Posting-Date: Mon, 5 Mar 2012 11:09:53 +0000 (UTC)
In-Reply-To: <jivip6$9jm$1@inews.gazeta.pl>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=193.189.80.39;
posting-account=EexxQQoAAAAkOfWz0VZRKLcHNpXJZLB9
User-Agent: G2/1.0
Xref: news-archive.icm.edu.pl pl.comp.programming:195985
[ ukryj nagłówki ]On Sunday, March 4, 2012 11:13:42 AM UTC, wrote:
> Roman W <b...@g...pl> napisał(a):
>
> > On Sunday, March 4, 2012 5:46:00 AM UTC, M.M. wrote:
> > > Zawsze narzut na utworzenie watkow jest duzy, to nie wina OpenMP.
> >
> > Jezeli tworzysz watki recznie, narzut jest znacznie mniejszy.
>
> Mozesz to jakos uzasadnic i opisac jak uzywasz slowa "recznie"?
> Pozdrawiam
A kto pyta? ;-)
Mialem na mysli np. cos takiego:
#include <boost/thread.hpp>
#include <boost/timer.hpp>
#include <iostream>
#include <sstream>
#include <cmath>
template <class T> class global_data
{
public:
global_data(const T& data = T())
: m_data(data)
{
}
T& get() { return m_data; }
const T& get() const { return m_data; }
boost::mutex& mutex() { return m_mutex; }
private:
boost::mutex m_mutex;
T m_data;
};
template <class T> struct summator
{
summator(global_data<T>* d, T b, T e)
: begin(b), end(e), data(d)
{
}
void operator()()
{
T sum = T();
for (T i = begin; i < end; ++i)
sum += cos(i);
{
boost::lock_guard<boost::mutex> total_sum_lock(data->mutex());
data->get() += sum;
}
}
T begin;
T end;
global_data<T>* data;
};
template <class T> summator<T> make_summator(global_data<T>* d, T b, T e)
{
return summator<T>(d, b, e);
}
int main(int argc, char* argv[])
{
size_t n;
size_t d;
if (argc < 3) {
std::cerr << "Usage: " << argv[0] << " array-size number-of-threads" << std::endl;
return -1;
} else {
std::stringstream ss;
ss << argv[1];
ss >> n;
ss.clear();
ss << argv[2];
ss >> d;
}
if (n % d != 0) {
std::cerr << "array-size not exactly divisible by number-of-threads: " << n << "
and " << d << std::endl;
return -1;
}
const size_t s = n / d;
boost::thread_group tg;
global_data<double> total_sum(0.0);
for (size_t i = 0; i < d; ++i) {
tg.create_thread(make_summator(&total_sum, static_cast<double>(i*s), (i + 1.0)*s));
}
tg.join_all();
std::cout << "Total sum == " << total_sum.get() << std::endl;
}
Nawet dla parametrow przy ktorych program dziala tylko kilkanascie sekund (array-size
= 1000000) 2 watki wykonuja sie znacznie szybciej niz 1, a 4 to juz ho-ho.
RW
Następne wpisy z tego wątku
- 05.03.12 15:14 M.M.
- 05.03.12 18:33 slawek
- 05.03.12 18:42 fir kenobi
- 05.03.12 18:48 slawek
- 05.03.12 18:58 slawek
- 06.03.12 02:27 Michoo
- 06.03.12 06:04 Karol Y
- 06.03.12 09:43 slawek
- 06.03.12 10:00 Roman W
- 06.03.12 12:52 Michoo
- 06.03.12 17:43 slawek
- 06.03.12 18:08
- 06.03.12 18:10
- 06.03.12 20:50 Roman W
- 07.03.12 15:19 slawek
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-07-10 Nadchodzi nowa opłata od posiadania aut spalinowych
- 2024-07-10 Droga dwukierunkowa
- 2024-07-10 Elektryki są fajne
- 2024-07-10 Elektryki są fajne :(
- 2024-07-09 USB -> jack
- 2024-07-10 Kompakt WC z montażem
- 2024-07-10 Gorąco za oknem, to napisałem piosenkę o grupowiczach
- 2024-07-09 Naprawa klimy przenośnej - czy to opłacalne?
- 2024-07-10 Białystok => Technical Leader (Java Background) <=
- 2024-07-10 Białystok => Senior Rust Software Engineer <=
- 2024-07-10 Warszawa => Spedytor Międzynarodowy <=
- 2024-07-10 Warszawa => Spedytor międzynarodowy <=
- 2024-07-10 Warszawa => Technical Lead ( (Java Background)) <=
- 2024-07-10 Warszawa => Projektant/Programista React Native <=
- 2024-07-10 Gdańsk => Head of International Freight Forwarding Department <=