Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 17:18 sub, 2. 11. 2013 Naslov: |
|
|
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] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 18:06 sub, 2. 11. 2013 Naslov: |
|
|
[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.
Ako može savjet gdje mogu podesit na 64-bitnu verziju bilo bi super!
A nek za početak proradi za 8000, možda i to bude dovoljno pa neću trebat dalje ni računat...
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 20:43 sub, 2. 11. 2013 Naslov: |
|
|
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.
|
|
[Vrh] |
|
venovako Forumaš(ica)
Pridružen/a: 07. 11. 2002. (22:46:38) Postovi: (2F9)16
|
Postano: 21:42 sub, 2. 11. 2013 Naslov: |
|
|
[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] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 0:14 ned, 3. 11. 2013 Naslov: |
|
|
[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!
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] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol:
Lokacija: /sbin/init
|
Postano: 0:21 ned, 3. 11. 2013 Naslov: |
|
|
[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.
|
|
[Vrh] |
|
kkarlo Forumaš(ica)
Pridružen/a: 19. 05. 2010. (08:43:59) Postovi: (1B2)16
Spol:
|
Postano: 1:06 ned, 3. 11. 2013 Naslov: |
|
|
[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.
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);
}
I da, kada sam u VS-u enable-ao large adresses onda mi se prestao rušit za 8192x8192.
Hvala još jednom.
|
|
[Vrh] |
|
|