Galere avec les pointeurs, PokeF, Memory Viewer

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Galere avec les pointeurs, PokeF, Memory Viewer

Message 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 ?
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: Galere avec les pointeurs, PokeF, Memory Viewer

Message par ker2x »

Ha bein oui j'avais raté un truc :mrgreen: :mrgreen: :mrgreen: :mrgreen:

c'est pas (plots*SizeOf(Float)) mais (k*SizeOf(Float))

Quel cretin je fais ... :oops:
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: Galere avec les pointeurs, PokeF, Memory Viewer

Message 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.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Galere avec les pointeurs, PokeF, Memory Viewer

Message par djes »

:x 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.
ker2x
Messages : 61
Inscription : dim. 11/mai/2008 7:27

Re: Galere avec les pointeurs, PokeF, Memory Viewer

Message 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 :mrgreen:

Encore un petit effort, et je pourrai m'attaquer a l'optimisation du code FASM en reecrivant tout ca avec des instruction SSE3 :mrgreen:
(alors que si ca fait des call, je peux rien y faire ... )
Répondre