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. |
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... |
kkarlo (napisa): |
A nisam siguran gdje da podesim na 64 bitnu verziju? |
venovako (napisa): | ||||
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.
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... |
vsego (napisa): |
Ako sam dobro shvatio tvoj opis, tvoj bi program trebao pojesti cca 1GB memorije za n = 8192,... |
vsego (napisa): | ||
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. |
output generated using printer-friendly topic mod. Vremenska zona: GMT + 01:00.