Hoi,
Ik was bezig om een applicatie te optimaliseren, en bij het bekijken van de door de Intel C++ Compiler (versie 9.0) gegenereerde assembly-code ontdekte ik iets vreemds: Als ik een member-variabele van mijn class gebruik, wordt deze iedere keer opnieuw uit het geheugen gelezen, zelfs als 'ie nog in een register zit.
Dit kost natuurlijk nogal wat performance. Als ik zelf aan het begin van mijn functies de member-variabelen naar locale variabelen kopieer is de code ook duidelijk sneller. Maar da's natuurlijk niet echt een fijne oplossing...
Mijn vermoeden is dat de compiler "denkt" dat meerdere threads tegelijk bij mijn objecten kunnen komen, en daarom steeds opnieuw de member-variabelen uit het geheugen haalt voor het geval dat een andere thread intussen de waarde gewijzigd heeft. Als dat inderdaad het geval is, dan moet ik op de een of andere manier de compiler duidelijk zien te maken dat dat niet kan gebeuren... Maar hoe???
Iemand een idee?
Ik was bezig om een applicatie te optimaliseren, en bij het bekijken van de door de Intel C++ Compiler (versie 9.0) gegenereerde assembly-code ontdekte ik iets vreemds: Als ik een member-variabele van mijn class gebruik, wordt deze iedere keer opnieuw uit het geheugen gelezen, zelfs als 'ie nog in een register zit.
Dit kost natuurlijk nogal wat performance. Als ik zelf aan het begin van mijn functies de member-variabelen naar locale variabelen kopieer is de code ook duidelijk sneller. Maar da's natuurlijk niet echt een fijne oplossing...
Mijn vermoeden is dat de compiler "denkt" dat meerdere threads tegelijk bij mijn objecten kunnen komen, en daarom steeds opnieuw de member-variabelen uit het geheugen haalt voor het geval dat een andere thread intussen de waarde gewijzigd heeft. Als dat inderdaad het geval is, dan moet ik op de een of andere manier de compiler duidelijk zien te maken dat dat niet kan gebeuren... Maar hoe???
Iemand een idee?