On Mon, May 21, 2007 at 08:02:14AM +0000, Kiss Gabor wrote:
> 
> Kellene egy gyors otlet arra, hogy PERL-ben hogy lehet a legyorsabban
> felcserelgetni par egymillio byte-ot.
> 
> Pontosabban: egy gigaszi skalarban N*3 byte van. (N kb. 0.8 .. 1.3 millio)
> Minden tripletnek fel kellene cserelni az elso es a harmadik erteket.
> (Csak hogy ertsuk: ezek egy kep pixelei, es az R<->B ertekeket akarom
> kicserelni egymassal.)
> 
> A jelenleg hasznalt
> $blob =~ s/(.)(.)(.)/$3$2$1/g;
> konstrukcio kb. masfel masodpercig molyol.
> Ez tul sok. 0.2 s ala kellene leszoritani.
> 
> Otletek?

T.xs:

MODULE = T              PACKAGE = T             

void
swap3(IN_OUT char *p, int len)
INIT:
        int i, tmp;
CODE:
        for (i = 0; i < len; i += 3)
        {
                tmp = p[i];
                p[i] = p[i + 2];
                p[i + 2] = tmp;
        }

Reg volt mar, hogy utoljara ilyent irtam, nem probaltam ki, de nem teljesen
kizart, hogy ez igy jo :-) Tobbi reszlet a "man perlxstut"-ban.

Gabor

-- 
     ---------------------------------------------------------
     MTA SZTAKI Computer and Automation Research Institute
                Hungarian Academy of Sciences
     ---------------------------------------------------------
_________________________________________________
linux lista      -      [email protected]
http://mlf2.linux.rulez.org/mailman/listinfo/linux

válasz