Ik heb het volgende stukje code:
Met 16 miljoen vertices duurt het bovenstaande zo'n 10 seconden. De fetchheigth sample member functie is leeg, returned gewoon 0.
Nu heb ik ook die blaat() functie gemaakt die leeg is en 0 returned (wordt zeker niet inlined) en dan duurt het 0,5 seconden.
Dus een indirectie member functie herhaaldelijk aanroepen is 20 keer zo traag als een gewone functie aanroep. Ik vind dat vreemd gedrag, je zou denken dat het wel gecached wordt in L1 of L2.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| void piCurveRecurse(int level, int x, int y) { if (level > 1) { /* recurse */ level >>= 1; piCurveRecurse(level, x, y); piCurveRecurse(level, x, y+level); piCurveRecurse(level, x+level, y+level); piCurveRecurse(level, x+level, y); } else { /* output vertex */ nodesoutput++; //Gaia::blaat(x, y); heightsamples->fetchHeightSample(x, y); } } |
Met 16 miljoen vertices duurt het bovenstaande zo'n 10 seconden. De fetchheigth sample member functie is leeg, returned gewoon 0.
Nu heb ik ook die blaat() functie gemaakt die leeg is en 0 returned (wordt zeker niet inlined) en dan duurt het 0,5 seconden.
Dus een indirectie member functie herhaaldelijk aanroepen is 20 keer zo traag als een gewone functie aanroep. Ik vind dat vreemd gedrag, je zou denken dat het wel gecached wordt in L1 of L2.