Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

HyperThreading and C++ compiler

[es] :: C/C++ programiranje :: HyperThreading and C++ compiler

[ Pregleda: 3851 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mima2004

Član broj: 28822
Poruke: 16
199.243.244.*



Profil

icon HyperThreading and C++ compiler09.03.2005. u 18:34 - pre 232 meseci
Pozdrav,

da li neko zna kako da se prebrodi problem C++ aplikacije koja je kompajlirana u Microsoft Visual C++ i izvrsava se na masini koja podrzava HyperThreading.

Unapred hvala na odgovorima

p.s.
Ne zelim da iskljucim HyperThreading u BIOS-u.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net.



+6 Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 18:36 - pre 232 meseci
Kakav problem?
 
Odgovor na temu

Mima2004

Član broj: 28822
Poruke: 16
199.243.244.*



Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 19:13 - pre 232 meseci
Aplikacija koja radi bez problema na bilo kojoj masini - jednostavno blokira posle par minuta na masini gde je ukljucen Hyperthreading.
Dobila sam neke informacije da std library moze da prouzrokuje taj problem, sto mi je vrlo cudno.

Bilo koji predlog ili ideja?
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.ipact.nl.

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 19:32 - pre 232 meseci
Citat:
Aplikacija koja radi bez problema na bilo kojoj masini - jednostavno blokira posle par minuta na masini gde je ukljucen Hyperthreading.
Hyperthreading je za malo pa multiprocesiranje, kao da imaš dva procesora na mašini. Tada se niti (threads) stvarno istovremeno izvršavaju i to može da izazove da isplivaju greške koje se ne vide kada se program izvršava na jednoprocesorskoj mašini.

Standardna biblioteka pogotovo ne mora da bude re-entrantna odn. otporna na višenitni rad, jer često ispod haube koristi globalne promenljive koje mogu da se poremete ako im pristupa više procesa istovremeno.

Dakle, najverovatnije tvoj program koristi standardne biblioteke u okruženju za koje nisu predviđene. Pošalji kod da vidimo šta se tu krije.

f
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net.



+6 Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 19:42 - pre 232 meseci
Idi na project properties i nađi Code Generation opciju. Uključi neku od MT opcija.
 
Odgovor na temu

Mima2004

Član broj: 28822
Poruke: 16
199.243.244.*



Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 19:55 - pre 232 meseci
Kod je prevelik da bi se poslao u celini. Ali mogu da posaljem delove koji mozda mogu da pomognu.

typedef std::vector<std::string> testStringArray;

i onda nesto kao:
void testLP::Print(std::string* pBuf)
{
char szTemp[MJMAXSTRBUF];
sprintf(szTemp, "%s=", GetTerm().data());
(*pBuf) += szTemp;

testStringArray::iterator itLeaf;
for (itLeaf=m_patterns.begin(); itLeaf!=m_patterns.end(); ++itLeaf)
{
if (itLeaf!=m_patterns.begin())
(*pBuf) += "|";
sprintf(szTemp, "%s", itLeaf->data());
(*pBuf) += szTemp;
}
(*pBuf) += "\n";
}

Ne verujem da ovo moze nesto da pomogne - ali to je jedan od primera gde se koristi std biblioteka i koji mi izgleda "sumnjv"...

Ili mozda gresim.....
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net.



+6 Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 20:16 - pre 232 meseci
Pre svega dva pitanja:

1) Koristiš li uopšte višenitno programiranje u toj aplikaciji?
2) Koju verziju VC++ koristiš? VC6 je isporučivan sa verzijom standardne biblioteke koja je imala ozbiljnih bagova vezanih za višenitno programiranje.
 
Odgovor na temu

Mima2004

Član broj: 28822
Poruke: 16
199.243.244.*



Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 20:30 - pre 232 meseci
1) Da koristim visenitno programiranje.
2) Upravo tu verziju koju si pomenio da ima problema koristim.

Nisam koristila ni jedan drugi kompajler jer je program originalno uradjen u VS6.0, a kao sto sam pomenula, prilicno je velik.

Hvala na odgovorima, izgleda da cu ipak morati da uradim ono sto sam pokusavala da izbegnem...

Hvala
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net.



+6 Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 20:38 - pre 232 meseci
Čekaj, imaš link na Dinkumware sajtu da se taj problem reši:

http://www.dinkumware.com/vc_fixes.html

 
Odgovor na temu

Mima2004

Član broj: 28822
Poruke: 16
199.243.244.*



Profil

icon Re: HyperThreading and C++ compiler09.03.2005. u 21:34 - pre 232 meseci
Hvala,

pokusacu prvo da "ispratim" te savete...
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
195.252.86.*



Profil

icon Re: HyperThreading and C++ compiler10.03.2005. u 00:45 - pre 232 meseci
VC6 je neupotrebljiv bez Service Pack 5 za taj paket, pogotovu ako koristis stl i niti.
Instaliraj SP5 (ako nemas, rado cu ti ga snimiti, samo me cimni na PP) i prevedi projekat i verujem da ce sve biti OK (osim ako nemas neku tvoju gresku u programu ;) )

Povedi racuna o deljenim resursima. Zastiti ih sinhornizacionim objektima (semafori, critical sections, mutexi...)

Ako pravis MFC aplikaciju NIKAKO NEMOJ pozivati metode CWnd-baziranih objekata iz drugih threadova osim iz glavnog threada.

yooyo
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bos.east.verizon.net.



+6 Profil

icon Re: HyperThreading and C++ compiler10.03.2005. u 01:22 - pre 232 meseci
Aktuelan je SP6 :)

http://msdn.microsoft.com/vstu...pdates/sp/vs6/sp6/default.aspx

Ali ne znam da li uključuje rešenje za ovaj problem.

Možda bi vredelo instalirati STLPort?
 
Odgovor na temu

_Super_Ellite_Bug_
Novi Sad, konacno!!!

Član broj: 41318
Poruke: 145
*.nat-pool.nsad.sbb.co.yu.

Sajt: www.searchlores.org


Profil

icon Re: HyperThreading and C++ compiler11.03.2005. u 01:38 - pre 232 meseci
Mima, puno je debug-a pred tobom
Problem u tvom kodu je nedostatak sinhronizacija/e nitii.
Najprostije receno, u glavnom se manifestuje kada dve ili vise niti pozivaju istu funkciju istovremeno ili pristupaju istoj memorijskoj lokaciji istovemeno(citanje/pisanje, promenjive.....) ili kombinovano.
Razmotri koriscenje volatile pointera.
Za prvu pomoc(prilicno je prljavo, oprez) mozes da koristis SetProcessAffinityMask(/*params*/)
http://msdn.microsoft.com/libr...ase/setprocessaffinitymask.asp


Happy hacking.
ISO/IEC JTC1/SC22/WG14-ISO/IEC 9899:1999
 
Odgovor na temu

mipko

Član broj: 11015
Poruke: 109
*.sbb.co.yu.



Profil

icon Re: HyperThreading and C++ compiler15.03.2005. u 11:29 - pre 232 meseci
Code:

void testLP::Print(std::string* pBuf)
{
char szTemp[MJMAXSTRBUF];
sprintf(szTemp, "%s=", GetTerm().data());
(*pBuf) += szTemp;

testStringArray::iterator itLeaf;
for (itLeaf=m_patterns.begin(); itLeaf!=m_patterns.end(); ++itLeaf)
{
if (itLeaf!=m_patterns.begin())
(*pBuf) += "|";
sprintf(szTemp, "%s", itLeaf->data());
(*pBuf) += szTemp;
}
(*pBuf) += "\n";
}


Ovaj kod koji si napisala nije thread safe a to nema veze ni sa kompajlerom niti sa bilo cime drugim.
Naime, koliko vidim tu se koriste sleddece promenljive koje nisu lokalne za tvoju metodu testLP:

1. pBuf
2. m_patterns

zatim metoda GetTerm() takodje vraca nesto sto je pretpostavljam std::string. Po svoj prilici ni ona ti nije thread safe.

Za pocetak prodji kroz kod i guarduj sve delove koda koji mogu da budu koristeni iz vise threadova, nekim synchro objektima.

pozdrav
Mipko
 
Odgovor na temu

[es] :: C/C++ programiranje :: HyperThreading and C++ compiler

[ Pregleda: 3851 | Odgovora: 13 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.