Autor Wątek: Procesory dwurdzeniowe  (Przeczytany 2994 razy)

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 15:03:19
Jak pisać programy na takie cuda? Jeśli się nie mylę, to chodzi o 2 wątki, nie? A co gdy procesor ma mniej jąder niż programista wątków(lub odwrotnie)?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kuba D.

  • Użytkownik

# Listopad 16, 2009, 15:14:18
Zainteresuj się OpenMP ;)

Offline Liosan

  • Redaktor

# Listopad 16, 2009, 15:14:25
A co gdy procesor ma mniej jąder niż programista wątków(lub odwrotnie)?
:D No, jak procesor ma tylko jeden wątek, to trzeba kontekst przełączać sprytnie :D

A tak na serio, to tak - chodzi o wątki :) Jednym wątkiem nie wykorzystasz więcej niż jednego rdzenia. Jeśli masz więcej wątków niż jest rdzeni, to system operacyjny będzie przełączał procesor pomiędzy nimi. To dość typowa sytuacja - we współczesnych OSach jest odpalonych naraz od groma procesów, a to przecież ten sam mechanizm - ale niekoniecznie pożądana akurat przy pisaniu gier. Często robi się jeden wątek główny + pulę wątków pomocniczych (workerów).

Liosan

Offline ShadowDancer

  • Redaktor

# Listopad 16, 2009, 15:18:47
Hmm, czyli coś w stylu wątek główny - grafkia, wątek poboczny - obliczenia?

Może wypowiedzieć się ktoś, kto ogarnia rynek procesorów - czy warto pisać na 2 wątki(tzn czy wiele procesorów je obsługuje - sam mam teraz c2d)?

No i jeśli procesor ma mniej jąder niż programista wątków, to spowolni to pracę?

st3tc

  • Gość
# Listopad 16, 2009, 15:25:38
Może lepiej pisz "rdzeni" bo
No i jeśli procesor ma mniej jąder niż programista (...)
się głupio czyta ;p

2 rdzenie to obecnie staroć. Weszły już procki z 6-cioma a na nowy rok amd planuje 12 rdzeni. Więc sam widzisz...
Wątek per zadanie (jeden grafika, drugi fizyka itp itd) średnio się sprawdza. Już lepiej jest rozbijać zadania na tyle rdzeni ile jest np wykorzystując OMP lub inne metody. Łatwiej się to pisze i łatwiej nad tym zapanować. Do tego profilowanie - żeby widzieć kiedy rdzenie się nudzą.
Takie mam zdanie :)
« Ostatnia zmiana: Listopad 16, 2009, 15:28:05 wysłana przez st3tc »

Offline Kuba D.

  • Użytkownik

# Listopad 16, 2009, 15:28:53
Ewentualny narzut ze stosowania np. OpenMP będzie niewielki na komputerze z jednym rdzeniem ale już na wielordzeniowych maszynkach zysk wydajności będzie duży. A teraz jest era wielordzeniowych procesorów.

st3tc

  • Gość
# Listopad 16, 2009, 15:31:48
Inna sprawa, że aby używać OMP to : albo płacimu dużo pieniążków MS-owi ;) (visual studio standard lub lepsze), za co notabene dostajemy i tak OMP2.0 (chyba nawet 2k10 jest zacofane), albo używamy znienawidzonego przez wielu GCC (w tym zdaje się i autora wątku ;) )- i mamy za darmo OMP3.0 (które spisuje się znakomicie zarówno na prockach z 1 rdzeniem jak i z wieloma)
« Ostatnia zmiana: Listopad 16, 2009, 15:33:21 wysłana przez st3tc »

st3tc

  • Gość
# Listopad 16, 2009, 15:37:23
Inna sprawa, że aby używać OMP to : albo płacimu dużo pieniążków MS-owi ;) (visual studio standard lub lepsze)
Wsparcie dla OpenMP jest w wersji Express.

st3tc

  • Gość
# Listopad 16, 2009, 15:38:23
Inna sprawa, że aby używać OMP to : albo płacimu dużo pieniążków MS-owi ;) (visual studio standard lub lepsze)
Wsparcie dla OpenMP jest w wersji Express.
A testowałeś ?. Która wersja Visuala ?.

st3tc

  • Gość
# Listopad 16, 2009, 15:40:12
Ewentualny narzut ze stosowania np. OpenMP będzie niewielki na komputerze z jednym rdzeniem ale już na wielordzeniowych maszynkach zysk wydajności będzie duży. A teraz jest era wielordzeniowych procesorów.

A dokładniej: narzut będzie zerowy ;)
#if REM_THREADING == REM_MULTITHREADING
#include <omp.h>
#else
#define omp_get_max_threads() 1
#define omp_get_thread_num() 0
#endif

st3tc

  • Gość
# Listopad 16, 2009, 15:43:36
Inna sprawa, że aby używać OMP to : albo płacimu dużo pieniążków MS-owi ;) (visual studio standard lub lepsze)
Wsparcie dla OpenMP jest w wersji Express.
A testowałeś ?. Która wersja Visuala ?.

Testowałem, w Visualu 2008 Express mam wsparcie dla OpenMP 2.0.

Offline Kuba D.

  • Użytkownik

# Listopad 16, 2009, 15:46:43
@therealremi
Co ma wspólnego z tym co ja mówiłem to co Ty pokazałeś w kodzie ? Bo jakoś nie mogę się doszukać związku  ::)

st3tc

  • Gość
# Listopad 16, 2009, 15:51:38
@therealremi
Co ma wspólnego z tym co ja mówiłem to co Ty pokazałeś w kodzie ? Bo jakoś nie mogę się doszukać związku  ::)

Instrukcje OpenMP wstrzykiwane są na etapie kompilacji. Nie ma OpenMP, nie ma w kodzie instrukcji OpenMP, nie ma narzutu.

st3tc

  • Gość
# Listopad 16, 2009, 15:54:11
Inna sprawa, że aby używać OMP to : albo płacimu dużo pieniążków MS-owi ;) (visual studio standard lub lepsze)
Wsparcie dla OpenMP jest w wersji Express.
A testowałeś ?. Która wersja Visuala ?.

Testowałem, w Visualu 2008 Express mam wsparcie dla OpenMP 2.0.

Express nie ma vcomp.lib. I nie wiem czy dociąganie go do niego jest legalne. Pewnie masz obok pełną wersję visuala albo sobie dociągnąłeś libka.
« Ostatnia zmiana: Listopad 16, 2009, 15:57:02 wysłana przez st3tc »

Offline Kuba D.

  • Użytkownik

# Listopad 16, 2009, 15:56:17
@therealremi
No dobra ale ja jako gracz nie będę przecież kompilował sobie gry. Mam komputer ( jako gracz ) z 4 rdzeniami a twórca z tylko jednym albo odwrotnie. No i jak teraz wygląda ta sytuacja ? ;)
« Ostatnia zmiana: Listopad 16, 2009, 16:07:52 wysłana przez Kuba D. »