Re: PERL, bytecsere
In article <[EMAIL PROTECTED]>, Molnár István <[EMAIL PROTECTED]> writes: > $blob = reverse -$blob; Ez mit is csinal szerinted? :-o kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
Kiss Gabor wrote: > > # 0.01 s de fejreall a kep :-) >$blob = reverse $blob; > > $blob = reverse -$blob; vagy méggyorsabban: = - reverse ; # ez csak emlék egy hasonló célú progiból, nem vagyok teljesen biztos benne és kipróbálni nem tudom _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] (Kiss Gabor) writes: > # 0.01 s de fejreall a kep :-) >$blob = reverse $blob; Vegul ennel maradtam, es 20 ms alatt pedig visszaforgatom a kesz kepet. Kosz mindenkinek! kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
Meresi hiba volt. Ujra: # 1.5 s $blob=~ s/(.)(.)(.)/$3$2$1/g; # R<->B swap # 0.01 s de fejreall a kep :-) $blob = reverse $blob; # 1.2 s $blob = pack( '(C)*', unpack( '(xxCXXCXXCxx)*', $blob ) ); # 1.1 s $blob = pack( '(C)*', unpack( '(@2C @1C @0C xx)*', $blob ) ); # 0.5 s $blob = reverse pack('(a3)*', reverse unpack('(a3)*', $blob)); # 1.7 s my @tomb = unpack('C*', $blob); for (my $i=0; $i<=$#tomb; $i+=3 ) { my $x = $tomb[$i]; $tomb[$i] = $tomb[$i+2]; $tomb[$i+2] = $x; } $blob = pack('C*', @tomb); kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
2007, May 21 -> Kiss Gabor wrote : > $blob = reverse pack('(a3)*', reverse unpack('(a3)*', $blob)); hello, erdekes h nalad gyorsabb a regexp-es megoldas, en is vmi pack-es dologra gondolnek inkabb, ez igy tenyleg eleg gyors: undef $/; reverse pack('(i3)*', unpack('(i3)*', <>)); egy core duo macbook-on 0.6 sec, a regexp meg 2 sec... 30x futtattam mindkettot... Atti _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
Ha jól hiszem, Kiss Gabor írta az alábbiakat: > > In article <[EMAIL PROTECTED]>, > Pirity Tamas Gabor <[EMAIL PROTECTED]> writes: > > Mennyi p=E9nzed van gyorsabb hardverre? > > 1179738718 masodperc. :-( Illetve a másik ötlet, hogy írd meg C-ben. -- PTG Look! A ladder! Maybe it leads to heaven, or a sandwich! Debian 3.0 -- Linux 2.6.14.3 _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
Kiss Gabor wrote: > In article <[EMAIL PROTECTED]>, > =?UTF-8?B?RmFyYWfDsyBKw6Fub3M=?= <[EMAIL PROTECTED]> writes: >> Ez szerintem gyorsabb lesz: >> >> for ($i=0; $i<$n; $i+=3 ) >> { >> $x = $tomb[$i]; >> $tomb[$i]= $tomb[$i+2]; >> $tomb[$i+2] = $x; >> } > > 4.5 masodperc. :-/ Ez érdekes. Írtam egy kis tesztprogramot a feladatra (elküldöm magánban). Az általad írt és a fenti megoldás van benne (plusz egy adatfeltöltés). A lényegi része a következő: sub t1() { my $i; my $x; for ( $i=0; $i<$bnum; $i+=3 ) { $x = $array[$i]; $array[$i] = $array[$i+2]; $array[$i+2]= $x; } } sub t2() { $str =~ s/(.)(.)(.)/$3$2$1/g; } A progi szerint a tömbös megoldás kb. 2-ször gyorsabb (az én gépemen). (Az persze könnyen meglehet, hogy a tesztprogram nem jó modellezi a feladatot.) Üdv Fari _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] (Kiss Gabor) writes: > A jelenleg hasznalt > $blob =~ s/(.)(.)(.)/$3$2$1/g; > konstrukcio kb. masfel masodpercig molyol. > Ez tul sok. 0.2 s ala kellene leszoritani. $blob = reverse pack('(a3)*', reverse unpack('(a3)*', $blob)); 3.3 sec. kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
In article <[EMAIL PROTECTED]>, Pirity Tamas Gabor <[EMAIL PROTECTED]> writes: > Mennyi p=E9nzed van gyorsabb hardverre? 1179738718 masodperc. :-( kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
In article <[EMAIL PROTECTED]>, =?UTF-8?B?RmFyYWfDsyBKw6Fub3M=?= <[EMAIL PROTECTED]> writes: > Ez szerintem gyorsabb lesz: > > for ($i=0; $i<$n; $i+=3 ) > { > $x = $tomb[$i]; > $tomb[$i] = $tomb[$i+2]; > $tomb[$i+2] = $x; > } 4.5 masodperc. :-/ kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
On Mon, May 21, 2007 at 08:02:14AM +, 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 - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
Kiss Gabor wrote: > Kellene egy gyors otlet arra, hogy PERL-ben hogy lehet a legyorsabban > felcserelgetni par egymillio byte-ot. Ebben nem igazán erős a PERL. > A jelenleg hasznalt > $blob =~ s/(.)(.)(.)/$3$2$1/g; > konstrukcio kb. masfel masodpercig molyol. > Ez tul sok. 0.2 s ala kellene leszoritani. > > Otletek? Ez nagyon elegáns megoldás, de nem igazán jó a teljesítménye. Én a helyedben megpróbálnám tömbként kezelni a képet és úgy cserélgetni az elemeket. Ez szerintem gyorsabb lesz: for ($i=0; $i<$n; $i+=3 ) { $x = $tomb[$i]; $tomb[$i] = $tomb[$i+2]; $tomb[$i+2] = $x; } Üdv Fari _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
Re: PERL, bytecsere
Ha jól hiszem, Kiss Gabor írta az alábbiakat: > 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. Mennyi pénzed van gyorsabb hardverre? -- PTG A long memory is the most subversive idea in America. Debian 3.0 -- Linux 2.6.14.3 _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux
PERL, bytecsere
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? kissg _ linux lista - linux@mlf.linux.rulez.org http://mlf2.linux.rulez.org/mailman/listinfo/linux