agent.UpdateBrain() // 27%
- brain.Update() // 13%
This indicated that there was something expensive happening inside agent.UpdateBrain() that was taking up 14% of processing time. For a while, I thought that the 14% was due to the array copying part in agent.UpdateBrain(). However, I had misread the profiling information.
To get the figure, 13%, for brain.Update(), I took the processing time taken up by children functions of brain.Update() and divided by the total processing time. However, I accidentally left out the processing time by brain.Update() itself.
I re-enabled the array copying part, but this time I made sure to read the profiling information correctly:
agent.UpdateBrain() // 39%
- brain.Update() // 37%
I disabled the array copying part just to make sure:
agent.UpdateBrain() // 39%
- brain.Update() // 37%
I could now be sure that the array copying part in agent.UpdateBrain() was taking up very little time.
index time self children called name
[4] 40.1 0.23 167.77 10001 TSimulation::UpdateCritters()
- 'index' is the identification number of your function
- 'time' is the percentage of time your program spends in your function
- 'self' is the number of seconds your program spends in your function, not counting the number of seconds in children functions
- 'children' is the number of seconds your program spends in children functions
- 'name' is the name of your function
[6] 39.8 0.04 5.18 35327 critter::UpdateBrain() [6]
2.51 2.67 35327/35327 brain::Update(float) [7]
glReadPixels() occurs in critter::UpdateBrain(). I've been thinking for a while that glReadPixels() was causing a lot of slow down but really the slow down was because of brain::Update().
So that leaves 3 places for improving performance: neural network update, drawing and agent communication.
Simple ways to improve drawing performance are to use a frustum and to switch from display lists to vertex buffers.
A simple way to improve agent communication is to use a spatial data structure.
No comments:
Post a Comment