Rychlost funkce – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Rychlost funkce – PHP – Fórum – Programujte.comRychlost funkce – PHP – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
peter
~ Anonymní uživatel
2528 příspěvků
1. 10. 2014   #1
-
0
-

Mam cyklus, ktery nacita soubor a postupne z nej vytahuje bit po bitu a uklada zpet. Kdyz hlavni cast vytahnu do funkce, tak se to cele zpomaly z 1.75s na 4.3s. Co s tim? Proc se to prepsanim na funkci tak drasticky zpomali?
Ta cast se souborem neni podstatna, v $data1 je postupne 38.000 nejakych znaku ziskanych pomoci fread ze souboru o velikosti 100k

...
$data1 = unpack("C*",$data1);	//convert file string to byte(integer) array - coz je rychlejsi nez pres ord()
$data2 = "";
//$fname = 'xor_eb';
for ($i=1;$i<=$len;$i++)
	{
	$x = $data1[$i];
	$y = 0x00;
	for ($j=0;$j<8;$j++)
		{
$b = ($x>>$j) & 0x01;
$f = ($e ^ ~$b) & 0x01;	//xor
$e = $f;
$y |= $f<<$j;		//or
$stat[0] += $b;		// count 1 input
$stat[1] += $f;		// count 1 output
...

-- s funkci --
...
$data1 = unpack("C*",$data1);	//convert file string to byte array
$data2 = "";
for ($i=1;$i<=$len;$i++)
	{
//	$x = ord($data1[$i]);
	$x = $data1[$i];
	$y = 0x00;
	for ($j=0;$j<8;$j++)
		{
		xor_eb($x,$y,$j,$a,$b,$e,$f,$stat);
		}
...
function xor_eb(&$x,&$y,&$j,&$a,&$b,&$e,&$f,&$stat)
{
$b = ($x>>$j) & 0x01;
$f = ($e ^ ~$b) & 0x01;	//xor
$e = $f;
$y |= $f<<$j;		//or
$stat[0] += $b;		// count 1 input
$stat[1] += $f;		// count 1 output
}
Nahlásit jako SPAM
IP: 2001:718:2601:1f7:8dd8:41...–
Reklama
Reklama
Kit+11
Guru
1. 10. 2014   #2
-
0
-

#1 peter
Předáváš té funkci zbytečně mnoho parametrů. V této podobě ta funkce nemá vůbec žádné opodstatnění.

Proč to děláš tak komplikovaně? Vždyť je to triviální úloha.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
2528 příspěvků
1. 10. 2014   #3
-
0
-

Porad lepsi reseni.
Chci tam pouzit vice funkci pro ten cyklus. Nejen xorEB, ale take treba AB, notEnotB a ruzne dalsi kombinace. na tehle prvni se snazim odladit rychlost. 4s pro 100k mi prijde hodne. Zvlast, kdyz je ambiciozni plan delat tu operaci na 1G souborech :) Tam by mi treba 30-60s prislo pripustne. Ale 4s x 10 x 1000 = 40.000s za prehnane pomale. Zvlast, kdyz v pascalu podobny program pomoci asm prikazu frci kolem minutu na 1G na starem pc.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:8dd8:41...–
Kit+11
Guru
1. 10. 2014   #4
-
0
-

#3 peter
To vypadá, jako kdybys to chtěl použít na šifrování :-)

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
2528 příspěvků
1. 10. 2014   #5
-
0
-

Nn. Historie je komplikovanejsi. Ucel je zmena usporadani bitu pro lepsi kompresi zipem. Pascalovska verze dosahovala 92-98% (cili zmenseni kolem 6%, coz by se na prvni pohled mohlo zdat bezcenne, kdyz si neuvedomis, ze to jde pouzit opakovane a v tom packalu to bylo i rychle). Ale tu budu muset jeste vystourat, kde ji mam, pac tahle mi to nedela.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:8dd8:41...–
Kit+11
Guru
1. 10. 2014   #6
-
-1
-
Mimo téma

#5 peter
PHP se na takové operace vůbec nehodí. Jeho silné stránky jsou ukryty v knihovnách. Můžeš si tu funkci napsat v PECL.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 53 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý