Logicielsmoto.com

Nous sommes le 28 Mar 2024, 15:43

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 276 messages ]  Aller à la page Précédente  1 ... 10, 11, 12, 13, 14, 15, 16 ... 19  Suivante
Auteur Message
MessagePosté: 21 Avr 2021, 20:04 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Neotenien a écrit:
(...) je suis quasi ingénieur informatique au CNAM et j'en ai fait de l'optimisation de code déjà (par exemple avec le tri knuth ou des optim de calcul d'inversion de matrice).

Je me disais aussi --> :bien:


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Avr 2021, 13:59 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Samuel Devulder a écrit:
L'algo de division est séquentiel. Le tour suivant attends le résultat complet de l'étape antérieure avant de pouvoir décider si tel nombre est plus grand ou plus petit que tel autre (ce qui permet de savoir si le bit du diviseur est à 0 ou 1). Il lui faut donc beaucoup de temps pour obtenir tous les bits. Remarquons aussi que c'est le cas de la multiplication classique telle qu'implémentée dans les vieux CPUs comme le 6809/6309 aussi.

Par contre l'opération de multiplication peut être massivement parallélisée au point de pouvoir la réaliser en nettement moins de temps qu'il y a de bits à produire. En effet les additions étant commutatives, leur ordre n'importe pas. On peut les regrouper comme on veut, par exemple 3 par 3, 4 par 4, et utiliser additionneur s'épargnant la retenue (carry-save adder) pour avoir le résultat de l'addition de plusieurs nombre dans sensiblement le temps que prendrait une seule addition avec retenue classique.


Addentum (après avoir vu un article sure les multiplieurs sur wikipedia) : Est ce que tu parlais des additions des produits partiels ??, là ça serait plus cohérent en effet. Ceci étant l'algorithme de décalage ç droite pour les multiplieurs et pour la gauche pour les diviseurs, fait l'addition à chaque fois avec Add et est déjà très optimisé (ça doit faire dans les 40 cycles d'horloges pour un MUL 8 bits en moyenne)

Samuel Devulder a écrit:
Ceci explique que même sur des CPU super modernes comme le mc68060, la division reste nettement plus lente qu'une multiplication.

Sur le 6309, le DIVQ en mode immédiat (32=> 16x16 bits) ne prend que 34 cycles alors que le MULD (16x16=> 32 bits) 28 cycles et en mode indexé, on a respectivement 36 et 30 cycles. La différence n'est pas énorme (on parle de division entière ici). ON aurat pu se dire que le MULD pourrait ne prendre que22 cycle, mais il faut considérer que la taille de l'instruction est supérieure, et dont ça nécessite des cycles en sus.


Dernière édition par Neotenien le 22 Avr 2021, 14:47, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Avr 2021, 14:20 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
La page anglaise de wikipedia donne les meilleurs algorithme de multiplication, basés sur les décalages et addition originelles, mais avec aussi l'arbre de Wallace (au lieu d'avoir un algorithme de complexité Logé(N)) on aura un algo de complexité Log(N)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Avr 2021, 14:54 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Citation:
HDL ? C'est quoi ?
Hardware description language. Un raccourci pour parler de Vérilog ou VHDL (<== HDL ;) )
Citation:
(bon je chercherait sur internet mais je suppose que tu parle de portes logiqies ici au vu de la suite du message)
Oui même si le HDL n'est pas toujours au niveau porte logique ou netlist, mais peut être d'un plus haut niveau avec des process et autres machine à états.
Citation:
Euh, donc en "dur" sur le 6809 le "MUL" est une suite d'addition ?
Sur le 6809 le MUL est implémenté comme une suite de shift + add réparti sur 8 étapes d'une machine à état. Quand tu regardes un produit c'est du shift + add du produit partiel, mais au lieu de le faire un shift + add par tick d'horloge, tu peux dérouler l'algorithme et tout faire en une étape idéalement.

Le shift en "matériel" c'est juste du déplacement de fils. Ca coute rien en porte logique ou en temps d'execution. Donc la multiplication matérielle n'est que fondamentalement la somme de tous les produits partiel. Chaque produit partiel est le AND entre l'un des nombres d'origine et l'un des bits de l'autre. Fondamentalement tous les produits partiels peuvent être calculés en parallèles (et en consommant pas mal de place sur le circuit électronique) en 1 cycle, et donc le vrai cout (en cycles) est la réalisation de N additions le plus rapidement possible. Et c'est là que se trouve le problème de fond de la multiplication.

Additionner pleins de nombres est une opération qui théoriquement peut se faire en un cycle. Mais d'une part ca prend plein de place sur le circuit, et surtout la propagation de toutes les retenues ralentie l'ensemble. Les solutions (hardware) réalisant les additions en parallèle en réduisant l'impact des retenues entre en scène à ce niveau là. Il y a pleins de solutions qui existent. L'une des plus utilisée est de répartir les additions le long du pipeline d'execution pour avoir un résultat de multiplication par coup d'horloge (chaque multiplication coute 15 cycles par exemple, mais si le pipeline a 15 étapes, on peut manger et sortir une nouvelle multiplication à chaque cycle), mais on peut faire encore mieux avec les représentations binaires redondantes internes permettant (moralement) d'additionner sans retenues. En pratique il y a un mélange de plein de techniques et de compromis.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 03 Mai 2021, 12:02 
Hors ligne

Inscription: 13 Juin 2005, 21:50
Messages: 290
Localisation: Planete Zorg (31)
Le saviez-vous?

A l'origine le jeu s'appelait PUCK-MAN et a finalement été rebaptisé pour une raison assez simple.
En effet, les joueurs avaient tendance à gratter sur les bornes le P pour en faire un F... :D


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 04 Mai 2021, 20:21 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
ouais drôle j'avais déjà lu cette anecdote :lol:

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 03:33 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
Hello, j'ai bon ou pas ?
j'essaye de stocker dans "ghost_scatter_delay" la valeur à partir de FCB en fonction de gamelevel !!

Code:
       LDA #2               
       STA gamelevel
...
...
        LDX #GHOST_SCATTERTIME
        LDA gamelevel
        DECA
        LDB [A,X]         ou LDB A,X  je crois !!
        STB ghost_scatter_delay
...
...
...
GHOST_SCATTERTIME
    FCB 150,130,105,90,80,70,65,50,45,40,35,30,25,20,15,10
...
...
gamelevel RMB 1
ghost_scatter_delay RMB 1



exemple :
si "gamelevel=2" alors je devrais avoir "ghost_scatter_delay=130"

[EDIT]

ok bon je crois que ça marche avec LDB A,X

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 09:15 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
Oui, les crochets c'est pour l'adressage indirect : [A,X] va chercher la valeur qui se trouve à l'adresse pointée par A,X, soit par exemple en $9682 si A vaut 0 dans ton code.

Au lieu de faire un DECA, tu pourrais charger X avec GHOST_SCATTERTIME-1, tu gagnes deux cycles et ca evite de modifier A, a toutes fins utiles.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 09:51 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
Oui les [A,X] c'est à utiliser lorsque le tableau pointé par X contient des adresses. Or là ce sont des valeurs, donc pas de crochets, mais A,X tout court.

Et pareil que Fool pour le -1 directement dans le LDX au lieu de changer A. Tu gagne en place et en vitesse.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 09:54 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
ok cool, merci.

bah voui, GHOST_SCATTERTIME-1, ok j'essaye ça.

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 10:34 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
A propos des crochets, je me demande si LEAX [A,X] est une façon compliquée de faire LDX A,X...

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 10:48 
Hors ligne

Inscription: 21 Avr 2019, 21:48
Messages: 433
Localisation: Var
Samuel Devulder a écrit:
A propos des crochets, je me demande si LEAX [A,X] est une façon compliquée de faire LDX A,X...


J'ai vérifié ... oui !


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 20 Mai 2021, 23:46 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
oulaa mais c'est un piège d'utiliser les MACRO dans certain cas ça bouffe trop de place en dupliquant le code !

je pourrais m'en sortir avec un sous-routine en faites !! avec un JSR

[EDIT]
arrrg! soit code plus court mais lent, soit code plus long mais rapide !

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Mai 2021, 02:47 
Hors ligne

Inscription: 06 Avr 2010, 01:59
Messages: 478
Bon j'ai réussi à faire un system pour la gestion :

- à chaque level les fantômes vont de plus en plus vite.
- à chaque level, le mode fuite dure de moins en moins longtemps.

Bon c'est le top mais pour le moment ça marche !
J'ai mis un bypass du movement des fantômes tous les x frames pour les ralentir

...

_________________
Image


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 22 Mai 2021, 13:16 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
adnz a écrit:
arrrg! soit code plus court mais lent, soit code plus long mais rapide !

Tout est affaire de compromis. Si le code de la macro est gros, alors le sur-coût du jsr/rts peut être négligeable et tu n'as pas grand chose à passer par une macro.

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 276 messages ]  Aller à la page Précédente  1 ... 10, 11, 12, 13, 14, 15, 16 ... 19  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 18 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com