TCH (statz) | #1, Főfasz (10443) |
2508 | #2389 | ^ | Idézet | Thu, 07 Feb 2013 19:27:22 +01 |
78.92.*.* | *.pool.t-online.hu |
Nem lett gyorsabb. Köszi a forrást, leforgattam, az is echte ugyanolyan lassú nálam. -O3 kapcsolóval már gyorsabb valamivel. És most leesett az órajelet nézve, hogy miért lassú nálam: nem megy fel a 800 MHz 2400-ra, amikor fut a thread. Lehet egy thread-et high priority-re rakni? Viszont a help gomb megfagyasztja az egész programot, amíg a böngészőt be nem zárod. Meg a help file-ban át kéne írni azt a 256256 értéket, hisz nem annyi az összes lehetséges tábla száma, hanem sokkal kevesebb, egy táblában minden kulcs különbözik. (Tudom ezt a marhaságot én írtam bele még a 2-es RC-nél, apropó az RC 2 feliratot is cserélni kéne benne, meg a ^ jelölt hatvány felírásokat sup tag-re.) Meg a múltkor nem esett le valami. Az oké, hogy a GTK2 csak előrefele enged iterálni, de miért kell neked egyáltalán iterálni a listboxot? Nem tömbben tárolod az egyes lépéseket? Sz*rk: Viszont eszembe jutott egy dolog. Ugye a CR1 az úgy megy, hogy simán buf[i] = table[buf[i]]; és csumi, ami jó, viszont a CR2 az meg úgy megy, hogy j = 0; while (table[j] != buf[i]) j++; buf[i] = (unsigned char)j;ami nem annyira gyors, lévén az a ciklus le fog futni n-szer. Helyette kellene egy másik tábla, amiben azt tároljuk, hogy az adott szám hanyadik helyen van és abból olvassuk ki. Vagyis lesz egy másik táblánk unsigned char table_pos[256]; néven és egy kicsit megváltozik a shuffletable() kódja is, mert a ciklus belseje így fog kinézni c = rnd2() & 255; /* itt nincs szukség typecastra, mind a ketto unsigned, sot GCC-ben ugyanazok, de ez csak javaslat */ table_pos[table[c]] = i; table_pos[table[i]] = c; /* alapesetben a table_pos[x] == x, tehat helycsere eseten itt a masik tabla c-edik pozicioja ami eddig c volt, most i lesz es vice versa */ temp = table[c]; table[c] = table[i]; table[i] = temp;és ezután a CR2 kicsit módosul, mert az elején az inicializálás így fog kinézni: unsigned long long int k; /* az "int" a legtobb forditoban csak 16 bites, de GCC-ben is csak 32, es filepos-ra celszeru 64 bites indexet hasznalni, abbol is unsignedet, de ez is csak javaslat */ for (k = 0; k < 256; k++) { table[k] = k; table_pos[k] = k; /* itt sincs szükseg typecastra */ }és a nagy ciklusban pedig a fent említett while ciklus kódja erre cserélődik ki: buf[i] = table_pos[i]; Ez szerintem elég jelentősen gyorsítana a CR2-n. |