webForumDet fria alternativet

Debug vs Release

C/C++

6 svar · 441 visningar · startad av Alpha II

Medlem sedan maj 20002 993 inlägg
Frågan#1

Vad är skillnaden mellan debug och release när man kompilerar?

Jag får enorma prestandaskillnader mellan debug och release. I debug får jag kanske 8-10 fps medans jag i release fpr 250 fps. Det är helt omöjligt att testa programmet i Debug mode med den prestandan. Med tanke på den enorma skillnaden så antar jag att nåt kompileras lite konstigt i debug mode.

Den del av koden som utgör hela skillnaden är denna:

void CModel::Render()
{
//	glColor3ub(120,120,120);
	for (u_int32_t n=0; n < objects.size(); n++)
	{
		glPushMatrix();
		if (objects[n].tX != 0 || objects[n].tY != 0 || objects[n].tZ != 0)
		{
			glTranslatef(objects[n].tX, objects[n].tY, objects[n].tZ);
		}

		if (objects[n].rA != 0 || objects[n].rX != 0 || objects[n].rY != 0 || objects[n].rZ != 0)
		{
			glRotatef(objects[n].rA, objects[n].rX, objects[n].rY, objects[n].rZ);
		}

		if (objects[n].sX != 0 || objects[n].sY != 0 || objects[n].sZ != 0)
		{
			glScalef(objects[n].sX, objects[n].sY, objects[n].sZ);
		}

		for (u_int32_t p=0; p < objects[n].faces.size(); p++)
		{
			
			//CTextureManager::GetInstance()->BindTexture(objects[n].tris[p].textureIndex);
			glBegin(GL_TRIANGLES);
			
				glNormal3f(objects[n].faces[p].points[0].normal.x,
					  	   objects[n].faces[p].points[0].normal.y,
						   objects[n].faces[p].points[0].normal.z);
				glTexCoord2f(objects[n].faces[p].points[0].u,
						     objects[n].faces[p].points[0].v);
							 
				glVertex3f(objects[n].faces[p].points[0].x, 
						   objects[n].faces[p].points[0].y,
						   objects[n].faces[p].points[0].z);

				
				glNormal3f(objects[n].faces[p].points[0].normal.x,
						   objects[n].faces[p].points[0].normal.y,
						   objects[n].faces[p].points[0].normal.z);
				glTexCoord2f(objects[n].faces[p].points[1].u,
						     objects[n].faces[p].points[1].v);
							 
				glVertex3f(objects[n].faces[p].points[1].x, 
						   objects[n].faces[p].points[1].y,
						   objects[n].faces[p].points[1].z);

				
				glNormal3f(objects[n].faces[p].points[0].normal.x,
						   objects[n].faces[p].points[0].normal.y,
						   objects[n].faces[p].points[0].normal.z);
				glTexCoord2f(objects[n].faces[p].points[2].u,
						     objects[n].faces[p].points[2].v);
							 
				glVertex3f(objects[n].faces[p].points[2].x, 
						   objects[n].faces[p].points[2].y,
						   objects[n].faces[p].points[2].z);
			glEnd();
			

		}
		glPopMatrix();
	}
}

Väldigt rena OpenGL kommandon tycker jag. Det som kanske gör skillnad är att alla arrayer här är vector klasser från STL. Kan det vara där prestandaförlusten kommer ifrån?

Medlem sedan juni 20034 013 inlägg
#2

Re: Debug vs Release

Alpha II skrev:

Vad är skillnaden mellan debug och release när man kompilerar?

Enkelt förklarat, blir det något fel när du kör programmet kan du se var i källkoden felet inträffat om du kör debug.

Debug ska du alltså bara använda när du behöver felsöka. Release är när programmet är som vanligt.

Medlem sedan maj 20002 993 inlägg
#3

Så man skall inte använda debug när man utvecklar, utan bara när programmet krånglar? Det är inte så att man inte märker vissa fel i release eller nåt liknande?

Medlem sedan juni 20034 013 inlägg
#4

Alpha II skrev:

Det är inte så att man inte märker vissa fel i release eller nåt liknande?

Nja, du får varningar i debug som inte kommer i release.

Medlem sedan maj 20002 993 inlägg
#5

Med lite minskad användning av [] operatorn för vektorerna har jag lyckats öka min fps från 0.1 till 8, men fortfarande långt ifån de 50 jag får i release-mode.

Hur kommer det sig att [] operatorn fär vector är så slö i debug?

Vad kan jag göra mer för att öka hastigheten?
Just denna funktion som jag postade i första inlägget är otroligt långsam. Bara för att den ritade upp några boxar så sjönk fpsen väldigt väldigt mycket.

Medlem sedan juni 20008 205 inlägg
#6

Alpha II skrev:

Hur kommer det sig att [] operatorn fär vector är så slö i debug?

En (okvalificerad) gissning är att den i debug gör bounds checking, men inte i release.

Medlem sedan juni 200010 432 inlägg
#7

Om det är så, så torde det underlätta att istället köra med en egendefinierad vector.

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)