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 119
    • 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

  • *****
  • 1 827
    • 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.