Gå til innhold

[Løst] vector push_back, tregt


Anbefalte innlegg

Fant ut av det nå.

temp = i%width;

Dette kjøres 1-1.5M ganger, det som tar mesteparten av tiden. Det er tydeligvis 2x raskere per Hz med en c2d prosessor enn en phenom II prosessor.

 

Orginalt innlegg

Hei, jeg skriver noe c++ kode som jeg gjerne vil skal gå rimelig raskt. Det er absolutt ikke noe pen eller høykvalitetskode.

 

void funksjon1(vector&--#60;unsigned char&--#62; &thumbs, int bpos[], int width, unsigned char *bokstaver)
thumbs.erase (thumbs.begin(),thumbs.end());
for(int i=bpos[pos];i&--#60;=((bpos[pos+2]*width)+bpos[pos+1]);i++)
{
	temp = (i%width);
	if(temp&--#62;=bpos[pos] && temp&--#60;=bpos[pos+1])
	{
		if(bokstaver[i]&--#62;100)
		{
			thumbs.push_back (0);
		}else
		{
			thumbs.push_back (1);
		}
	}
}

Denne koden tar en firkant av et større gråskala bilde til svart hvitt vektor. Dette gjøres mange ganger, og "vector&--#60;unsigned char&--#62;thumbs " blir aldri større enn rundt 5000. Derfor bruker jeg

thumbs-&--#62;reserve(10000);

før jeg begynner å kalle "funksjon1". Funksjonen blir kalt ca 200 ganger, og den returnerer en thumbs funksjon på mellom 2000 og 5000 unsigned chars hver gang.

 

På min c2d laptop (2.53GHz penryn 3MB L2) tar all koden min rundt 500/280 ms debug/release mode. På min Phenom II på 3,6 GHz tar det hele koden 800/510 ms. Og 700/490 ms av koden går kun til den funksjonen, noe som jeg synes er merkelig ettersom kun en brøkdel av antall push_backs skjer i denne funksjonen.

 

Noen peiling?

Endret av O:M:A
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...