Grzegorz Podgórski
Guest
Mon Mar 22, 2004 8:37 pm
Witam,
Czytajac port $37C (dane z EPP) zauwazylem, ze odczyt bajtu (rozkaz in al,
dx) wykonuje sie troche ponad 1us (sprawdzone na p90 i celeronie 433), co
daje transfer ok 600-700KB/s, tymczasem wyczytalem na
http://www.beyondlogic.org/ ze w tym trybie sa osiagalne transfery do 2MB/s.
Tryb portu jest ustawiony na 1.7 (nie uzywam linii Wait, na ktora wystawiam
caly czas stan wysoki). Probowalem czytac "hurtem" po cztery bajty (in
eax,dx), co trwalo cztery razy dluzej i nic nowego nie wnioslo. Do portu
bede podlaczal prosta przystawke i tryb ECP z kompresja i DMA bedzie tu zbyt
skomplikowany.
Jak to przyspieszyc o ile sie wogole da? A jak sie nie da to dlaczego?
pozdr,
Grzesiek
neuron
Guest
Mon Mar 22, 2004 10:56 pm
Jesli jest to jak przypuszczam program dla windy to problem lezy raczej
w przyznamiu twojej aplikacji ogolnego czasu na jej realizacje. Zakladam
(zakladam bo nie wiem i chyba nikt nie wie) ze na p90 czas timera systemu
(czyli czas co jaki do jadra systemu kierowane jest przerwanie BEZWARUNKOWO
konczace wykonanie bierzacego procesu
i przekazanie sterowania do jadra) wynosi 1us.Zalozmy ze w systemie jest
aktualnie 100
procesow (na komputerze na ktorym pisze ten post biega wlasnie 178 watkow )
i kazdy z nich ma rowny priorytet - co nigdy sie nie zdarza - to twoje
zadanie byloby
przerywane co 90us i realizowane przez 10us . W rzecywistosci przydzial
czasu jest
nierowny bo system kolejkuje watki do wykonania dajac sobie bezwzgledne
pierwszenstwo.
Tak wiec na 1 sekunde pracy twojego programu na transmisje masz okolo 0,01
sekundy
Dlatego jedynym sposobem jest obsluga za posrednictwem kanalu dma gdzie
sterownk
zarejestrowany na niskim poziomie i uprzywilejowany w systemie przepisuje
dane bezposrednio do pamieci.
pzdr wojtek
----------------------------------------------------------------------------
-------
GolemSLR - system licząco rejestrujący.
Nowy wymiar systemów SCADA
www.neuron.com.pl
Grzegorz Podgórski
Guest
Tue Mar 23, 2004 2:49 am
Quote:
Jesli jest to jak przypuszczam program dla windy to problem lezy raczej
w przyznamiu twojej aplikacji ogolnego czasu na jej realizacje. Zakladam
(zakladam bo nie wiem i chyba nikt nie wie) ze na p90 czas timera systemu
(czyli czas co jaki do jadra systemu kierowane jest przerwanie
BEZWARUNKOWO
konczace wykonanie bierzacego procesu
i przekazanie sterowania do jadra) wynosi 1us.
Dzieki za odpowiedz. Zeby nie walczyc z problemami, o ktorych pisales,
program powstal pod dosa. Probowalem w trybie rzeczywistym i w dpmi i w obu
przypadkach to samo - rozkaz in al, dx "zawiesza" program na okolo 1us.
Pomiaru czasu dokonywalem odczytujac rejestr rdtsc przed i po wykonaniu tej
instrukcji - z roznicy wychodzilo mi cos kolo 620 taktow dla kompa celeron
433, 620/433 daje 1.4us. Gdy czytam bajt z portu EPP to na wyjsciu
DataStrobe pojawia sie impuls, ktory jest mi potrzebny - dlatego zalezy mi
na tym trybie. Ale zaczynam powoli kombinowac z ECP i DMA.
pozdr,
Grzesiek
Paweł
Guest
Tue Mar 23, 2004 2:56 am
Quote:
Jak to przyspieszyc o ile sie wogole da? A jak sie nie da to dlaczego?
Zapewne port jest czytany przez magistralę ISA. Czas odczytu wynika z jej
taktowania.
Jeśli dobrze pamiętam to trochę szybszy jest tryb ECP.
Paweł
jerry1111
Guest
Tue Mar 23, 2004 7:18 am
On Mon, 22 Mar 2004 19:56:09 +0100, "Paweł" <pawelr@elsat.com.pl>
wrote:
Quote:
Jak to przyspieszyc o ile sie wogole da? A jak sie nie da to dlaczego?
Zapewne port jest czytany przez magistralę ISA. Czas odczytu wynika z jej
taktowania.
Jeśli dobrze pamiętam to trochę szybszy jest tryb ECP.
Raczej nie. Jak siegam pamiecia, to tryb EPP wystawia po prostu WAIT
na szyne i spokojnie robi swoje - blokujac calego kompa.
Dopiero ECP jest bardziej przyjazne i nie zatrzymuje wszystkiego.
--
Jerry
neuron
Guest
Tue Mar 23, 2004 10:04 pm
Zeby nie walczyc z problemami, o ktorych pisales,
Quote:
program powstal pod dosa. Probowalem w trybie rzeczywistym i w dpmi i w
obu
przypadkach to samo - rozkaz in al, dx "zawiesza" program na okolo 1us.
tak ale pamietaj ze magistrala do ktorej podlaczony jest LPT nie jest
taktowana zegarem procesora. Taktowanie magistrali to w zaleznosci od
chipsetu 8-15 MHz .Ty wystawiasz
rozkaz a sterownik magistrali blokuje program ( w dosie) na conajmniej jeden
takt
magistrali . Jesli masz np zegar procka 90MHz to cykl rozkazowy bedzie
realizowany
z czestotliwoscia 45MHz (fx/2) a magistrala np 12Mhz czyli ok 2-3 cykle
rozkazowe procek czekac bedzie na obsluge magistrali
pzdr wojtek
--
----------------------------------------------------------------------------
-------
GolemSLR - system licząco rejestrujący.
Nowy wymiar systemów SCADA
www.neuron.com.pl