bonsoir! j'aurais une question sur de l'optimisation de code.
j'essaye de reproduire le comportement de la librairie graphique SDL, c'est pour un jeu. littéralement, c'est des tableaux de nombres entiers qui représentent des matrices de pixels 2d (32 bits, 8 bits par canal, RGBA mais l'alpha n'est pas utilisé). ces objets sont décrits comme suit:
http://pastebin.com/SjHn4xVi
il y a une fonction utilitaire (qui n'est pas utilisée ici), la structure d'image 2d, et une fonction qui va coller une image sur une autre image de la manière la plus simple possible, il n'y a même pas de gestion des images tronquées par le bord de la surface de réception ATM.
elles sont utilisées dans une espèce de benchmark qui va appliquer 60000 fois une image de 128x128 pixels de couleur aléatoire sur une autre de ces images, d'une taille de 512x768 pixels.
http://pastebin.com/mH7pVSm5
cet endroit du code est appelé une fois par frame, et on atteint une cadence d'image de une image par seconde, ce qui veut dire que je parviens à blitter 60000 images par seconde. c'est un peu les performances que je recherchais, mais le problème... c'est que je plafonne
tout se fait dans la fonction du premier pastebin, flatVirtualSurfaceOnVirtualSurface, et la manipulation de nombres sur 16 bits au lieu de 32, l'utilisation de blocs mémoires compacts au lieu de tableaux de pointeurs (avec multiplication de l'index vertical par des puissances de 2, donc décalage de bits, c'est supposé être rapide
), la duplication de la ligne d'attributions des pixels dans le for pour profiter de cet espèce d'effet de latence du processeur, l'utilisation d'une surface de réception de la taille de l'image source pour augmenter les chance de ne pas déborder du cache du processeur, n'ont pratiquement aucun effet sur le nombre d'images collées par seconde. je reste à 60000. est-ce que vous voyez une manière d'accélérer les choses?
d'avance, merci 