Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: GloGlo 06. 08. 2022, 04:07:32

Název: Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: GloGlo 06. 08. 2022, 04:07:32
Kód: [Vybrat]
import itertools as it
x = [1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0]
print (len([p for p in it.product(x, repeat=10)]))

Zkoušel jsem to několikrát na 16 GB RAM, ale vždycky to spadlo :D
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl? :D
Přispěvatel: kvr kvr 06. 08. 2022, 07:26:04
720 GB + něco málo.  Dvouprvkový tuple zabere 56 B, zaokrouhleno na 64 B a celé pole bude mít 8 B na prvek.  Samotné hodnoty budou sdílené.

Za předpokladu, že ta velikost zahrnuje i alokační overhead, jinak bude dalších 16 B navíc na každý tuple.  Navíc může celý seznam růst po skocích, což by mohlo jít až na 128 GB na výsledné pole, místo 80 GB.
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl? :D
Přispěvatel: kvr kvr 06. 08. 2022, 07:31:54
Teď jsem si všiml, že prvků je 11, ne 10.  Takže všechny kalkulace vynásobit 2.6* ...
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: GloGlo 06. 08. 2022, 19:49:52
Díky.. to by se celkem prodražilo  ;D
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: _Jenda 06. 08. 2022, 21:03:39
Proč si to nezkusíš s rostoucími čísly podle délky x nebo hodnoty repeat a tím zjistíš kolik žere prvek a pak už jenom spočítáš počet prvků pro tvé parametry? Stačí místo print uložit vzniklý seznam do proměnné a udělat https://stackoverflow.com/questions/938733/total-memory-used-by-python-process
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: linuxak 06. 08. 2022, 22:10:56
Víš o tom, že to jde napsat jako lazy generátor, kdy to nepotřebuje prakticky žádnou paměť? Jen nevím, k čemu by ti to prakticky bylo, protože ty vygenerované prvky musíš potom stejně nějak zpracovat a je jich fakt hodně...
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 07. 08. 2022, 02:55:44
Kód: [Vybrat]
print(len(x)**10)
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: RDa 07. 08. 2022, 22:41:24
A co ten kod jako ma delat?
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: mm212 08. 08. 2022, 20:25:04
netusim co ma delat ale vysledek by mel byt 25937424601

a to stacila mala uprava:
Kód: [Vybrat]
counter=0
for _ in (p for p in it.product(x, repeat=10)):
    count+=1

a pameti to potrebje pod 6MB se vsim vsudy

a jak se na to divam melo by stacit:
Kód: [Vybrat]
counter = 0
for _ in it.product(x, repeat=10):
    counter+=1

ke stejnemu vysledku ...
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: APhacker_mob 09. 08. 2022, 11:59:51
netusim co ma delat ale vysledek by mel byt 25937424601

a to stacila mala uprava:
Kód: [Vybrat]
counter=0
for _ in (p for p in it.product(x, repeat=10)):
    count+=1

a pameti to potrebje pod 6MB se vsim vsudy

a jak se na to divam melo by stacit:
Kód: [Vybrat]
counter = 0
for _ in it.product(x, repeat=10):
    counter+=1

ke stejnemu vysledku ...

Vysledek je len(x)**10 jak jsem psal vyse.
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: GloGlo 13. 08. 2022, 01:06:10
netusim co ma delat ale vysledek by mel byt 25937424601

a to stacila mala uprava:
Kód: [Vybrat]
counter=0
for _ in (p for p in it.product(x, repeat=10)):
    count+=1

a pameti to potrebje pod 6MB se vsim vsudy

a jak se na to divam melo by stacit:
Kód: [Vybrat]
counter = 0
for _ in it.product(x, repeat=10):
    counter+=1

ke stejnemu vysledku ...

Vysledek je len(x)**10 jak jsem psal vyse.

Jako podle tebe je na to potřeba 25 GB RAM?

Zkoušel sem to teď na Google Cloud na stroji se 128 GB RAM a taky to spadlo :))
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: snugar_i 13. 08. 2022, 10:09:29
Jako podle tebe je na to potřeba 25 GB RAM?

Zkoušel sem to teď na Google Cloud na stroji se 128 GB RAM a taky to spadlo :))
Ne, nic takovýho nepsal. Psal, že pokud bude mít ten program dost RAM, tak vypíše 25937424601. Tzn. v poli je 25937424601 prvků, ale samozřejmě každej zabírá o dost víc než jeden byte.
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: GloGlo 13. 08. 2022, 16:52:08
A co ten kod jako ma delat?

Chtěl jsem najít maximální možnou hodnotu funkce s mnoha proměnnými a nevěděl, jak na to, tak sem zvažoval zkoušet to hrubou silou a prostě tu funkci volat 25937424601*krát, ale že to není dobrej nápad sem pochopil hodně brzo, když mi to ani nenačetlo array se všema těma kombinacema :D

Naštěstí sem pak po mnoha hodinách hledání objevil scipy.optimize.minimize a ta mi to spočítala za pár vteřin :)
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: _Jenda 13. 08. 2022, 17:19:28
Chtěl jsem najít maximální možnou hodnotu funkce s mnoha proměnnými a nevěděl, jak na to, tak sem zvažoval zkoušet to hrubou silou a prostě tu funkci volat 25937424601*krát, ale že to není dobrej nápad sem pochopil hodně brzo, když mi to ani nenačetlo array se všema těma kombinacema :D
Ale to přece nemusíš mít všechno najedou v paměti, nejen že je to iterátor, dokonce se to i přímo jmenuje itertools, aby to každého trklo…
Název: Re:Kolik je potřeba RAM, aby tento kód doběhl?
Přispěvatel: Google CTCCTCGGCGGGCACGTAG 13. 08. 2022, 17:45:43
Chtěl jsem najít maximální možnou hodnotu funkce s mnoha proměnnými a nevěděl, jak na to, tak sem zvažoval zkoušet to hrubou silou a prostě tu funkci volat 25937424601*krát, ale že to není dobrej nápad sem pochopil hodně brzo, když mi to ani nenačetlo array se všema těma kombinacema :D
Ale to přece nemusíš mít všechno najedou v paměti, nejen že je to iterátor, dokonce se to i přímo jmenuje itertools, aby to každého trklo…

kupodivu itertools neobsahuje funkci pro ziskani poctu prvku iteratoru, obdobu len, pouziva se idiom

Kód: [Vybrat]
sum(1 for _ in iterator)