Page 1 sur 1
Galere avec les pointeurs, PokeF, Memory Viewer
Publié : jeu. 28/janv./2010 21:28
par ker2x
Un petit bout de code simple
Code : Tout sélectionner
Global *RandomBuffer = AllocateMemory(2 * plots * SizeOf(Float))
[...]
For k = 0 To plots*2
Define.f tmp
tmp = (Random(RandMax)/(RandMaxBy4)) - 2.0
PokeF(*RandomBuffer + (plots*SizeOf(Float)),tmp)
Next k
J'utilise le variable viewer pour recuperer l'adresse de *RandomBuffer, puis le memory viewer pour voir le contenu de RandomBuffer ...
Et j'ai que des 00 ...
J'ai raté un truc ?
Re: Galere avec les pointeurs, PokeF, Memory Viewer
Publié : jeu. 28/janv./2010 21:43
par ker2x
Re: Galere avec les pointeurs, PokeF, Memory Viewer
Publié : jeu. 28/janv./2010 22:05
par ker2x
Heuuu ... ca rame grave !!
Ca fait un appel de fonction a chaque Peek et a chaque Poke, c'est ignoble.
Comment je peux y acceder directement ?
Parce que la... je voulai accelerer mon code et j'ai perdu 20% de perf rien qu'a cause de ca ...
Ca sert a rien que je continue a optimiser si j'ai pas reglé cette enorme perte avant.
Re: Galere avec les pointeurs, PokeF, Memory Viewer
Publié : jeu. 28/janv./2010 22:16
par djes

tu veux ma mort?
Envoie un code convenable, stp. Là, tu n'utilises pas k dans ta boucle (donc tu écris toujours au même endroit), tu débordes de ton buffer avec une boucle 0..max au lieu d'une boucle 0..max-1, tu fais un define dans la boucle(?!), et tu utilises un tmp qui ne sert à rien.
Re: Galere avec les pointeurs, PokeF, Memory Viewer
Publié : jeu. 28/janv./2010 22:28
par ker2x
Y'a du mieux
Code : Tout sélectionner
Structure RandomStruct
r.f
EndStructure
Global Dim randomBuffer.RandomStruct(plots*2)
Define *pointeur.randomStruct = @randomBuffer()
For k = 0 To plots*2
Define.f tmp
tmp = (Random(RandMax)/(RandMaxBy4)) - 2.0
*pointeur\r = tmp
*pointeur + SizeOf(randomStruct)
Next k
J'aurai aimé faire mieux.
C'est pas tres classe, mais au moins le code FASM généré me fait
un peu moins hurler a la mort
Encore un petit effort, et je pourrai m'attaquer a l'optimisation du code FASM en reecrivant tout ca avec des instruction SSE3
(alors que si ca fait des call, je peux rien y faire ... )