-
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
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
Najnowsze wątki
- 2025-05-12 presja na aplikacje i blik
- 2025-05-12 czy znacie bardziej popierdolone sieci niż polskie?
- 2025-05-12 czy znacie bardziej popierdolone sieci niż polskie?
- 2025-05-11 Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- 2025-05-11 Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- 2025-05-11 obca rejestracja budzi agresję
- 2025-05-11 Po nie udanej próbie egzekucji: Nigeryjczyk, który chciał zabić Polaka, nie odpowie za atak
- 2025-05-10 Szczecin => Key Account Manager IT <=
- 2025-05-10 Rudno => Administrator sieci IT <=
- 2025-05-10 Wrocław => Controlling systems Consultant <=
- 2025-05-10 Rudno => IT network administrator <=
- 2025-05-10 Warszawa => Customer Service with Spanish + translation <=
- 2025-05-10 Warszawa => Senior Account Manager <=
- 2025-05-10 Trójmiasto => Head of Social Media <=
- 2025-05-10 Warszawa => C Programmer <=