Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Problem s alokacijom matrica reda 8k i vise
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
kkarlo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 05. 2010. (08:43:59)
Postovi: (1B2)16
Spol: zombi
Sarma = la pohva - posuda
64 = 72 - 8

PostPostano: 12:34 sub, 2. 11. 2013    Naslov: Citirajte i odgovorite

Pošto je ovdje bilo govora o mallocu i slično da postavim svoje pitanje koje me muči već nekoliko dana...

Imam problem sa mallocom u rekurziji kada se pojavi n=8192.
Da ne stavljam cijeli kod, ovako otprilike izgleda program:
U mainu se zauzmu 3 matrice veličine n*n te se s njima poziva rekurzija.
U rekurziji se ide do n=4, a pri svakom pozivu se zauzme još 6*matrica veličine (n/2)*(n/2). U svakom pozivu rekurzije se pozove 7 puta rekurzija sa matricama n/2.
Riječ je o Strassenovom algoritmu za množenje matrica i sve funkcionira dobro do 4096 no trebam ga testirat i za matrice reda: 8192,16384 i 32786...
Već sam iscrpio google i stvarno neznam što da više radim.
Imam Win 7 64 sa 8GB RAM-a, i uspio sam u visual studiu pokrenut program ali nakon što je radio nekih 15 sati sam ga ugasio sa zaključkom da neće ni završit.
Ima netko neku ideju?
:roll:
Pošto je ovdje bilo govora o mallocu i slično da postavim svoje pitanje koje me muči već nekoliko dana...

Imam problem sa mallocom u rekurziji kada se pojavi n=8192.
Da ne stavljam cijeli kod, ovako otprilike izgleda program:
U mainu se zauzmu 3 matrice veličine n*n te se s njima poziva rekurzija.
U rekurziji se ide do n=4, a pri svakom pozivu se zauzme još 6*matrica veličine (n/2)*(n/2). U svakom pozivu rekurzije se pozove 7 puta rekurzija sa matricama n/2.
Riječ je o Strassenovom algoritmu za množenje matrica i sve funkcionira dobro do 4096 no trebam ga testirat i za matrice reda: 8192,16384 i 32786...
Već sam iscrpio google i stvarno neznam što da više radim.
Imam Win 7 64 sa 8GB RAM-a, i uspio sam u visual studiu pokrenut program ali nakon što je radio nekih 15 sati sam ga ugasio sa zaključkom da neće ni završit.
Ima netko neku ideju?
Rolling Eyes


[Vrh]
Korisnički profil Pošaljite privatnu poruku
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 17:18 sub, 2. 11. 2013    Naslov: Citirajte i odgovorite

Jesi li siguran da kompajliraš 64-bitni, a ne 32-bitni EXE?
Inace, kani se malloc()iranja u rekurziji, bit će brže ako alociraš jednom izvan.

P.S. I sigurno imaš sve pripadne free() pozive na pravim mjestima?

Inače, 32k * 32k * 3 = 3G, pa ako koristiš iole veći tip podataka (sizeof(T) >= 4) imat ćeš vrlo zanimljivu situaciju već na startu.
Razmisli malo o tome.
Jesi li siguran da kompajliraš 64-bitni, a ne 32-bitni EXE?
Inace, kani se malloc()iranja u rekurziji, bit će brže ako alociraš jednom izvan.

P.S. I sigurno imaš sve pripadne free() pozive na pravim mjestima?

Inače, 32k * 32k * 3 = 3G, pa ako koristiš iole veći tip podataka (sizeof(T) >= 4) imat ćeš vrlo zanimljivu situaciju već na startu.
Razmisli malo o tome.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
kkarlo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 05. 2010. (08:43:59)
Postovi: (1B2)16
Spol: zombi
Sarma = la pohva - posuda
64 = 72 - 8

PostPostano: 18:06 sub, 2. 11. 2013    Naslov: Citirajte i odgovorite

[quote="venovako"]Jesi li siguran da kompajliraš 64-bitni, a ne 32-bitni EXE?
Inace, kani se malloc()iranja u rekurziji, bit će brže ako alociraš jednom izvan.

P.S. I sigurno imaš sve pripadne free() pozive na pravim mjestima?

Inače, 32k * 32k * 3 = 3G, pa ako koristiš iole veći tip podataka (sizeof(T) >= 4) imat ćeš vrlo zanimljivu situaciju već na startu.
Razmisli malo o tome.[/quote]
Znam da će bit brže ako alociram vani, ali ne znam kako bi to izveo kad su mi za svaki poziv rekurzije nužne nove pomocne matrice...
Imam sve free() pozive na pravim mjestima naravno... Mislim da mi ne bi radilo i za puno manje n-ove, a za recimo matricu 4096x4096 radi sve normalno.

I radi se o double matricama.
A nisam siguran gdje da podesim na 64 bitnu verziju? Probao sam sa Code Blocksom mi se ruši program, a u Microsoft Visual Studiu se ne sruši al čini mi se da nema kraja...
Sada sam pokrenuo malo prepravljenu verziju pa ću vidjet do sutra ujutro hoće li izbacit kakav rezultat. :lol:

Ako može savjet gdje mogu podesit na 64-bitnu verziju bilo bi super!
:D

A nek za početak proradi za 8000, možda i to bude dovoljno pa neću trebat dalje ni računat...
venovako (napisa):
Jesi li siguran da kompajliraš 64-bitni, a ne 32-bitni EXE?
Inace, kani se malloc()iranja u rekurziji, bit će brže ako alociraš jednom izvan.

P.S. I sigurno imaš sve pripadne free() pozive na pravim mjestima?

Inače, 32k * 32k * 3 = 3G, pa ako koristiš iole veći tip podataka (sizeof(T) >= 4) imat ćeš vrlo zanimljivu situaciju već na startu.
Razmisli malo o tome.

Znam da će bit brže ako alociram vani, ali ne znam kako bi to izveo kad su mi za svaki poziv rekurzije nužne nove pomocne matrice...
Imam sve free() pozive na pravim mjestima naravno... Mislim da mi ne bi radilo i za puno manje n-ove, a za recimo matricu 4096x4096 radi sve normalno.

I radi se o double matricama.
A nisam siguran gdje da podesim na 64 bitnu verziju? Probao sam sa Code Blocksom mi se ruši program, a u Microsoft Visual Studiu se ne sruši al čini mi se da nema kraja...
Sada sam pokrenuo malo prepravljenu verziju pa ću vidjet do sutra ujutro hoće li izbacit kakav rezultat. Laughing

Ako može savjet gdje mogu podesit na 64-bitnu verziju bilo bi super!
Very Happy

A nek za početak proradi za 8000, možda i to bude dovoljno pa neću trebat dalje ni računat...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 20:43 sub, 2. 11. 2013    Naslov: Citirajte i odgovorite

Tesko je znati bez koda. Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za [tt]n = 8192[/tt], i faktor 4 za svaki iduci (duplo veci) [tt]n[/tt], sto znaci da bi trebao raditi kako spada ako imas 8GB RAMa.

Ako mislis da je kod prevelik za ovdje, pitaj na [url=http://stackoverflow.com/]StackOverflow[/url]-u. Community je ogroman i rjesenja obicno brzo stizu i kvalitetna su.
Tesko je znati bez koda. Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za n = 8192, i faktor 4 za svaki iduci (duplo veci) n, sto znaci da bi trebao raditi kako spada ako imas 8GB RAMa.

Ako mislis da je kod prevelik za ovdje, pitaj na StackOverflow-u. Community je ogroman i rjesenja obicno brzo stizu i kvalitetna su.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
venovako
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 07. 11. 2002. (22:46:38)
Postovi: (2F9)16
Sarma = la pohva - posuda
56 = 65 - 9

PostPostano: 21:42 sub, 2. 11. 2013    Naslov: Citirajte i odgovorite

[quote="kkarlo"]Znam da će bit brže ako alociram vani, ali ne znam kako bi to izveo kad su mi za svaki poziv rekurzije nužne nove pomocne matrice...[/quote]

Fino.
Prvo izračunaš koliko ti ukupno memorije treba za sve nivoe rekurzije.
Alociraš izvana toliko veliko polje i imaš pokazivač na prvi neiskorišteni element u toj velikoj alokaciji.
Kad ti zatreba nova matrica, uzmeš taj pokazivač kao početak nove matrice i povećaš ga za broj elemenata nove matrice.
Kad ti više ne treba nova matrica, smanjiš pokazivač za isti broj elemenata.
Zapravo radiš "ručni" malloc i free.

[quote="kkarlo"]A nisam siguran gdje da podesim na 64 bitnu verziju?[/quote]

Otprilike ovako, varira od verzije VSa:
Klik na Solution, Properties, tamo nađeš Configurations i dodaš x64 konfiguraciju.
Postaviš je kao aktivnu.
Ako to ne možeš, znači da tvoj VS ne podržava 64-bitne aplikacije, a onda ćeš imati malo veću zabavu...
kkarlo (napisa):
Znam da će bit brže ako alociram vani, ali ne znam kako bi to izveo kad su mi za svaki poziv rekurzije nužne nove pomocne matrice...


Fino.
Prvo izračunaš koliko ti ukupno memorije treba za sve nivoe rekurzije.
Alociraš izvana toliko veliko polje i imaš pokazivač na prvi neiskorišteni element u toj velikoj alokaciji.
Kad ti zatreba nova matrica, uzmeš taj pokazivač kao početak nove matrice i povećaš ga za broj elemenata nove matrice.
Kad ti više ne treba nova matrica, smanjiš pokazivač za isti broj elemenata.
Zapravo radiš "ručni" malloc i free.

kkarlo (napisa):
A nisam siguran gdje da podesim na 64 bitnu verziju?


Otprilike ovako, varira od verzije VSa:
Klik na Solution, Properties, tamo nađeš Configurations i dodaš x64 konfiguraciju.
Postaviš je kao aktivnu.
Ako to ne možeš, znači da tvoj VS ne podržava 64-bitne aplikacije, a onda ćeš imati malo veću zabavu...


[Vrh]
Korisnički profil Pošaljite privatnu poruku
kkarlo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 05. 2010. (08:43:59)
Postovi: (1B2)16
Spol: zombi
Sarma = la pohva - posuda
64 = 72 - 8

PostPostano: 0:14 ned, 3. 11. 2013    Naslov: Citirajte i odgovorite

[quote="venovako"][quote="kkarlo"]Znam da će bit brže ako alociram vani, ali ne znam kako bi to izveo kad su mi za svaki poziv rekurzije nužne nove pomocne matrice...[/quote]

Fino.
Prvo izračunaš koliko ti ukupno memorije treba za sve nivoe rekurzije.
Alociraš izvana toliko veliko polje i imaš pokazivač na prvi neiskorišteni element u toj velikoj alokaciji.
Kad ti zatreba nova matrica, uzmeš taj pokazivač kao početak nove matrice i povećaš ga za broj elemenata nove matrice.
Kad ti više ne treba nova matrica, smanjiš pokazivač za isti broj elemenata.
Zapravo radiš "ručni" malloc i free.

[quote="kkarlo"]A nisam siguran gdje da podesim na 64 bitnu verziju?[/quote]

Otprilike ovako, varira od verzije VSa:
Klik na Solution, Properties, tamo nađeš Configurations i dodaš x64 konfiguraciju.
Postaviš je kao aktivnu.
Ako to ne možeš, znači da tvoj VS ne podržava 64-bitne aplikacije, a onda ćeš imati malo veću zabavu...[/quote]
Hvala!
:)
Samim tim alociranjem izvana mislim da bi moj problem trebao nestati jer će program postat znatno brži pa neću ni trebat računat za tako velike matrice.
A izgleda da ne mogu podesit na 64-bitnu verziju no kao što rekoh neće mi ni trebat.
Hvala još jednom!
venovako (napisa):
kkarlo (napisa):
Znam da će bit brže ako alociram vani, ali ne znam kako bi to izveo kad su mi za svaki poziv rekurzije nužne nove pomocne matrice...


Fino.
Prvo izračunaš koliko ti ukupno memorije treba za sve nivoe rekurzije.
Alociraš izvana toliko veliko polje i imaš pokazivač na prvi neiskorišteni element u toj velikoj alokaciji.
Kad ti zatreba nova matrica, uzmeš taj pokazivač kao početak nove matrice i povećaš ga za broj elemenata nove matrice.
Kad ti više ne treba nova matrica, smanjiš pokazivač za isti broj elemenata.
Zapravo radiš "ručni" malloc i free.

kkarlo (napisa):
A nisam siguran gdje da podesim na 64 bitnu verziju?


Otprilike ovako, varira od verzije VSa:
Klik na Solution, Properties, tamo nađeš Configurations i dodaš x64 konfiguraciju.
Postaviš je kao aktivnu.
Ako to ne možeš, znači da tvoj VS ne podržava 64-bitne aplikacije, a onda ćeš imati malo veću zabavu...

Hvala!
Smile
Samim tim alociranjem izvana mislim da bi moj problem trebao nestati jer će program postat znatno brži pa neću ni trebat računat za tako velike matrice.
A izgleda da ne mogu podesit na 64-bitnu verziju no kao što rekoh neće mi ni trebat.
Hvala još jednom!


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (355F)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 0:21 ned, 3. 11. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"]Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za [tt]n = 8192[/tt],...[/quote]

Fulah u procjeni; 2.5GB je blize stvarnosti. Ako je suditi prema [url=http://stackoverflow.com/a/11892191/1667018]prvom odgovoru[/url] [url=http://stackoverflow.com/q/11891593/1667018]ovdje[/url], 32bita na 64bit Win moze ici do 2GB (ne bas, ali po defaultu... vidi link za detalje). Dakle, moguce je da stvarno to neces moci alocirati.
vsego (napisa):
Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za n = 8192,...


Fulah u procjeni; 2.5GB je blize stvarnosti. Ako je suditi prema prvom odgovoru ovdje, 32bita na 64bit Win moze ici do 2GB (ne bas, ali po defaultu... vidi link za detalje). Dakle, moguce je da stvarno to neces moci alocirati.



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
kkarlo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 05. 2010. (08:43:59)
Postovi: (1B2)16
Spol: zombi
Sarma = la pohva - posuda
64 = 72 - 8

PostPostano: 1:06 ned, 3. 11. 2013    Naslov: Citirajte i odgovorite

[quote="vsego"][quote="vsego"]Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za [tt]n = 8192[/tt],...[/quote]

Fulah u procjeni; 2.5GB je blize stvarnosti. Ako je suditi prema [url=http://stackoverflow.com/a/11892191/1667018]prvom odgovoru[/url] [url=http://stackoverflow.com/q/11891593/1667018]ovdje[/url], 32bita na 64bit Win moze ici do 2GB (ne bas, ali po defaultu... vidi link za detalje). Dakle, moguce je da stvarno to neces moci alocirati.[/quote]
Prepravih program pa više i nije potrebno, ali svejedno hvala...
Nadam se da se neću puno susretat sa takvim problemima, ali opet, dobro je znati.
8)
Napisah malu rekurziju za izračunavanje potrebne memorije koja je zapravo toliko jednostavna da je moram podijelit.

int velicina(int n)
{
if(n==2)return 0;
return(velicina(n/2)+3*n);
}

:lol:

I da, kada sam u VS-u enable-ao large adresses onda mi se prestao rušit za 8192x8192.

Hvala još jednom.
:D
vsego (napisa):
vsego (napisa):
Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za n = 8192,...


Fulah u procjeni; 2.5GB je blize stvarnosti. Ako je suditi prema prvom odgovoru ovdje, 32bita na 64bit Win moze ici do 2GB (ne bas, ali po defaultu... vidi link za detalje). Dakle, moguce je da stvarno to neces moci alocirati.

Prepravih program pa više i nije potrebno, ali svejedno hvala...
Nadam se da se neću puno susretat sa takvim problemima, ali opet, dobro je znati.
Cool
Napisah malu rekurziju za izračunavanje potrebne memorije koja je zapravo toliko jednostavna da je moram podijelit.

int velicina(int n)
{
if(n==2)return 0;
return(velicina(n/2)+3*n);
}

Laughing

I da, kada sam u VS-u enable-ao large adresses onda mi se prestao rušit za 8192x8192.

Hvala još jednom.
Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan