30

Kochise
:
Pollux :
tu racontes des conneries en insultant les autres
Où ça ? Où ça j'insulte ? J'emet juste de 'profondes' réserves vis-à-vis des 'extraordinaires' performances du cache, y'a rien de répréhensible à cela :/

Oué, euh, excuse-moi mais c pas vraiment profond ce que tu racontes happy (à part dans la bêtise)
Et puis si "En clair et en français dans le texte", "Va jouer chez les amateurs de spec" et "Allez, un peu d'infos pour pas pleurer idiot" c'est pas me prendre pour un con (alors que tes posts sont ridicules de la tête aux pieds), je me demande ce que c'est gol
Regarde la démonstration par l'absurde :

trilove
Pollux :
on est pas du tout dans les facteurs 10 de cache vs pas cache
Puis :

Je dis facteur 10 parce que c l'ordre de grandeur, mais effectivement je ne m'étais pas trop trompé...
Pollux
: Avec 200ko de mémoire allouée, ça prend 6.75 secondes ; en en faisant tourner 3 simultanément, ça prend exactement le même temps (tiens tiens) ; et en en faisant tourner un seul avec 3x plus de mémoire (donc ça ne tient plus du tout dans le cache) ça prend quasiment 3 minutes

Exact dans un sens, 22 fois plus rapide exactement (d'après ton test, attend la suite).

Bien, au moins tu sais compter ^^ (mais cf plus bas, sur mon ordinateur [pas celui de mes parents] le dual channel et la fréquence supérieure du bus font qu'il n'y a qu'un facteur 11).
Mais je doute fort que tous les processus s'amusent à réserver directement sur la pile avec alloca
, mais plutôt avec malloc, voire avec new (quoique j'ai pas vu de difference avec Visual C, alloca et malloc, mëme combat).

rotfl
Tu crois que le processeur fait la moindre différence entre la pile et le tas ? Les différences ne se situent qu'au niveau de la gestion qu'en fait l'OS... Au niveau de la localité en cache, la seule chose qui pourrait changer, ce serait la contiguïté des données allouées si on fait plusieurs allocations, mais ici ce n'est pas pertinent puisqu'on alloue un seul gros bloc.
Ton exemple est vicieux vu qu'il consiste à faire 100000 'simple' écritures sur la taille d'un tableau (taille passée en paramètre). Or dans un cadre d'utilisation 'normale' (c'est à dire pas juste avec des routines simples pour faire cracher les chiffres), y'a le processeur qui s'en mèle pour faire des calculs savants

Bon, je vais souligner un point où tu n'as pas entièrement tort : faire un bench de mémoire, ça ne veut pas forcément dire faire un bench réaliste. Ce qui veut dire qu'effectivement, si on fait juste un calcul qui n'a pas besoin de bande passante mémoire, le cache n'apportera rien. De même qu'un bus mémoire avec une fréquence supérieure n'apporterait rien dans ce cas-là. Mais il se trouve que, précisément, les applications ont besoin à la fois de puissance de calcul et de bande passante mémoire roll

(et, puisque tu es un "spécialiste" des 68k et 486, je pense que tu n'es pas sans savoir que la bande passante vers la mémoire principale a augmenté bcp moins vite que la puissance de calcul, d'où la nécessité de caches -- d'ailleurs on peut voir la RAM comme la première forme de cache)
des branchements divers (qui eux invalident le prefetch), etc...

Euh ? trifus

Bon allez je suis grand prince, je te fais un supermegabench pour te montrer que tous tes points sont faux :
~/bench-2004-07-11 $ cat cache-bench.c
#include <stdio.h>

int main(int argc,char **argv) {
    char *s=argv[1];
    int n=atoi(s)/sizeof(int);
    int *p=alloca(n*sizeof(int));
    int i,j,k;
    char rnd[32];
    for (i=0;i<32;i++)
        rnd[i]=(rand()%217)&1;
    for (i=0;i<30000;i++) {
        for (j=0;j<n;/* slap les smileys qui apparaissent dans le code :| */)
            for (k=0;k<32;k++,j++)
                if (rnd[k])
                    p[j]+=i;
        asm volatile(""::"g"(p));
    }
}

~/bench-2004-07-11 $ gcc -O2 cache-bench.c -o cache-bench
~/bench-2004-07-11 $ time ./cache-bench.exe 400000
./cache-bench.exe 400000 10.53s user 0.01s system 99% cpu 10.571 total
~/bench-2004-07-11 $ time (./cache-bench.exe 400000|./cache-bench.exe 400000|./cache-bench.exe 400000)
(; ./cache-bench.exe 400000 | ./cache-bench.exe 400000 | ./cache-bench.exe ; ) 10.31s user 0.01s system 33% cpu 31.141 total
~/bench-2004-07-11 $ time ./cache-bench.exe 1200000
./cache-bench.exe 1200000 59.00s user 0.00s system 97% cpu 1:00.61 total

(j'ai pris des tailles 2x plus grandes parce que là je suis sur un Barton avec 512ko de cache)
Comme tu peux le constater, il y a :
* des lectures
* des écritures
* des calculs
* des branchements totalement imprédictibles (car aléatoires) à chaque itération
Et en plus une bonne partie du coût (test de rnd[k] et incrémentation) ne dépend pas du fait que le tableau "p" réside en cache ou non. (et accessoirement, on accède au tableau "p" 2x moins souvent que dans l'exemple d'avant)

Et pourtant, on remarque un facteur 6x de différence ! (contre 11x si on ne rajoute pas les branchements imprédictibles)

Note que les branchements sont effectivement imprédictibles, il y a une différence de 1.5 secondes si j'affecte des constantes (tjs 0 ou tjs 1) à rnd[k]... (et ce n'est pas une optimisation du compilo)
Mon processeur, un Athlon 1700+ (L1 core et data de 64 Ko, L2 de 256 Ko, même caractéristiques que ton 2600+), donne les résultats suivant avec ton code avec comme paramètre :

40000 -> 7 secondes
80000 -> 15 secondes (sortie du cache L1 de 65536 octets)
160000 -> 30 secondes
320000 -> 70 secondes (sortie du cache L2 de 262144 octets)
480000 -> 152 secondes
Je ne suis pas allé à 600000, vu que ce n'était pas la peine !

L'absence de différence L1-L2 est probablement normal, à cause de l'overhead de la boucle.
Et note que ton cache L2 est exclusif, donc la sortie du cache L2 se fait à 320ko... Tu peux peut-être essayer un peu plus loin, mais ça m'étonne que tu ne trouves qu'un facteur 1.7 entre L2 et RAM hum
Ce n'est donc MEME PAS 2 fois plus rapide, alors je ne comprend pas ton résultat de 22 fois (154.7/6.73) :/ Cette différence de 68% je l'obtient aussi sur mon 68030 (71% dans son cas) avec deux caches de 256 octets (on ne rit pas dans la salle, SVP) !

Moué, uploade ton binaire sur yN pour voir... (lien Upload à côté du formulaire de post)
Dans l'exemple de PhotoShop, si tu ne veux pas entendre parler de la taille des routines executées par le processeur (ce qui concerne en fait le cache d'instruction) mais plutôt les données traitées (comme dans ton exemple), tu ne fais à peine tenir dans les 256 Ko de ton cache de donnée qu'une image de 320*240 en 24 bits.

Sauf que les algos sont précisément conçus pour avoir une bonne localité en cache, i.e. faire 42 passes sur chaque pixel (et ceux aux alentours) plutôt que faire 42 passes sur toute l'image...
Pas très très représentatif des résolutions de la mort des cartes 3D actuelles, plutôt genre 1280*1024 (2.5 Mo en 16 bits, le double en 32 bits).

N'importe quoi. On peut avoir une bonne localité en cache même en 3d (et j'en sais qqch wink d'ailleurs faudrait que je m'y remette ^^)
Je suis d'accord en ce qui concerne les perfs de l'IWRAM de la GBA, vu la taille de l'écran et donc la mémoire à traiter, mais ce n'est pas aussi recevable en ce qui concerne les PC. Eux, ce qui peu allègrement les booster, ce serait une utilisation plus massive des instructions SIMD (qui peuvent elles accélérer jusqu'à 8 foix le calcul), trop régulièrement snobées par les codeux. En s'accroche trop souvent au cache ou à la FSB... Quoique ça aide (à hauteur de 68% donc) smile

Connais pas.
(mais *moi* je vais pas m'exprimer sur qqch que je connais pas tongue)
Pour te faire penser à ce que je viens de te dire, dis toi 'simplement' que l'un des composant essentiel du noyau de Windows, kernel32.dll, fait 'juste' 972 Ko. Bien sûr, il n'est pas chargé en entier dans le cache, juste les parties executées régulièrement. Mais kernel32.dll est loin d'être le seul composant appelé, y'a aussi gdi32.dll, 251 Ko !

gol
cf les posts ci-dessus
D'ailleurs au fait, si on avait voulu optimiser un poil avec une vieille ruse d'apache, un 'for (i=100000-1;i>0;i--)' puis un 'for (j=n-1;j>0;j--)' auraient étés plus judicieux (pas de chargement de valeur, juste une comparaison avec 0). Mais bizarrement, c'est 45% plus lent sur un Athlon =:/ Va comprendre...

L'optimisation x86 moderne et l'optimisation 68k, c pas vraiment pareil...
Et désolé de briser ton rève et de jouer un peu le garde-fou.

laughtlaughtlaught

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

31

Pas de réponse ? Pourtant
(14/07/04) 23:08 @Boo: Kochise n'a pas été vu depuis 14h15m11s (08:52:59)
...
J'aimerais tant pouvoir approfondir mes connaissances sur les caches et sur les OS multitâches cheeky

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

32

#couteau# => #plaie# grin
docouic.gif

33

Pollux :
Pas de réponse ? Pourtant [...] J'aimerais tant pouvoir approfondir mes connaissances sur les caches et sur les OS multitâches cheeky


C'est si important ? Manifestement je n'ai rien à t'apprendres, et moi je vais aller réviser ma copie... Je ne comprend toujours pas d'où vient ton 22x, on doit pas avoir le même coeur Athlon (je doit avoir un bon vieux palomino et toi un barton) :/ Je vais voir ça en détail...

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

34

Je suis d'accord en ce qui concerne les perfs de l'IWRAM de la GBA, vu la taille de l'écran et donc la mémoire à traiter, mais ce n'est pas aussi recevable en ce qui concerne les PC.
L'écran se trouve en VRAM, et on l'y laisse (il y a le double buffering qui est là pour ça). On ne va jamais mettre un écran entier en IWRAM... Il fait 240x160 (38400 octets en mode 8 bits, 76800 en mode 16 bits) et l'IWRAM est de 32000 octets...
Pour l'accès en mémoire, on peut toujours mettre la plupart de ses données et variables en EWRAM (RAM très très lente de 256 ko) sans voir de différence notable, même en cas d'accès intensif. Il n'y a qu'avec le code exécutable qu'on voit vraiment une très grande différence selon la mémoire utilisée.
Cela dit, je n'ai pas fait de tests sur PC mais j'avoue que tes résultats m'étonnent vraiment beaucoup Pollux. hum
[Edit] Pour parler de mes tests (ce n'est pas des benchs mais des mises en pratique). Je parle de la GBA; la différence ne doit quand même pas être si grande que ça. J'ai essayé de mettre la RAM à 1 waitstate au lieu de 2. Le résultat est invisible, et ce même dans Balle en mode interpolé. Dans ce cas mon écran se trouve bien en RAM (il s'agit d'une bitmap), et pour ensuite faire un rendu interpolé (PC -> GBA) à déplacer sur la VRAM, tu vois bien les accès vraiment intensifs requis. Mais non, il n'y a quasi pas de différence.
Maintenant, si je mets le MULTIBOOT (le code sera complètement copié en RAM), alors en modifiant ce paramètre, je passe de 49% de CPU à 25%! Donc voilà pourquoi je me permets d'émettre de très sérieux doutes en ce qui concerne tes résultats... tongue car pour ta simple boucle
    for (i=0;i<100000;i++) { 
        for (j=0;j<n;j++) 
            p[j]=i;
Il doit au moins y avoir 128 bits de code à lire pour chaque itération (ou même bien plus en fait) - code qui sera de toutes façons en cache car il est petit - alors que l'accès en mémoire est seulement 32 bits. Donc le rapport est minuscule; là où tu verras une différence, ce n'est pas l'endroit où se trouve ton tableau, mais l'endroit où se trouve ton code... maintenant il se peut que le système de cache de ton processeur (ou ton OS) soit tellement mal foutu qu'il ait viré carrément tout du cache dans ton exemple (code & tableau) lorsque tu dépasses la taille, ce qui expliquerait déjà un peu plus tes résultats :]
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

35

Brunni :
Cela dit, je n'ai pas fait de tests sur PC mais j'avoue que tes résultats m'étonnent vraiment beaucoup Pollux. hum
[Edit] Pour parler de mes tests (ce n'est pas des benchs mais des mises en pratique). Je parle de la GBA; la différence ne doit quand même pas être si grande que ça. J'ai essayé de mettre la RAM à 1 waitstate au lieu de 2. Le résultat est invisible, et ce même dans Balle en mode interpolé. Dans ce cas mon écran se trouve bien en RAM (il s'agit d'une bitmap), et pour ensuite faire un rendu interpolé (PC -> GBA) à déplacer sur la VRAM, tu vois bien les accès vraiment intensifs requis. Mais non, il n'y a quasi pas de différence. Maintenant, si je mets le MULTIBOOT (le code sera complètement copié en RAM), alors en modifiant ce paramètre, je passe de 49% de CPU à 25%!

Hmm tu ne donnes pas ttes les informations (où est le code en non-multiboot, que veut dire le %age d'utilisation du CPU)
Donc voilà pourquoi je me permets d'émettre de très sérieux doutes en ce qui concerne tes résultats... tongue car pour ta simple boucle
    for (i=0;i<100000;i++) { 
        for (j=0;j<n;j++) 
            p[j]=i;
Il doit au moins y avoir 128 bits de code à lire pour chaque itération (ou même bien plus en fait)

Oui (mais y a p-ê un peu moins de 128 bits de code #titillage pawa tongue#)
- code qui sera de toutes façons en cache car il est petit -

Oui
alors que l'accès en mémoire est seulement 32 bits.

Oui
Donc le rapport est minuscule;

Oui, le rapport *de taille* est minuscule...
là où tu verras une différence, ce n'est pas l'endroit où se trouve ton tableau, mais l'endroit où se trouve ton code...

Alors là, non : ce qui se passe, c que comme le code est à un endroit ultra-rapide (le cache de code L1), ce n'est pas parce que ça représente 80% de la taille des données lues que ça représente 80% du tps passé à les lire... Et donc si les données manipulées ne sont pas en cache, ça ne représente qu'une fraction du volume total et pourtant c'est ça qui va prendre la majeure partie du tps...
maintenant il se peut que le système de cache de ton processeur (ou ton OS) soit tellement mal foutu qu'il ait viré carrément tout du cache dans ton exemple (code & tableau) lorsque tu dépasses la taille, ce qui expliquerait déjà un peu plus tes résultats :]

Euh nan, les ingénieurs de chez AMD sont pas si débiles que ça tongue (et il y a des caches séparés pour le code et les données, d'ailleurs)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

36

Hmm tu ne donnes pas ttes les informations (où est le code en non-multiboot, que veut dire le %age d'utilisation du CPU)

Le code non-multiboot est en EWRAM. On peut faire un calcul assez simple, étant donné que la majorité des instructions prennent un cycle.
ROM, accès 32 bits: 8 cycles
IWRAM, accès 32 bits: 1 cycle
A cela on rajoute 1 cycle pour l'exécution, ça donne respectivement 9 et 2 cycles. Et justement, quand je benche, j'obtiens bien des différences entre 4 et 4.5x selon les accès mémoire effectués, donc c'est bien respecté.
Oui, le rapport *de taille* est minuscule...

Je ne veux pas me prononcer sur un sujet que je ne connais pas, mais la démonstration de la différence entre l'IWRAM et la ROM sur GBA est bien là. Imagine qu'il faille 3 ou 4 instructions par itération de ta boucle, ça donnerait:
ROM: 27 cycles
IWRAM: 6 cycles
A cela tu rajoutes le temps d'accès au tableau entre-deux, qui serait par exemple de 1 cycle si il est en IWRAM, et 6 cycles s'il est en RAM. Dans les deux cas:
ROM: 28/33 cycles
IWRAM: 7/12 cycles
L'écart ne s'est pas creusé tant que ça. Donc même si tu mets ton tableau en RAM (lente) et que ton code est exécuté en IWRAM, la différence sera relativement grande, mais loin des 22x (2x au pire des cas). Dans l'autre cas, code en ROM et tableau en IWRAM... la différence entre RAM ou IWRAM n'est plus signifiante; mais c'est et ce sera toujours beaucoup plus lent que l'autre solution.
Euh nan, les ingénieurs de chez AMD sont pas si débiles que ça (et il y a des caches séparés pour le code et les données, d'ailleurs)

#preuve#? cheeky (mais de toutes façons ça ne change rien au problème, je ne vois vraiment pas d'où viennent tes 22x)
Mais sur PC il y a peut-être des optimisations spéciales, comme la possibilité pour le processeur de lire, écrire et exécuter en même temps sur le cache, cela sans waitstate et en un cycle... ce qui pourrait rendre ta copie software aussi rapide qu'en DMA. Mais je n'y crois pas trop... tongue
D'ailleurs si tu veux vraiment tester la vitesse de ton cache, je te suggère plutôt de passer par le DMA... le processeur n'a pas d'influence au moins dans ce cas et tu verras vraiment la vitesse d'accès brute... wink
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

37

Oué mais les contrôlleurs dma sur les cartes mères ne gèrent plus le transfert mémoire à mémoire depuis un bon moment il me semble. Faudrait vérifier.

38

Bof, je n'ai moi même toujours pas trouvé d'explication rationnelle :/ Prennons son Athlon XP 2600+ qui tourne à 2133 MHz et prenons le cas extrème où Pollux à une vieille carte mère avec de la SDRAM 100 MHz. C'est le seul cas ou l'on pourrait s'approcher de ses 22x : 2133 MHz / 100 MHz = 21.3x. Le code serait executé à 100 Mhz depuis la SDRAM, mais à 2133 MHz depuis le cache L1.

Mais je ne pense pas que Pollux se contente d'une 'minable' SDRAM à 100 MHz. Imaginons qu'il dispose de DDR à 226 MHz : 2133 MHz / 266 MHz = 8x :/ Pollux, c'est quoi ta mémoire ? Moi avec mon 1700+ et ma DDR à 266 MHz je devrait obtenir un facteur de 5.5x (1466 MHz / 266 MHz), or j'ai du mal à atteindre le 2x (100%, en fait au max 68cheeky :/

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

39

Brunni
:
Oui, le rapport *de taille* est minuscule...

Je ne veux pas me prononcer sur un sujet que je ne connais pas, mais la démonstration de la différence entre l'IWRAM et la ROM sur GBA est bien là. Imagine qu'il faille 3 ou 4 instructions par itération de ta boucle, ça donnerait:
ROM: 27 cycles
IWRAM: 6 cycles
A cela tu rajoutes le temps d'accès au tableau entre-deux, qui serait par exemple de 1 cycle si il est en IWRAM, et 6 cycles s'il est en RAM. Dans les deux cas:
ROM: 28/33 cycles
IWRAM: 7/12 cycles L'écart ne s'est pas creusé tant que ça. Donc même si tu mets ton tableau en RAM (lente) et que ton code est exécuté en IWRAM, la différence sera relativement grande, mais loin des 22x (2x au pire des cas). Dans l'autre cas, code en ROM et tableau en IWRAM... la différence entre RAM ou IWRAM n'est plus signifiante; mais c'est et ce sera toujours beaucoup plus lent que l'autre solution.

OK, tu as qd même un facteur 2 IWRAM vs RAM, c'est déjà pas mal pour une architecture assez vieille comme celle de la GBA... (plus haut ds le topic il me semble avoir dit que les cache prennent de plus en plus d'importance et qu'il y en a de plus en plus de différents) Ce qui se passe sur un processeur récent (genre, athlon xp), c'est que tout le contenu de la boucle hors accès mémoire se fait en un ou deux cycles (si si !), et que l'accès mémoire se fait en parallèle (et il prend un cycle en L1, deux en L2), donc la boucle entière fait seulement 2 cycles ; si tu passes en RAM externe, c'est bcp plus lent parce qu'un accès RAM prend facilement une 20aine de cycles... (je n'ai plus du tt les chiffres en tête, c un vague ordre de grandeur)
Euh nan, les ingénieurs de chez AMD sont pas si débiles que ça (et il y a des caches séparés pour le code et les données, d'ailleurs)

#preuve#? cheeky

cf google embarrassed
(mais de toutes façons ça ne change rien au problème, je ne vois vraiment pas d'où viennent tes 22x)

Bah c tout simple : entre un tableau d'affichage géant collé au processeur comme un cache (qui, en contrepartie, ne peut pas stocker bcp d'information) et une bibliothèque de 1 Go où il faut fouiller partout pour trouver un bit d'information, y a comme une différence ^^ (mais les deux ont leur intérêt, je te souhaite bonne chance pour mettre ta bibliothèque sur panneaux d'affichage géants)
Mais sur PC il y a peut-être des optimisations spéciales, comme la possibilité pour le processeur de lire, écrire et exécuter en même temps sur le cache, cela sans waitstate et en un cycle... ce qui pourrait rendre ta copie software aussi rapide qu'en DMA. Mais je n'y crois pas trop... tongue

Ben si, c'est fait pour. L'avantage, c que c bien plus flexible qu'un DMA (tu peux incrémenter tt le contenu d'une zone mémoire si ça te fait plaisir) et que ça te fournit des choses qu'un DMA externe au proc ne te fournirait pas (notamment, avoir les mêmes caches que ceux du proc)
D'ailleurs si tu veux vraiment tester la vitesse de ton cache, je te suggère plutôt de passer par le DMA... le processeur n'a pas d'influence au moins dans ce cas et tu verras vraiment la vitesse d'accès brute... wink

Il y a des DMA dans le proc ? (j'en sais rien, c juste une question innocente, hein ^^)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

40

Ben si, c'est fait pour. L'avantage, c que c bien plus flexible qu'un DMA (tu peux incrémenter tt le contenu d'une zone mémoire si ça te fait plaisir) et que ça te fournit des choses qu'un DMA externe au proc ne te fournirait pas (notamment, avoir les mêmes caches que ceux du proc)
Ha ben quand on sait tout. Oui dans ce cas là alors je comprends mieux. Si tout se fait en parallèle... c'est super! love
Il y a des DMA dans le proc ? (j'en sais rien, c juste une question innocente, hein ^^)
Non, les contrôleurs DMA se trouvent sur ta carte mère. Ils n'ont rien à voir avec le processeur (d'ailleurs sur GBA, le DMA stoppe carrément le CPU car la mémoire vidéo mise à part, il n'est pas possible pour deux composants d'accéder en même temps à la mémoire).
OK, tu as qd même un facteur 2 IWRAM vs RAM, c'est déjà pas mal pour une architecture assez vieille comme celle de la GBA...
Non, la différence est plus grande. Le timing de la RAM est 3/3/6 (cycles pour accès 8/16/32 bits) et l'IWRAM 1/1/1...
L'architecture n'est pas si vieille que ça en fait. Mis à part le chip graphique (qui est une version "light" de celui de la SNES avec des trucs en plus et d'autres en moins), la GBA n'a aucun rapport avec la Super Nintendo, et son architecture non plus.
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741

41

Brunni
:
Ben si, c'est fait pour. L'avantage, c que c bien plus flexible qu'un DMA (tu peux incrémenter tt le contenu d'une zone mémoire si ça te fait plaisir) et que ça te fournit des choses qu'un DMA externe au proc ne te fournirait pas (notamment, avoir les mêmes caches que ceux du proc)
Ha ben quand on sait tout. Oui dans ce cas là alors je comprends mieux. Si tout se fait en parallèle... c'est super! love

Dans la mesure où on peut pas augmenter énormément la fréquence des processeurs, y a plein de choses qui se font en parallèle, oué...
Il y a des DMA dans le proc ? (j'en sais rien, c juste une question innocente, hein ^^)
Non, les contrôleurs DMA se trouvent sur ta carte mère. Ils n'ont rien à voir avec le processeur (d'ailleurs sur GBA, le DMA stoppe carrément le CPU car la mémoire vidéo mise à part, il n'est pas possible pour deux composants d'accéder en même temps à la mémoire).

OK, mais je ne pense pas que ça accélère quoi que ce soit, alors... (et ça va même ralentir si c dans le cache)
OK, tu as qd même un facteur 2 IWRAM vs RAM, c'est déjà pas mal pour une architecture assez vieille comme celle de la GBA...
Non, la différence est plus grande. Le timing de la RAM est 3/3/6 (cycles pour accès 8/16/32 bits) et l'IWRAM 1/1/1...

Oué nan mais je parlais du truc cumulé, merci je sais lire triroll
L'architecture n'est pas si vieille que ça en fait. Mis à part le chip graphique (qui est une version "light" de celui de la SNES avec des trucs en plus et d'autres en moins), la GBA n'a aucun rapport avec la Super Nintendo, et son architecture non plus.

Et ? Les ARM, c pas hyper jeune non plus...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

42

( Kevin, sors du corps de Kochise sad )
"I read the game.dll assembly more easily than you read the joke on the back of your box of Cocoa Pebbles, and have spent the past 2 1/2 years navigating it." ©

43

bah s'il s'y sent bien
*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & sabrina

44

p_y_a :
( Kevin, sors du corps de Kochise sad )

bah en même tps comme Kevin vient moins souvent, Kochise aussi love

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

45

Hu ? Kikikecai Kevin ? Moi je suis surtout dans la section ATARI : topics/45255-format-des-fichiers-gfa

Kochise
avatar
Si Dieu m'a de nouveau fait homme, cette fois il m'a pas raté : marcher sur l'eau et dupliquer les pains, ça marche p'us :/

46

rotfl
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

47

p_y_a :
( Kevin, sors du corps de Kochise sad )

tritoptrilove
In many respects the Yoshi is like a beautiful woman. A man can come so enamoured that he bestows on her all his time, his energy and his fortune.
- Fred whipple, 1960

*** Ne sous-estimez pas la puissance de la Marmotte ***
© Marmotte Team : LaMarmotte, sBibi, Vark & Sabrina