Kezdőoldal » Számítástechnika » Programozás » Processzor: osztás, maradékos...

Processzor: osztás, maradékos osztás milyen bitműveletekre cserélhető le gyorsítási céllal?

Figyelt kérdés

Hogy a processzor minél gyorsabban hajtson végre két változó közti osztást és maradékos osztást, e két művelet milyen bitműveletekkel helyettesíthető?

"a / b" - csak ennyi, e két művelet sima és maradékos osztással.

Leírható e két művelet bitműveletekkel, aminek következtében sokkal gyorsabban hajtja végre a processzor?



jan. 11. 12:02
1 2 3
 1/27 anonim ***** válasza:
71%
A fordítóprogram lecseréli neked, szóval nem lesz gyorsabb ha te kézzel megírod. Nincs elemi osztás utasítás a processzorokban. Csak összeadás van, ha jól tudom.
jan. 11. 12:08
Hasznos számodra ez a válasz?
 2/27 A kérdező kommentje:
Régebben tapasztaltam, hogy - bizonyos mesterséges intelligenciától kapott tipp alapján - gyorsabb lett, ezért gondoltam: vannak rá módszerek. Azt is gondoltam hogy a fordító valamennyire kioptimalizálja, de lehet hogy jobb úgy a kódban megírni, ha ezt mégse tenné meg.
jan. 11. 12:23
 3/27 anonim ***** válasza:
78%

#1

Van "elemi" osztás müvelet. Legalábbis x86-on tuti: [link]


Kérdezö:

Esetleg tudsz olyanokkal trükközni, hogy ha tudod pl hogy mindíg csak kettes hatványokkal osztasz, akkor osztás helyett jó a right shift, maradékképzéshez meg csak maskolni kell.


Vagy ha floatokkal is dolgozol és az osztód mindíg konstans, akkor csinálhatsz olyat, hogy kiszámolod compile-time az osztó reciprokát és akkor azzal szorozhatsz. A szorzás meg gyorsabb lesz, mint ha osztanál.


Lényeg a lényeg, ha csak nem tudod valahogy leszükíteni az osztók-osztandók lehetséges értékeit, akkor valószínüleg nem fogsz tudni gyorsabb algoritmust írni, mint az x86 beépített osztó utasítása.


Érdemes lehet még elolvasni az ide vágó wiki cikket:

[link]

jan. 11. 12:43
Hasznos számodra ez a válasz?
 4/27 anonim ***** válasza:
30%

1. Olyan, hogy maradékos osztás, nincs. Nem létezik. Osztási maradék-képzés van csak.

2. Azt nem tudni, hogy milyen tipusú változókon szeretnéd elvégeztetni a műveletet. Integer, valós?

Ha történetesen integer, nem nagyobb a gépi szó hosszánál, és az osztó is integer, emellett a kettő valamely hatványa (netán maga a hatványalap), akkor lehet biteltolást alkalmazni, ami gyorsabb a natív osztásnál.

Az egyes azt írja, hogy nincs elemi osztás a processzorokban. Ez téves infó, a mai, PC-be való processzorokban már vannak szorzó- és osztóművek.

A kis teljesítményűekben viszont gyakori, hogy még ma sincs. Ennek az az oka, hogy nem éri meg, mert sokkal drágábbá tenné a processzort és úgy lenne bennük a szorzó és osztómű, hogy a legtöbb esetben nem lennének (ki)használva.

De, mivel a kis teljesítményű processzorokat jellemzően képzett programozók programozzák, így a szorzás/osztás/kivonás műveleteket meg tudják valósítani más úton (addíció, komplemens képzés, stb.) is.

Abban már abszolút igaza van az első válaszolónak, hogy a legtöbb mai fordítóprogram nagyon okos és úgy negyed százaléknyi esetet kivéve, lehetetlen a modern, korszerű fordítókénál jobb, gyorsabb megoldást kreálni.

jan. 11. 12:44
Hasznos számodra ez a válasz?
 5/27 A kérdező kommentje:

Nagyon köszönöm a válaszokat.

Integer változók, osztó 10. Tehát sajnos nem 2 hatványa.

jan. 11. 12:57
 6/27 anonim ***** válasza:
18%
Akkor léptetni lehet.
jan. 11. 13:00
Hasznos számodra ez a válasz?
 7/27 anonim ***** válasza:
80%

"Olyan, hogy maradékos osztás, nincs." -> De létezik. Pl. az Intel processzorokban is létező fogalom. "divide with remainder" néven szerepel a legtöbb dokumentációban, és arra utal, hogy egy műveletben megkapjuk a hányadost és a maradékot is. Az utasítást az utasításkészletben a DIV r/m64 fejezetben érdemes keresni.


És úgy működik, hogy a hányadost az RAX és a maradékot az RDX regiszterben adja vissza.

jan. 11. 13:25
Hasznos számodra ez a válasz?
 8/27 anonim ***** válasza:
90%

Igazán azt látni kéne, hozzá, hogy milyen processzorod van, és milyen környezetben kell az osztást elvégezni.


Általában ha a prociban van egész osztás és beleférsz a szóhosszba, meg abba a tartományban amibe a proci megengedi az osztást akkor a leggyorsabb az szokott lenni ha a procira bízod.


Ha nincs osztás a prociban (ami elég sok prociban nincs, még azok közül is, amelyek amúgy pl. szorozni tudnak), vagy olyan a számok nagyságrendje, hogy nem tud vele a proci mit kezdeni akkor van több osztási algoritmus. Ilyenkor fel kell ezeket túrni és meg kell nézni, hogy a Te környezetedben (proci, op.rendszer, számok nagyságrendje, szóhosszak stb.) melyik lesz a nyerő megoldás. Egészen sok időt el lehet szúrni azzal, mire az ember eljut odáig, hogy jó osztó programja legyen.

jan. 11. 13:33
Hasznos számodra ez a válasz?
 9/27 T. Feri ***** válasza:
79%
Nem írtad, milyen programozási nyelvet használsz. De mondjuk C-ben az egész számok közötti osztás maradékos osztás, a lebegőpontos pedig lebegőpontos. C-ben külön van maradék képzés művelet(%). A nullával való osztástól elszáll a program, hacsak nem kezeled a kivételeket. Az assembler, vagy gép utasításoknál az egész osztás egyszerre adja a hányadost, és a maradékot, kivéve az mmx segédprocesszor utasításait. Az osztást nem lehet gyorsítani, legfeljebb a 2 hatványaival osztást jobbra léptetéssel (a /= 16 helyett a >>= 4). Bár a példában szereplő konstanssal osztást az optimalizáló is felismeri, és egyszerűsíti.
jan. 11. 14:10
Hasznos számodra ez a válasz?
 10/27 T. Feri ***** válasza:
79%
Érdekességként, az előjeles (kettes komplemens), és az előjel nélküli számokkal való osztás különböző eredményeket ad. Létezik a kombinált szorzás, osztás műbelet is, de az magas szintű nyelvből nem érhető el. Ebben a szorzás eredménye kétszeres méretben tárolódik, majd az osztás után redukálja vissza. Így a szorzás nem tud túlcsordulást (és kivételt) okozni.
jan. 11. 14:20
Hasznos számodra ez a válasz?
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, 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!