Kolik je potřeba RAM, aby tento kód doběhl?

Kolik je potřeba RAM, aby tento kód doběhl?
« kdy: 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
« Poslední změna: 06. 08. 2022, 07:39:01 od Petr Krčmář »


Re:Kolik je potřeba RAM, aby tento kód doběhl? :D
« Odpověď #1 kdy: 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.

Re:Kolik je potřeba RAM, aby tento kód doběhl? :D
« Odpověď #2 kdy: 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* ...

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #3 kdy: 06. 08. 2022, 19:49:52 »
Díky.. to by se celkem prodražilo  ;D

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #4 kdy: 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


Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #5 kdy: 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ě...

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #6 kdy: 07. 08. 2022, 02:55:44 »
Kód: [Vybrat]
print(len(x)**10)

RDa

  • *****
  • 2 467
    • Zobrazit profil
    • E-mail
Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #7 kdy: 07. 08. 2022, 22:41:24 »
A co ten kod jako ma delat?

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #8 kdy: 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 ...
« Poslední změna: 08. 08. 2022, 20:32:10 od mm212 »

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #9 kdy: 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.

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #10 kdy: 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 :))

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #11 kdy: 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.

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #12 kdy: 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 :)

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #13 kdy: 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…

Re:Kolik je potřeba RAM, aby tento kód doběhl?
« Odpověď #14 kdy: 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)