Kezdőoldal » Számítástechnika » Programozás » A mai gépek miért nem tudnak...

A mai gépek miért nem tudnak a másodperc tört része alatt 0..2147483647 értékig elszámolni?

Figyelt kérdés

Nekem fura az, hogy nem tudják ezt a műveletet a másodperc tört része alatt végrehajtani a mai gépek.

Bár Ryzen 7 vagy Core i7 esetén nem próbáltam, Ryzen 5 3600 gépen igen és meglepő a 3-4 másodperc, ami e művelethez kell.

Esetleg párhuzamosítani kellene processzormagonként az ilyen bonyolult műveleteket? (mondjuk ahhoz nem mintha értenék).

Miért lehetséges ez?



2022. okt. 2. 08:14
1 2 3 4 5
 31/41 anonim ***** válasza:
100%
Érdemes lenne szerintem több inc utasítást egymás után írni (2 hatvány számút) és 0-val hasonlítani. így csökkentve a ciklus overheadjét és ténylegesen az "elszámolást" mérni... persze ezzel is valami kó kompromisszumot kell kötni, mert nem lehet 2 milliárd inc utasítást írni, mert az lehet önnagában lassabb lesz betölteni a memóriába :)
2022. okt. 2. 20:13
Hasznos számodra ez a válasz?
 32/41 anonim ***** válasza:
84%

Előző vagyok... Az előző hozzászólásomban van egy kis bug.. ez 4 milliárdig számol..tehát az időt le kell osztani 2vel:)


#22-es: gyanítom, hogy a C(++) fordító a te kódodnál jobban optimalizál.

Bár én nem fordítottam most assemblyt, de nekem elég gyanús, hogy gyorsabb a C fordító által generált kód, mint a te inc-cmp-jnz kódod... az valahogy beépítetten tudja ismételni a ciklusmagot, gyanítom hasonlóan, mint ahogy írtam. Jó lenne kipróbálni, hogy ténylegesen mit is generál a fordító, de most lusta vagyok :)


Szóval ha van időd, sztem nézd meg és hasonlítsd össze a te assembly kódoddal.

2022. okt. 2. 20:30
Hasznos számodra ez a válasz?
 33/41 anonim ***** válasza:
88%

Hát nézzük...

1 GHz az egymilliárd órajelciklus egy másodperc alatt. Ez első hangzásra nagyon soknak tűnhet... de ha az ember kicsit képben van, hogy akár maga a processzor, akár alacsonyabb szinteken a programozás hogyan működik, akkor tudni fogja, hogy azért annyira nem szép a helyzet.

Az az egymilliárd az elemi műveletként értendő. A többszálúságról most ne beszéljünk, ahhoz eleve többszálúan kellene a programot megírni. (Már amelyik részét lehet.) Alapból egy program egyetlen szálat használ. Ami pedig egyetlen műveletnek tűnik, az igazából van, hogy nagyon sok elemi művelet egymásutánja. Az osztás például kifejezetten sok műveletet jelent. De az, hogy minden egyes cikluslefutáskor ellenőrizni kell a ciklusváltozó értékét, az is jópár elemi utasítás. Kétmilliárdszor kb. 10 műveletet lefuttatni egy 1 GHz-es procin pedig nagyjából 20 másodperc. Mert bár a mai processzorokat már semmiképp nem lehetne lassúnak nevezni, de kétmilliárd meg rohadt sok. És normális körülmények között elég ritkán van rá szükség, hogy ennyi nyers műveletet végezzünk másodpercenként. A programot megfelelően optimalizálva pedig az eredeti algoritmus nagyságrendekkel gyorsítható. Jó algoritmus mellett még egy nagyon gyenge gépből is bámualtosan sokat ki lehet hozni. Főleg, ha van egyéb hardveres segítségünk is. Mondjuk ha sikerül kihasználni, hogy már a tízéves gépekben is legalább két procimag van, illetve ha a grafikus processzort is sikerül munkára bírni, a sokszorosát ki lehet hozni annak, amire egy optimalizálatlan lépegetésnél képes a rendszer.

Mondjuk a 20. hozzászólásodban írt kódot két helyen is lehetne optimalizálni: szam := maxlongint; Hiszen végeredményben ezt valósítja meg. Az első ciklus meg el is hagyható, hiszen miután a végső értékét felvette, a változót egyszerűen nullázod.

De tekintve, hogy fel sem használod az értékét, a programodból mindent ki lehet törölni a két writeln kivételével. ;-)

2022. okt. 3. 11:10
Hasznos számodra ez a válasz?
 34/41 coopper ***** válasza:
100%

Szia.


Delphiben Konzolos alakalmazásban : [link]


Az általad irt kód 0.73 és 0.722 másodperc alatt futott le, egy Intel(R) Core(TM)2 Dou CPU E8400@ 3.00 GHz 2.99 GHz-es gépen, kép : [link]


Sok sikert. Üdv.

2022. okt. 3. 11:25
Hasznos számodra ez a válasz?
 35/41 anonim ***** válasza:
67%

33:


"2147483647 értékig elszámolni"


Egy másodpercnél kevesebb idő alatt. Ez az óhaj.


Már pedig ez bőven teljesíthető valamelyik regiszter inkrementálásával.

Az INC meg egy ciklusigényű művelet, ahogy a közeli JUMP is.

Szóval, a kérdésbeli kivánságnak egy P-II-esen is teljesülnie kell.


Teljesül is az, ha nem fut vele párhuzamosan semmi más.

Jut eszembe, a mai gépek órajele jellemzően 3 GHz, nem 1.

2022. okt. 3. 12:35
Hasznos számodra ez a válasz?
 36/41 anonim ***** válasza:
0%

"de nekem elég gyanús, hogy gyorsabb a C fordító által generált kód, mint a te inc-cmp-jnz kódod... "


LoL


"az valahogy beépítetten tudja ismételni a ciklusmagot, gyanítom hasonlóan, mint ahogy írtam."


Aha. És mikor végez feltétel ellenőrzést, amikor kedve szottyan?

2022. okt. 3. 14:25
Hasznos számodra ez a válasz?
 37/41 anonim ***** válasza:
0%
Talán úgy lehet gyorsítani a fentebbi asm kódon, hogy közvetlenül a számláló regisztert inkrementáltatja az ember és az overflow flag-et figyeli.
2022. okt. 3. 14:29
Hasznos számodra ez a válasz?
 38/41 anonim ***** válasza:
83%

"Aha. És mikor végez feltétel ellenőrzést, amikor kedve szottyan?"


Ennyire sötét vagy? Konstans számú ismétlés van, simán bele lehet tenni 16, 32, stb darab ciklusmagot és utána jumpolni vissza...


Nem én pontoztalak le, de látom mások is egyetértenek, mert 0%-on állsz.

2022. okt. 3. 23:57
Hasznos számodra ez a válasz?
 39/41 A kérdező kommentje:
Én nem pontoztam le senkit, érteni nem értek hozzá, csak foglalkoztatnak ilyen dolgok.
2022. okt. 4. 05:32
 40/41 anonim ***** válasza:
72%

"Nem én pontoztalak le, de látom mások is egyetértenek,"


Mivel értenek egyet, a marhasággal, amit ide nyomtál?

2022. okt. 4. 13:07
Hasznos számodra ez a válasz?
1 2 3 4 5

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!