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

razlika u brzini izvrsavanja konzolne i MFC aplikacije!?

[es] :: C/C++ programiranje :: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?

[ Pregleda: 3423 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Marko-
Novi Sad

Član broj: 144097
Poruke: 3
*.ns.ac.yu.



Profil

icon razlika u brzini izvrsavanja konzolne i MFC aplikacije!?03.05.2007. u 19:31 - pre 206 meseci
Problem je sledeci: u fazi pisanja algoritamskih delova i testiranja algoritama radio sam u konzolnoj aplikaciji.
Nakon toga sam krenuo da pravim jednostavan GUI u koji sam planirao da sve to upakujem. GUI je Dialogue based i oslanja se na MFC. Ubacio sam klase koje sam koristio u konzolnoj aplikaciji i sve lepo doterao i kompajlirao medjutim kada startujem release verziju MFC aplikacije algoritmi rade nekoliko puta sporije od release verzije konzolne aplikacije, a radi se o potpuno istom kodu.
Konkretno, rad se jako usporava u klasi koja formira vektor vektora i gde pomocu iteratora pristupam pojedinim clanovima vektora (opet ponavljam da potpuno isti kod radi daleko brze u konzolnoj verziji aplikacije).
U konzoli sam koristio samo main thread, a u MFC aplikaciji sam napravio dodatne threadove, ali kao sto kazem sve potpuno ispravno radi i bez greske samo puno sporije.

Ranije sam naisao na slican problem prilikom upotrebe vektora u MFC aplikacijama, ali sam u toj situaciji presao na dinamicke i staticke nizove. U ovoj situaciji takav prelazak smatram suvise komplikovanim i nezahvalnim pa bih zeleo da zadrzim upotrebu vektora.

Ima li neko ideja sta moze biti problem?
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.hsd1.ca.comcast.net.



+1001 Profil

icon Re: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?04.05.2007. u 07:05 - pre 206 meseci
GUI aplikacija po definiciji ne moze da bude brza od konzolne, prosto jer osim algoritma opsluzuje i GUI.

Ako, medjutim, mislis na sam kod algoritma ("faceless" C++) koji se sporije izvrsava, (ako sam dobro
razumeo koristis STL std::vector) problem moze da bude spora specijalizacija templata.

Imao sam slican problem kad sam pisao template za aligned alokaciju za pointere bilo kog prostog
tipa promenljive - kod se izvrsavao jedno 4X sporije, iako je bio maksimalno prost.

VisualStudio 8 (mozda i 7) ima daleko brzu specijalizaciju templata nego Visual Studio 6.

Detalje sigurno znaju Dragi Tata i ReljaM - ako ih nema a objasnjenje ne stigne ni sa drugih strana,
sibni im PP ili e-mail.
 
Odgovor na temu

Marko-
Novi Sad

Član broj: 144097
Poruke: 3
*.dynamic.sbb.co.yu.



Profil

icon Re: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?04.05.2007. u 07:52 - pre 206 meseci
GUI je jednostavan = jedan prozor, dva dugmeta i tri check boxa. Takodje GUI kada se pokrenu algoritmi izvrsava samo svoje postojanje i nikakve dodatne obrade.
Ipak pokusao sam i maksimalno da osiromasim GUI bas iz razloga da vidim kolika je brzina golog algoritama (umesto izbacivanja vise rezultata i vizuelnog prikaza u prozoru samo sam u petlju stavio brojac ciji sam sadrzaj ispisivao) i izvrsavanje je bilo jednako sporo cak i vise od 4 puta sporije (stavio sam i tajmere da bi izmerio vreme izvrsavanja iteracije algoritma u konzoli i MFC aplikaciji i razlika je ogromna 5-6 puta, znaci konzolno izvrsavanje je 5-6 puta brze).
Koristio sam std::vector i u konzolnoj i MFC aplikaciji i identican kod algoritma.
Koristim Visual Studio 2005 tj. VS8.
 
Odgovor na temu

tupito
Vladan Milivojevic
Beograd

Član broj: 55195
Poruke: 54
212.200.177.*



Profil

icon Re: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?04.05.2007. u 13:41 - pre 206 meseci
Kako upravljas sa nitima ? Nejverovatnije ti je problem sto ostale niti ti uzimaju suvise procesorskog vremena radnom thread-u, probaj sa samo jednom niti pa onda izmeri vreme. Evo ti primer upravljanja thread pool-om u MFC: http://www.codeproject.com/threads/work_queue.asp

Sto se tice STL-a probaj neki drugi sem fabrickog, recimo STLPort, mada ti je najbolje da nadjes perfomance kriticne delove koda i iz njih izbacis koriscenje STL-a.
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?04.05.2007. u 15:14 - pre 206 meseci
GUI sam po sebi ne bi trebalo da ima tolikog uticaja na performanse.

Možeš li da nam pokažeš project settings za kompajler u oba slučaja? Idi na Project Properties, C++, Command Line i iskopiraj šta tamo piše.

Inače, VC++ 2005 ima čudnu osobinu da koristi čekirane iteratore i u release verziji što itekako utiče na performanse: http://www.codeproject.com/vcpp/stl/checkediterators.asp

Međutim, ti iteratori su čekirani i u konzolnim aplikacijama, tako da ne vidim vezu.
 
Odgovor na temu

Marko-
Novi Sad

Član broj: 144097
Poruke: 3
*.dynamic.sbb.co.yu.



Profil

icon Re: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?05.05.2007. u 11:58 - pre 206 meseci
Uspeh! :)

Da se zahvalim Dragom Tati :) na predlogu.

Dakle uporedio sam Command Line u konzolnoj i MFC aplikaciji i ovako su izgledali:

- konzolna aplikacija:
/O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_AFXDLL" /FD /EHsc /MD /Yu"stdafx.h" /Fp"Release\expvision.pch" /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt

- mfc aplikacija:
/O2 /GL /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_AFXDLL" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MDd /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /TP /errorReport:prompt


Iako sam i ranije uporedjivao opcije u Properties nisam pogledao Command Line, a sad mi je jasno da je to najbrzi i najbolji nacin da se uoce razlike u podesavanjima.
Podesio sam mfc aplikaciju da ima identican Command Line kao konzolna aplikacija i onda je sve proradilo normalnom brzinom. Metodom eliminacije shvatio sam da je problem bio u opciji Runtime Library: /MDd koja je ukljucivala nekakav Debug i u release verziji mfc aplikacije sto je znacajno usporavalo rad (neverovatno je da nisam dosao do tog zakljucka ranije i da sam prevideo tu opciju).

Zanima me cemu sluze ostale opcije koje sam promenio (one nisu imale uticaja na brzinu izvrsavanja): /GL, Precompiled Header (/Yu) i Program Database (/Zi)?
 
Odgovor na temu

[es] :: C/C++ programiranje :: razlika u brzini izvrsavanja konzolne i MFC aplikacije!?

[ Pregleda: 3423 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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