Portál AbcLinuxu, 21. července 2025 21:52


Dotaz: efektivita procházení matice

16.9.2010 19:51 Dadam | skóre: 12 | blog: dadamovo
efektivita procházení matice
Přečteno: 342×
Odpovědět | Admin
Zdravím,
mám 32bitový Arch linux, procesor Core2Duo, gcc 4.5.0, optimalizace vypnuté, měřím pomocí gprof. Je nějaký důvod, proč by měl být následující kód
        for (i = 0; i < in->h; i++) {
                for (j = 0; j < in->w; j++) {
                        b = 0;
                        for (k = -r; k <= r; k++) for (l = -r; l <= r; l++) { 
                                if (in->arr[i+l][j+k] <= p) b++;
                        }
                        if (b > (max-1)/2) out->arr[i][j] = 0;
                        else out->arr[i][j] = 255;
                }
        }

pomalejší než tento:
        for (i = 0; i < in->h; i++) {
                for (j = 0; j < in->w; j++) {
                        b = 0;
                        for (k = 0; k <= 2*r; k++) for (l = 0; l <= 2*r; l++) {
                                if (in->arr[i-r+l][j-r+k] <= p) b++;
                        }
                        if (b > (max-1)/2) out->arr[i][j] = 0;
                        else out->arr[i][j] = 255;
                }
        }

? Rozdíl je jen pár procent, nicméně myslel jsem že bude na druhou stranu, nebo nebude žádný.
A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.9.2010 19:57 Dadam | skóre: 12 | blog: dadamovo
Rozbalit Rozbalit vše Re: efektivita procházení matice
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mimochodem - že se to ocitne v záporných indexech vím, je to sice prasárna, nicméně počítám s tím.
A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
16.9.2010 23:03 reqw5q23
Rozbalit Rozbalit vše Re: efektivita procházení matice
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus si vytknout 2*r a vyrazy v indexech poli si take predpocitej.
17.9.2010 02:44 heretic
Rozbalit Rozbalit vše Re: efektivita procházení matice
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neměly by bejt u toho druhýho příkladu indexy náhodou takhle ?
if (b > (max-1)/2) out->arr[i-r][j-r] = 0;
else out->arr[i-r][j-r] = 255;
17.9.2010 11:43 Dadam | skóre: 12 | blog: dadamovo
Rozbalit Rozbalit vše Re: efektivita procházení matice
Ee, v in se prochází matice šířky 2r+1 kolem indexu [i][j], výsledek se zapíše do out indexu [i][j] (střed procházené matice). Je to mediánový filtr na černobílé bitmapě.
A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.
17.9.2010 06:31 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: efektivita procházení matice
Odpovědět | | Sbalit | Link | Blokovat | Admin
Obvykle jsou procesorům milejší cykly s jedním koncem v nule. Podívejte se co z toho leze za assembler (gcc -S) a třeba to bude jasnější.

In Ada the typical infinite loop would normally be terminated by detonation.
17.9.2010 11:47 Dadam | skóre: 12 | blog: dadamovo
Rozbalit Rozbalit vše Re: efektivita procházení matice
Podívám. S assemblerem moc nepracuju, že existuje nějaká instrukce loop, která končí na nule, vím, ale ta rychlejší varianta na nule začíná, a vzhledem k tomu, že mám vypnuté optimalizace, počítám s tím, že mi to celé nepřeskládá.
A i B mají svoje výhody a nevýhody. Vyberte si to, co vám vyhovuje víc, a necpěte A tam, kam patří B.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.