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

Upisivanje u fajl

[es] :: C/C++ programiranje :: Upisivanje u fajl

[ Pregleda: 3085 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Upisivanje u fajl29.06.2004. u 10:26 - pre 241 meseci
Prije nego sto postavim pitanje napisacu specifikaciju hardwera imam Win2000 i PC 2GHz/512MB i Maxtor Atlas 15k HDD. Moj problem je sledeci:
Pisem program(VC++) koji treba da ucitava iz kamere 2000Slika/sec (slika je 16kB) i da ih snimi u binarnom formatu u fajl. Koristim Thread sa najvisim prioritetom za ucitavanje i drugi sa nizim za snimanje u fajl. Program u principu radi ali brzina kojom pisem je manja od brzine kojom ucitavam slike te nakon odredjenog vremena pocinjem da gubim slike. System monitor mi pokazuje da aplikacija koristi ispod 50% CPU vremena!!! a primijetio sam da mi se HD cuje povremeno(5-6 sec) iako koristim fflush i snimam u fajl paket od 8 ili 16 slika.Ako prioritet pisanja podignem na real Time onda uspijevam snimiti 10% slika.
Moje je pitanje da li je neko vec imao slican problem sa upisivanjem u fajl ,da li postoji nacin da ubrzam upisivanje?
Unaprijed se zahvaljujem.
 
Odgovor na temu

DDMM
Dejan D. M. Milosavljevic
Danguba
Gajba, ali ne piva.

Član broj: 2544
Poruke: 89
*.sbb.co.yu

Sajt: www.ddmrm.com


Profil

icon Re: Upisivanje u fajl29.06.2004. u 11:54 - pre 241 meseci
Ako nije tajna zasto ti to treba?
Mislim zasto ti treba 2000 slika/s?
Gde to ima primenu?

X
 
Odgovor na temu

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Re: Upisivanje u fajl29.06.2004. u 13:36 - pre 241 meseci
Primjena je u analizi/kontroli dinamickih procesa npr. laserskog zavarivanja.
 
Odgovor na temu

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

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Upisivanje u fajl29.06.2004. u 13:42 - pre 241 meseci
Jesi li siguran da zavarivanje, makar bilo i lasersko, ima toliku dinamiku?


f
 
Odgovor na temu

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Re: Upisivanje u fajl29.06.2004. u 14:26 - pre 241 meseci
Sto je veca brzina to je manja greska koja se moze da otkrije,a brzina od 2KHz postaje "za sada" standard.
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.client.comcast.net



+1001 Profil

icon Re: Upisivanje u fajl29.06.2004. u 15:46 - pre 241 meseci
Par misli na temu:

1) Broj slika u sekundi ti je ogroman, skoro 200 puta veci nego sto se to regularno
radi kod video capture, gde se snima 25-30 frames per second. To je glavni uzrok
tvojih problema, zbog kojih ne bi trebalo da ocekujes da ti bilo koja dosetka donese
veliko poboljsanje.

2) Ako ikako mozes, smanji rezoluciju slike na nesto podnosljivo za gledanje. Svako
smanjenje rezolucije moze da znaci grdnu ustedu u protoku podataka.

3) Ako to vec nisi uradio, setuj iz Control Panel-a svoj HDD da podrzava tzv. DMA mode
(negde se to zove 'write cache enable' ili slicno). To moze da ubrza upisivanje na disk.
Ne bi bilo lose da razmotris opciju koriscenja SCSI diskova, jer je to verovatno faktor
koji bi ti doneo najvece poboljsanje.

4) Ako imas vise kamera, mozda bi mogao da organizujes simultano snimanje vise
sinhronizovanih kamera na cetiri razlicite masine, pri cemu bi iz svake uzimao svaki
cetvrti frame. Ostaje problem sinhronizacije snimaka - morao bi da koristis neki time
stamp mehanizam.

Ako se setim jos necega, dopisacu kasnije.
 
Odgovor na temu

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Re: Upisivanje u fajl29.06.2004. u 17:19 - pre 241 meseci
Milanche hvala na sugestijama,vec nedelju dana se vrtim u krug na kraju sam kupio novi SCSI HD 15K ( 'write cashe' je omoguceno).Teoretski meni je potrebno 32MB/s
a HD Benchmark pokazuje 70MB.
Od mene traze tu rezoluciju a plus proizvodjac kartice/kamere kaze da sa 128x128 moze ici i do 2200 slika/sec.
Meni je potrebna Slika 128*128 Pixela uspijevam snimati 128*100 i tad je razlika izmedju preuzete slike i snimljene 1 do 2 paketa konstantno a kad povecam rezoluciju strmoglavo raste.Ne razumijem zbog cega mi system monitor pokazuje samo 50% zauzeca procesora a ne odradjuje fflush. Kad zaustavim snimanje ,poslije jos pola minuta snima na HD,sto znaci da u stvari nije snimao na HD nego samo negdje baferovao.
Da li je System Monitor pouzdan?Da li postoji nekakv program koji realnije prikazuje stanje systema?
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.3.133.130.ptr.us.xo.net



+1001 Profil

icon Re: Upisivanje u fajl29.06.2004. u 18:27 - pre 241 meseci
Ne znam mnogo o SystemMonitoru, osim ono nominalno. Pre ce biti da je rec o kernelu
koji ima svoju politiku dodele ciklusa procesima.

Verovatno je dobra ideja da pogasis sve procese koji nisu neophodni, jer i dok nisi sam nista startovao oni kradu time slice (naprimer: casovnik u donjem desnom uglu na System Tray-u i slicno). Verovatno neces moci da pogasis bas sve, ali pokusaj dok ne vidis sta bas mora da ostane da radi osim tvoje aplikacije za snimanje. Kad sve pogasis,
ocekuj poboljsanje za jedno 10-20 %.

 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Upisivanje u fajl29.06.2004. u 18:35 - pre 241 meseci
To što je CPU samo 50% zauzet pokazuje da se dosta vremena troši za rad diska i da je u stvari to "usko grlo". Možda bi mogao malo da ubrzaš stvari ako bi koristio async I/O.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


+2 Profil

icon Re: Upisivanje u fajl29.06.2004. u 20:17 - pre 241 meseci
drasko, predlazem ti da prvo odradis neko interno baferovanje. Aplikacija bi trebalo da odvoji sto vise memorije moguce i da slike koje svlacis sa kamere trpas u bafer dok se ne napuni, kad se napuni, onda se nit koju recimo nazoves WriterThread probudi i u cugu ceo bafer strpa na kraj zeljenog fajla. Da ReaderThread ne bi cekala da WriterThread odradi posao predlazem da prosto imas dva bafera iste velicine i da u svakom trenutku jedan od njih uvek bude ReadBuffer, dok bi drugi bio WriteBuffer. Na ovaj nacin ReaderThread nit koja svlaci slike iz kamere pise u WriteBuffer, dok u isto vreme WriterThread iz ReadBuffer-a cita podatke i pise ih na kraj fajla.

Jasno je sta se ovim postize - smanjujes FileIO (konkretno mislim na pisanje na disk).

Za citanje sa kamere ne znam sta da ti kazem jer nisi dao bas puno informacija. Veza sa kamerom bi trebalo da bude opako brza da bi postigao zeljenu brzinu od 2000 Slika/sec sto otprilike znaci 2000 * 16 kB = 32000 kB/sec, dakle treba ti realna brzina od skoro 30 Mb/sec da bi (teorijski) mogao da ostvaris svoj cilj...

Neki ce garant prevrnuti ocima kad budu procitali moj zadnji predlog, ali sta da se radi... - Elem, predlazem da probas da stvar uradis na Linux ili nekoj UNIX platofmi. Posebno mislim na Linux sa 2.6 kernelom i GLIBC-om koji "zna" za NPTL. Iz svog licnog iskustva jedino sam na Windows-u vidjao da kada program ima puno I/O operacija CPU bude jaaaaako zauzet. Molim sve koji se ne slazu sa ovim zadnjim da ne komentarisu ovo uoste - ovo je moj licni predlog drasku. Ne obazirite se na njega. Naravno u nekoj drugoj diskusionoj grupi bi mogli ovo detaljno da ispitamo.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
66.228.70.*



+6 Profil

icon Re: Upisivanje u fajl29.06.2004. u 20:31 - pre 241 meseci
Ehm, Leko izgleda da nisi dobro pročitao:

Citat:
drasko:  System monitor mi pokazuje da aplikacija koristi ispod 50% CPU vremena!!!


a ti kukaš:

Citat:
leka: Iz svog licnog iskustva jedino sam na Windows-u vidjao da kada program ima puno I/O operacija CPU bude jaaaaako zauzet.


Problem nije što je CPU "jaaaaako" zauzet, već što je nedovoljno zauzet - a to se dešava zato što čeka na HDD.
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.231.216.81.gus.vf.siwnet.net

Sajt: dejan.lekic.org


+2 Profil

icon Re: Upisivanje u fajl29.06.2004. u 22:04 - pre 241 meseci
Okej, slazem se da sam to prevideo, ali se sada postavlja drugo pitanje - zasto je problem sto je ispod 50%!? To tako valjda i treba da bude!? :) Ovde procesor uopste ne treba da bude opterecen po svoj logici zato jer je citava stvar uglavnom tumbanje bajtova sa jednog mesta na drugo - dakle I/O.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

u_m
Urukalo Milan
PH

Član broj: 18631
Poruke: 889
*.wireless.org.yu

ICQ: 32554731
Sajt: https://milan.urukalo.com


Profil

icon Re: Upisivanje u fajl29.06.2004. u 22:31 - pre 241 meseci

Citat:
Kad zaustavim snimanje ,poslije jos pola minuta snima na HD,sto znaci da u stvari nije snimao na HD nego samo negdje baferovao.


aj ti iskljuci 'write cashe' , jer ovo je ocigledno posljedica toga, on trpa u memoriju fajlove. XP se inace strasno lose snalazi sa i/o, tu ga cak i win98 siba [u pitanju je licno iskustvo i moguce je da nema nikakve veze sa stvarnim cinjenicama].
#include <music.h>
#include <beer.h>
#include <girls.h>
main(){ run(partytime);}
---------
Moj licni sajt
Moj wap sajt--offline
 
Odgovor na temu

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Re: Upisivanje u fajl30.06.2004. u 08:28 - pre 241 meseci
leka , taj moj program upravo tako radi jedan Thread uzima slike(TIME_CRITICAL) i sa memcpy prebacuje u bafer, drugi (ABOVE_NORMAL) koji dijelove buffera dodaje u fajl.Citav program ima visoki prioritet .A 50% opterecenja CPU nije problem vec mi nije jasno zasto kad ima jos rezerve to ne koristi odnosno kako da ga na to primoram.Ocekivao sam da se disk javlja periodicno ali on se na pocetku javlja cesto da bi se sto vrijeme prolazi sve rijedje. Druga ne logicnost eksperementisao sam sa velicinama koje se u paketu upisuju na HD , prema specifikaciji HD pristup je 4-5mS kad upisujem 40 puta 4 ili 20 puta 8 slika to jest 2040kB brzi sam nego kad upisujem paket od 128 slika!?!
Win okruzenje je prvi zahtjev koji je postavljen i "o kome se ne diskutuje".
 
Odgovor na temu

milanche
San Francisco

Član broj: 2447
Poruke: 1200
*.client.comcast.net



+1001 Profil

icon Re: Upisivanje u fajl30.06.2004. u 15:55 - pre 241 meseci
Ako si brzi pri vecem broju kracih upisa nego pri manjem broju duzih upisa znaci samo
jedno: DMA mod nije aktivan. Ili disk nema tu opciju, ili je nisi aktivirao iz Control
Panel-a (kliknes na Disk Drive, pa onda Properties - jedan od tab-ova bi trebao da
ima neke check-box-ove za tako nesto).
 
Odgovor na temu

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Re: Upisivanje u fajl01.07.2004. u 11:38 - pre 241 meseci
Kod mene nema opcije za DMA,od svih mogucih opcija najbolje rezultate dobijam sa default :omogucen cash,omogucen sinhroni prenos i omoguceno nekakvo cekanje .
Probao sam da prioritet citave aplikacije dignem na nivo "visok" i tada je broj snimljenih slika na disk upola manji nego kad je prioritet "normalan" uz isti broj preuzetih slika.Sto znaci da nema dovoljno vremena za upisivanje a Task menager pokazuje pogresno CPU zauzece.
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



+3 Profil

icon Re: Upisivanje u fajl03.07.2004. u 00:06 - pre 241 meseci
Nemoj na silu, uzmi veci cekic.
Za logovanje podataka upotrebi dva identicna HDD-a (operativni sistem se nalazi na trecem HDD). Svaki po redu neparni paket slika append-uj fajlu sa prvog HDD. Analogno, svaki po redu parni paket slika append-uj fajlu sa drugog HDD. Optimalnu velicinu paketa odredi eksperimentalno. Podatke o eventualnim dropped frames pamti u memoriji; iste prebaci na jedan od HDD na kraju.
O_o
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



+3 Profil

icon Re: Upisivanje u fajl03.07.2004. u 01:17 - pre 241 meseci
Ipak nema potrebe za posebnim hardverom.
Pogledaj npr. nekomprimovan capture slike sa TV kartice - format slike je 720*576 , framerate je 25 slika u sekundi, colordepth je 3 bajta, znaci:
720 * 576 * 25 s^-1 * 3 B = 29,66 MBs^-1, sto je priblizno ono sto tebi treba. U ovom slucaju, usko grlo je PCI. HDD I/O radi bez problema.
Pogledaj npr. source capture softvera http://virtualvcr.sourceforge.net.
Nisam siguran, ali mislim da je capture drajver odgovoran za skladistenje podataka na HDD. Ovde mozes naci source za WDM video capture drajver za TV kartice sa BT8xx chipset-om: http://btwincap.sourceforge.net.
Mozda ce ti biti od koristi ovaj alat: File Monitor (<100kb download). Mozes ga naci na http://sysinternals.com. Pomocu njega mozes pratiti/logovati sve/filtrirane file system operacije.
O_o
 
Odgovor na temu

-zombie-
Tomica Jovanovic
freelance programmer
ni.ac.yu

Član broj: 4128
Poruke: 3448
195.252.85.*

Sajt: localhost


+5 Profil

icon Re: Upisivanje u fajl03.07.2004. u 07:13 - pre 241 meseci
u krajnjem slučaju, možeš malo da spakuješ te podatke pre upisivanja na disk..

znam da na prvi pogled deluje čudno, ali ako imaš "višak" procesorske snage, a "manjak" propusne moći diska, onda se potrudi da smanjiš količinu podataka koje upisuješ na disk, na uštrb nekoliko (već neiskorišćenih) procesorskih ciklusa..

zavisi kakvi su ti podaci, ali bi ti verovatno posao završili i jednostavni (brzi) algoritmi za kompresiju kao što su RLE, ili još bolje LZW (ili neki od srodnih: jednostavniji LZ77, zlib deflate..) koji je baš predviđen/idealan za pakovanje stream-a podataka.

aj, ako probaš, javi nam rezultate.. ;)

 
Odgovor na temu

drasko
Austrija

Član broj: 2908
Poruke: 16
*.arcs.ac.at



Profil

icon Re: Upisivanje u fajl05.07.2004. u 12:45 - pre 241 meseci
Cim probam javljam rezultate.
Pozdrav
 
Odgovor na temu

[es] :: C/C++ programiranje :: Upisivanje u fajl

[ Pregleda: 3085 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

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