Effectivement ce genre d'outils peut m'être très utile ! Merci.
Malheureusement, j'utilise VC2005, tu connais un équivalent ?
Effectivement ce genre d'outils peut m'être très utile ! Merci.
Malheureusement, j'utilise VC2005, tu connais un équivalent ?
Effectivement ce genre d'outils peut m'être très utile ! Merci.
Malheureusement, j'utilise VC2005, tu connais un équivalent ?
J'ai réduit les calculs des nœuds au plus simple : évaluation du nœud
fils et assignation d'une valeur constante.
Voici 2 tests caractéristiques :
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
Quand je double ma structure, mon temps d exécution triple ....
J'ai réduit les calculs des nœuds au plus simple : évaluation du nœud
fils et assignation d'une valeur constante.
Voici 2 tests caractéristiques :
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
Quand je double ma structure, mon temps d exécution triple ....
J'ai réduit les calculs des nœuds au plus simple : évaluation du nœud
fils et assignation d'une valeur constante.
Voici 2 tests caractéristiques :
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
Quand je double ma structure, mon temps d exécution triple ....
Salut
J'ai cr?? un syst?me de n?uds (une sorte d'arbre), ou chacun peut
avoir entre 1 et 4 fils via des pointeurs. Pour s'?valuer le n?ud
racine appelle classiquement ses fils tours ? tours qui renvoient une
valeur (tout est fait en chaine).
Malheureusement, le temps d'exploration de l'arbre est de plus en plus
long ( > lin?aire ) lorsque sa taille grandit.
Notamment, je me demandait si les cr?er dans des zones contigu?s de la
m?moire pouvait am?liorer leur temps de recherche.
Salut
J'ai cr?? un syst?me de n?uds (une sorte d'arbre), ou chacun peut
avoir entre 1 et 4 fils via des pointeurs. Pour s'?valuer le n?ud
racine appelle classiquement ses fils tours ? tours qui renvoient une
valeur (tout est fait en chaine).
Malheureusement, le temps d'exploration de l'arbre est de plus en plus
long ( > lin?aire ) lorsque sa taille grandit.
Notamment, je me demandait si les cr?er dans des zones contigu?s de la
m?moire pouvait am?liorer leur temps de recherche.
Salut
J'ai cr?? un syst?me de n?uds (une sorte d'arbre), ou chacun peut
avoir entre 1 et 4 fils via des pointeurs. Pour s'?valuer le n?ud
racine appelle classiquement ses fils tours ? tours qui renvoient une
valeur (tout est fait en chaine).
Malheureusement, le temps d'exploration de l'arbre est de plus en plus
long ( > lin?aire ) lorsque sa taille grandit.
Notamment, je me demandait si les cr?er dans des zones contigu?s de la
m?moire pouvait am?liorer leur temps de recherche.
J'ai réduit les calculs des nœuds au plus simple : évaluation du nœud
fils et assignation d'une valeur constante.
Voici 2 tests caractéristiques :
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
Quand je double ma structure, mon temps d exécution triple ....
ce qui (dé)montre ton impression, donc un autre /truc/ que
le temps de calcul intervient non linéairement.
dans un autre post, tu évoquais le possible impact du temps
d'accès à une "mémoire distante" (ce ne sont pas tes termes),
un adressage mémoire est quasi constant quelque soit l'adresse
utilisée ...
J'ai réduit les calculs des nœuds au plus simple : évaluation du nœud
fils et assignation d'une valeur constante.
Voici 2 tests caractéristiques :
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
Quand je double ma structure, mon temps d exécution triple ....
ce qui (dé)montre ton impression, donc un autre /truc/ que
le temps de calcul intervient non linéairement.
dans un autre post, tu évoquais le possible impact du temps
d'accès à une "mémoire distante" (ce ne sont pas tes termes),
un adressage mémoire est quasi constant quelque soit l'adresse
utilisée ...
J'ai réduit les calculs des nœuds au plus simple : évaluation du nœud
fils et assignation d'une valeur constante.
Voici 2 tests caractéristiques :
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
Quand je double ma structure, mon temps d exécution triple ....
ce qui (dé)montre ton impression, donc un autre /truc/ que
le temps de calcul intervient non linéairement.
dans un autre post, tu évoquais le possible impact du temps
d'accès à une "mémoire distante" (ce ne sont pas tes termes),
un adressage mémoire est quasi constant quelque soit l'adresse
utilisée ...
Voici une formule reliant le temps au nombre de noeuds n :
T(n) = (3.108/7310)*n + (1.61-3.108) (en secondes)
C'est parfaitement linéaire. Bien sûr ça na marche pas pour les
petites valeurs de n, mais une complexité c'est toujours asymptotique.
Donc ces chiffres ne démontrent rien du tout.
Le mieux serait de faire plein de mesures pour des valeurs
croissantes du nombre de noeuds et de tracer la courbe.
Si l'algo est vraiment
linéaire (ce qu'il a l'air d'être), on verra que la fin de la courbe
est droite. Pour cela, il faut être sûr qu'on ne mesure que le
parcours de l'arbre, et pas, par exemple, malloc (ou new), dont le
temps d'exécution est en général substantiel pour un calcul aussi
simple que celui-là.
Ce n'est pas le problème. Le problème c'est l'ordre dans lequel tu
traverses ta mémoire, et en particulier le fait de savoir si le cache
est efficace. Si chaque accès à un objet le trouve dans le cache, tu
seras quelques dizaines de fois plus rapide que si chaque accès est
obligé de rapatrier l'objet depuis un cache plus lointain, voire
depuis la mémoire.
(Je ne pense pas que le swap intervienne ici, c'est trop peu de
mémoire).
Pour un parcours d'arbre, typiquement, il faut que les objets soient
alloués dans l'ordre dans lequel ils sont accédés. [...]
Voici une formule reliant le temps au nombre de noeuds n :
T(n) = (3.108/7310)*n + (1.61-3.108) (en secondes)
C'est parfaitement linéaire. Bien sûr ça na marche pas pour les
petites valeurs de n, mais une complexité c'est toujours asymptotique.
Donc ces chiffres ne démontrent rien du tout.
Le mieux serait de faire plein de mesures pour des valeurs
croissantes du nombre de noeuds et de tracer la courbe.
Si l'algo est vraiment
linéaire (ce qu'il a l'air d'être), on verra que la fin de la courbe
est droite. Pour cela, il faut être sûr qu'on ne mesure que le
parcours de l'arbre, et pas, par exemple, malloc (ou new), dont le
temps d'exécution est en général substantiel pour un calcul aussi
simple que celui-là.
Ce n'est pas le problème. Le problème c'est l'ordre dans lequel tu
traverses ta mémoire, et en particulier le fait de savoir si le cache
est efficace. Si chaque accès à un objet le trouve dans le cache, tu
seras quelques dizaines de fois plus rapide que si chaque accès est
obligé de rapatrier l'objet depuis un cache plus lointain, voire
depuis la mémoire.
(Je ne pense pas que le swap intervienne ici, c'est trop peu de
mémoire).
Pour un parcours d'arbre, typiquement, il faut que les objets soient
alloués dans l'ordre dans lequel ils sont accédés. [...]
Voici une formule reliant le temps au nombre de noeuds n :
T(n) = (3.108/7310)*n + (1.61-3.108) (en secondes)
C'est parfaitement linéaire. Bien sûr ça na marche pas pour les
petites valeurs de n, mais une complexité c'est toujours asymptotique.
Donc ces chiffres ne démontrent rien du tout.
Le mieux serait de faire plein de mesures pour des valeurs
croissantes du nombre de noeuds et de tracer la courbe.
Si l'algo est vraiment
linéaire (ce qu'il a l'air d'être), on verra que la fin de la courbe
est droite. Pour cela, il faut être sûr qu'on ne mesure que le
parcours de l'arbre, et pas, par exemple, malloc (ou new), dont le
temps d'exécution est en général substantiel pour un calcul aussi
simple que celui-là.
Ce n'est pas le problème. Le problème c'est l'ordre dans lequel tu
traverses ta mémoire, et en particulier le fait de savoir si le cache
est efficace. Si chaque accès à un objet le trouve dans le cache, tu
seras quelques dizaines de fois plus rapide que si chaque accès est
obligé de rapatrier l'objet depuis un cache plus lointain, voire
depuis la mémoire.
(Je ne pense pas que le swap intervienne ici, c'est trop peu de
mémoire).
Pour un parcours d'arbre, typiquement, il faut que les objets soient
alloués dans l'ordre dans lequel ils sont accédés. [...]
Alain Ketterlin a écrit :Voici une formule reliant le temps au nombre de noeuds n :
T(n) = (3.108/7310)*n + (1.61-3.108) (en secondes)
regression affine sur 2 points ??
quelle est la marge d'erreur selon toi ? 200% ? plus ?
un temps de calcul de -1.5 sec pour 0 point ne te gène pas ?
"ces chiffres" ? tu veux dire ta formule t = a.n + b ?
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
je n'excluerais pas les allocations, dont le temps n'est pas
proportionnel à la taille mémoire alloué, le nombre d'allocations
des noeuds a par contre des chances d'être proportionnel au nombre
de noeuds et ne doit pas créer la rupture de linéarité.
Ce n'est pas le problème. Le problème c'est l'ordre dans lequel tu
traverses ta mémoire, et en particulier le fait de savoir si le cache
est efficace. Si chaque accès à un objet le trouve dans le cache, tu
seras quelques dizaines de fois plus rapide que si chaque accès est
obligé de rapatrier l'objet depuis un cache plus lointain, voire
depuis la mémoire.
un cache de 640Ko ou 1,2Mo ?? tu penses à quel type de proc ?
ou qu'est ce que tu appelles un cache ?
je n'ai lu nulle part la quantité de mémoire utilisée, même
les 640Ko et 1,2Mo ne sont que des chiffres au sens interprétés,
Pour un parcours d'arbre, typiquement, il faut que les objets soient
alloués dans l'ordre dans lequel ils sont accédés. [...]
pour un maillage c'est facile, pour un arbre quelconque c'est
bcp moins évident.
Alain Ketterlin a écrit :
Voici une formule reliant le temps au nombre de noeuds n :
T(n) = (3.108/7310)*n + (1.61-3.108) (en secondes)
regression affine sur 2 points ??
quelle est la marge d'erreur selon toi ? 200% ? plus ?
un temps de calcul de -1.5 sec pour 0 point ne te gène pas ?
"ces chiffres" ? tu veux dire ta formule t = a.n + b ?
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
je n'excluerais pas les allocations, dont le temps n'est pas
proportionnel à la taille mémoire alloué, le nombre d'allocations
des noeuds a par contre des chances d'être proportionnel au nombre
de noeuds et ne doit pas créer la rupture de linéarité.
Ce n'est pas le problème. Le problème c'est l'ordre dans lequel tu
traverses ta mémoire, et en particulier le fait de savoir si le cache
est efficace. Si chaque accès à un objet le trouve dans le cache, tu
seras quelques dizaines de fois plus rapide que si chaque accès est
obligé de rapatrier l'objet depuis un cache plus lointain, voire
depuis la mémoire.
un cache de 640Ko ou 1,2Mo ?? tu penses à quel type de proc ?
ou qu'est ce que tu appelles un cache ?
je n'ai lu nulle part la quantité de mémoire utilisée, même
les 640Ko et 1,2Mo ne sont que des chiffres au sens interprétés,
Pour un parcours d'arbre, typiquement, il faut que les objets soient
alloués dans l'ordre dans lequel ils sont accédés. [...]
pour un maillage c'est facile, pour un arbre quelconque c'est
bcp moins évident.
Alain Ketterlin a écrit :Voici une formule reliant le temps au nombre de noeuds n :
T(n) = (3.108/7310)*n + (1.61-3.108) (en secondes)
regression affine sur 2 points ??
quelle est la marge d'erreur selon toi ? 200% ? plus ?
un temps de calcul de -1.5 sec pour 0 point ne te gène pas ?
"ces chiffres" ? tu veux dire ta formule t = a.n + b ?
* 14610 created nodes : 1285.68 Ko => exec_time = 4.718 sec ( 20000
itérations )
* 7310 created nodes : 643.28 Ko => exec_time = 1.61 sec ( 20000
itérations )
je n'excluerais pas les allocations, dont le temps n'est pas
proportionnel à la taille mémoire alloué, le nombre d'allocations
des noeuds a par contre des chances d'être proportionnel au nombre
de noeuds et ne doit pas créer la rupture de linéarité.
Ce n'est pas le problème. Le problème c'est l'ordre dans lequel tu
traverses ta mémoire, et en particulier le fait de savoir si le cache
est efficace. Si chaque accès à un objet le trouve dans le cache, tu
seras quelques dizaines de fois plus rapide que si chaque accès est
obligé de rapatrier l'objet depuis un cache plus lointain, voire
depuis la mémoire.
un cache de 640Ko ou 1,2Mo ?? tu penses à quel type de proc ?
ou qu'est ce que tu appelles un cache ?
je n'ai lu nulle part la quantité de mémoire utilisée, même
les 640Ko et 1,2Mo ne sont que des chiffres au sens interprétés,
Pour un parcours d'arbre, typiquement, il faut que les objets soient
alloués dans l'ordre dans lequel ils sont accédés. [...]
pour un maillage c'est facile, pour un arbre quelconque c'est
bcp moins évident.
Je rappelle que je répondais à quelqu'un qui disait : "on voit bien
avec ces chiffres que ce n'est pas linéaire". On voit rien du tout.
On ne sait pas comment le posteur initial mesure son temps, et ce que
recouvrent ses mesures. Et oui, bien sûr, "le nombre d'allocations de
noeuds a des chances d'être proportionnel au nombre de noeuds". On a
appris quelque chose là ? La demande initiale indiquait que le temps
ne prenait en compte que le calcul, et je répondais à l'argument du
swap.
un cache de 640Ko ou 1,2Mo ?? tu penses à quel type de proc ?
ou qu'est ce que tu appelles un cache ?
C'est 32Ko en L1, mais 2 ou 4 Mo en L2 sur les processeurs actuels.
je n'ai lu nulle part la quantité de mémoire utilisée, même
les 640Ko et 1,2Mo ne sont que des chiffres au sens interprétés,
On n'a que ça. Je fais confiance à celui qui nous les fournit.
Je rappelle que je répondais à quelqu'un qui disait : "on voit bien
avec ces chiffres que ce n'est pas linéaire". On voit rien du tout.
On ne sait pas comment le posteur initial mesure son temps, et ce que
recouvrent ses mesures. Et oui, bien sûr, "le nombre d'allocations de
noeuds a des chances d'être proportionnel au nombre de noeuds". On a
appris quelque chose là ? La demande initiale indiquait que le temps
ne prenait en compte que le calcul, et je répondais à l'argument du
swap.
un cache de 640Ko ou 1,2Mo ?? tu penses à quel type de proc ?
ou qu'est ce que tu appelles un cache ?
C'est 32Ko en L1, mais 2 ou 4 Mo en L2 sur les processeurs actuels.
je n'ai lu nulle part la quantité de mémoire utilisée, même
les 640Ko et 1,2Mo ne sont que des chiffres au sens interprétés,
On n'a que ça. Je fais confiance à celui qui nous les fournit.
Je rappelle que je répondais à quelqu'un qui disait : "on voit bien
avec ces chiffres que ce n'est pas linéaire". On voit rien du tout.
On ne sait pas comment le posteur initial mesure son temps, et ce que
recouvrent ses mesures. Et oui, bien sûr, "le nombre d'allocations de
noeuds a des chances d'être proportionnel au nombre de noeuds". On a
appris quelque chose là ? La demande initiale indiquait que le temps
ne prenait en compte que le calcul, et je répondais à l'argument du
swap.
un cache de 640Ko ou 1,2Mo ?? tu penses à quel type de proc ?
ou qu'est ce que tu appelles un cache ?
C'est 32Ko en L1, mais 2 ou 4 Mo en L2 sur les processeurs actuels.
je n'ai lu nulle part la quantité de mémoire utilisée, même
les 640Ko et 1,2Mo ne sont que des chiffres au sens interprétés,
On n'a que ça. Je fais confiance à celui qui nous les fournit.