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