A mai gépek miért nem tudnak a másodperc tört része alatt 0..2147483647 értékig elszámolni?
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?
"Azért egy raspberry pi-t nem kellene egy modern i7-es procihoz hasonlítani. Míg az első gép komplette 35 dolcsi, a második proci magában 450..."
Megemlítve lett, nem hasonlítva.
A kérdést nem a Raspberry-hasonlattal indítottam.
Ryzen 5 3600 esetén kb. 4 mp.
"Nincsen semmilyen "tetűlassú" algoritmus, Egyszerű ciklus (amelyben semmi sem történik) akár Pascal-ban akár C-ben."
Ez már tetű lassú.
Értem, tehát egy sima bármilyen ciklus, amely 0-tól megadott értékig elszámol, önmagában tetűlassú.
Jó újat tanulni.
A ciklusok a programozási nyelvek elemi részei és én azt gondoltam: gyors. Most "kiderült" számomra, hogy "ez már önmagában tetűlassú".
Hmm, érdekes.
Itt a leggyorsabb megoldás:
xor EAX,EAX
loop:
inc EAX
jmp loop
Minden műveletnek van egy processzorigénye. Az üres ciklusnak rögtön 3: ellenőrizni a feltételt, ugrani a cikuls elejére, majd növelni a ciklusváltozót.
Minden ciklus lassú, mert újra meg újra el kell vézegni egy műveletsort. Ha 2 ciklus van egymásban, az szó szerint tetűlassú, ha 3 az már maga a halál... Ha n, akkor kvázi game over. Keress rá az n királynő problémára. Mi egyetemen ennek a brute force megoldó algoritmusával (ami n ciklus egyben) benchmarkoltunk P4-eket és korabeli modern laptopot. A P4 megfeküdt tőle, a laptopnak is sok-sok percbe került eredményre jutni.
Eszembe se jutott kiiratni.
Számomra ez "egy érdekesség", a gyakorlati hasznát nem tudom.
Az egymásbaágyazott ciklusok azt gondoltam azért lassúak, mert sokszorosan hajtódik végre. Például az "egyszerű rendezés", ami két sima egymásba ágyazott for ciklus.
Segítesz hogy hol hibáztam?
{$optimization level3}
{mondjuk optimalizacio nelkul is ugyanaz van}
program szamolaspelda;
var
szam : longint;
begin
szam:=0;
while (szam < maxlongint) do
inc(szam);
writeln('while vege');
for szam := 0 to maxlongint do
begin
end;
writeln('for ciklus vege');
end.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!