-
Data: 2012-03-05 11:02:00
Temat: Re: OpenMP - jest szybciej czy wolniej?
Od: Roman W <b...@g...pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- 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
Najnowsze wątki
- 2024-11-24 Aby WKOOOORWIĆ ekofaszystów ;-)
- 2024-11-22 OC - podwyżka
- 2024-11-22 wyszedł z domu bez buta
- 2024-11-22 Bieda hud.
- 2024-11-24 DS1813-10 się psuje
- 2024-11-23 Białystok => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-23 Szczecin => QA Engineer <=
- 2024-11-23 Warszawa => SEO Specialist (15-20h tygodniowo) <=
- 2024-11-22 Warszawa => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-22 Warszawa => Senior Account Manager <=
- 2024-11-22 Warszawa => Key Account Manager <=
- 2024-11-22 Warszawa => DevOps Specialist <=
- 2024-11-22 Kraków => IT Expert (Network Systems area) <=
- 2024-11-22 Warszawa => Infrastructure Automation Engineer <=
- 2024-11-22 Warszawa => Presales / Inżynier Wsparcia Technicznego IT <=