» »

[C++] threading in random, dostop do rama

[C++] threading in random, dostop do rama

snow ::

1) Kako je s thread safety rand() funkcije v win32 in linux? Nekje sem bral da naj bi se uporabljala rand_r(unsigned int* seed) funkcija v threadingu, pa ne vem a to velja za linux only ali tudi za winse, ker je v pthreadih za win32 rand_r() definirana kot:
#define rand_r( _seed ) \
	( _seed == _seed? rand() : rand() )


Zakaj je to sploh to tak čudno definirano? Saj funkcija vedno vrne rand() ali pač?

Ok vem da lahko napišem svoje random funkcije - mogoče je še to najboljše za portabilnost ampak tak me zanima pač :)

2) Če imam več threadov in neko matriko in vsak thread pogosto dostpoa do nje... a je bolje da naredim vsakemu threadu raje eno kopijo te matrike? Nimam nič mutex lockov... torej se threadi med sabo najbrž blokirajo?

To je za enkrat vse :\

edit: dodal podvprašanje.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins
  • spremenilo: snow ()

Gundolf ::

Poglej si Boost-ov random, če ne drugega lahko v vsakem threadu narediš svoj generator. Svojega pisat je pri obstoju tako kvalitetnih knjižnic za večino primerov brezveze.

Če ti več threadov le bere matriko potem ne rabijo več kot ene kopije in tudi zaklepati je ni treba. Če pa pišejo po njej, potem pa itak ne more imeti vsak thread svoje kopije.

snow ::

Aha. Ampak če maš pa HT pa velik dostopaš do memorije z dvema threadoma, je težko da boš kaj dosti profitiral a ne, ker mata oba proca skupen cache. Ok kako je pa v večprocesorski in večcore procesorjih?
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

Gundolf ::

Če maš en procesor pa več threadov pol boš profitiral kvečjemu če obdržiš lokalnost podatkov, se pravi da threadi berejo iste dele pomnilnika. Pri večprocesorskih je pa mogoče isto a ima vsak proc kopija al pa isti kos pomnilnika. Vsak bo dal podatke v svoj cache in ker po njem ne bo pisal, ne bo problemov zaradi razveljavlja cachea drugih procesorjev. Nisem pa siguren da je res popolnoma tako. Pri več procesorjih imaš kvečjemu počasnejše delovanje, če želijo brskat po istem delu pomnilnika.

64202 ::

rand() je na linux per-process, torej ni ts. na winsih pa uporablja per-thread prostor, zato rand_r na winsih naceloma ni potreben...
I am NaN, I am a free man!

popec ::

> #define rand_r( _seed ) \
> ( _seed == _seed? rand() : rand() )

Na prvi pogled bi rekel, da je to zato, da ne bi mogel napisati:

 
void foo();

int r = rand_r( foo() );


... ker bi ti ze prevajalnik zajokal. rand_r je le makro.

Nisem pa probal, morda se motim.
h$^

Zgodovina sprememb…

  • spremenilo: popec ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vprašanje v zvezi z rand() funkcijo

Oddelek: Programiranje
494920 (4110) fireice
»

AMD izdal kodo najnovejših gonilnikov

Oddelek: Novice / Ostala programska oprema
224242 (2465) CCfly
»

[C] random do poljubne številke

Oddelek: Programiranje
172086 (1753) napsy
»

[C] Naključni generator velikih števil?

Oddelek: Programiranje
61085 (963) Alec999
»

problem prijavljanja v account

Oddelek: Operacijski sistemi
201363 (1221) ql000

Več podobnih tem