#2076 Le 31/05/2010, à 21:12
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
ah oui, c'est tout bête en fait…
Hors ligne
#2077 Le 31/05/2010, à 21:15
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
.file "test.c"
.text
.p2align 4,,15
.globl min_tshirtman
.type min_tshirtman, @function
min_tshirtman:
.LFB34:
.cfi_startproc
movl (%rdi), %eax
movl $1, %edx
.p2align 4,,10
.p2align 3
.L2:
movslq %edx,%rdx
movl (%rdi,%rdx,4), %edx
cmpl %eax, %edx
cmovg %eax, %edx
addl $1, %edx
cmpl $9, %edx
jle .L2
rep
ret
.cfi_endproc
.LFE34:
.size min_tshirtman, .-min_tshirtman
.p2align 4,,15
.globl min_gnuuat
.type min_gnuuat, @function
min_gnuuat:
.LFB35:
.cfi_startproc
movl (%rdi), %eax
xorl %edx, %edx
jmp .L7
.p2align 4,,10
.p2align 3
.L8:
movl (%rdi), %ecx
cmpl %ecx, %eax
cmovg %ecx, %eax
.L7:
addl $1, %edx
addq $4, %rdi
cmpl %esi, %edx
jl .L8
rep
ret
.cfi_endproc
.LFE35:
.size min_gnuuat, .-min_gnuuat
.p2align 4,,15
.globl min_grim
.type min_grim, @function
min_grim:
.LFB36:
.cfi_startproc
movslq %esi,%rsi
movl (%rdi), %eax
testq %rsi, %rsi
je .L11
movq %rsi, %r8
shrq $2, %r8
cmpq $6, %rsi
leaq 0(,%r8,4), %rdx
jbe .L18
testq %rdx, %rdx
je .L18
movl %eax, -4(%rsp)
movq %rdi, %rcx
xorl %eax, %eax
movd -4(%rsp), %xmm1
pshufd $0, %xmm1, %xmm0
.p2align 4,,10
.p2align 3
.L15:
movdqu (%rcx), %xmm2
addq $1, %rax
movdqa %xmm0, %xmm1
addq $16, %rcx
cmpq %rax, %r8
pcmpgtd %xmm2, %xmm1
pand %xmm1, %xmm2
pandn %xmm0, %xmm1
movdqa %xmm1, %xmm0
por %xmm2, %xmm0
ja .L15
movdqa %xmm0, %xmm2
cmpq %rdx, %rsi
psrldq $8, %xmm2
movdqa %xmm2, %xmm1
pcmpgtd %xmm0, %xmm1
pand %xmm1, %xmm0
pandn %xmm2, %xmm1
por %xmm0, %xmm1
movdqa %xmm1, %xmm2
psrldq $4, %xmm2
movdqa %xmm2, %xmm0
pcmpgtd %xmm1, %xmm0
pand %xmm0, %xmm1
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movd %xmm0, -4(%rsp)
movl -4(%rsp), %eax
je .L11
.L14:
leaq (%rdi,%rdx,4), %rcx
.p2align 4,,10
.p2align 3
.L16:
movl (%rcx), %edi
cmpl %edi, %eax
cmovg %edi, %eax
addq $1, %rdx
addq $4, %rcx
cmpq %rdx, %rsi
ja .L16
.L11:
rep
ret
.L18:
xorl %edx, %edx
jmp .L14
.cfi_endproc
.LFE36:
.size min_grim, .-min_grim
.section .rodata.str1.1,"aMS",@progbits,1
.LC0:
.string "%d"
.text
.p2align 4,,15
.globl main
.type main, @function
main:
.LFB37:
.cfi_startproc
pushq %rbx
.cfi_def_cfa_offset 16
movl $1, %eax
movl $1, %edx
subq $64, %rsp
.cfi_def_cfa_offset 80
leaq 16(%rsp), %rbx
.cfi_offset 3, -16
movl $1, 16(%rsp)
movl $3, 20(%rsp)
movl $-5, 24(%rsp)
movl $17, 28(%rsp)
movl $4848, 32(%rsp)
movl $0, 36(%rsp)
movl $-345, 40(%rsp)
movl $4, 44(%rsp)
movl $4, 48(%rsp)
movl $-345, 52(%rsp)
.p2align 4,,10
.p2align 3
.L22:
cltq
movl (%rbx,%rax,4), %eax
testl %eax, %eax
cmovg %edx, %eax
addl $1, %eax
cmpl $9, %eax
jle .L22
movl $1, %edx
movl $.LC0, %esi
movl $1, %edi
xorl %eax, %eax
call __printf_chk
leaq 4(%rbx), %rax
movd 16(%rsp), %xmm1
movl 52(%rsp), %edx
movl $.LC0, %esi
movl $1, %edi
movdqu (%rax), %xmm3
pshufd $0, %xmm1, %xmm0
movdqa %xmm3, %xmm2
pcmpgtd %xmm0, %xmm2
pand %xmm2, %xmm0
pandn %xmm3, %xmm2
por %xmm0, %xmm2
movdqu 16(%rax), %xmm0
movdqa %xmm2, %xmm1
pcmpgtd %xmm0, %xmm1
pand %xmm1, %xmm0
pandn %xmm2, %xmm1
por %xmm0, %xmm1
movdqa %xmm1, %xmm2
movdqa %xmm1, %xmm0
psrldq $8, %xmm2
pcmpgtd %xmm2, %xmm0
pand %xmm0, %xmm2
pandn %xmm1, %xmm0
por %xmm2, %xmm0
movdqa %xmm0, %xmm2
psrldq $4, %xmm2
movdqa %xmm2, %xmm1
pcmpgtd %xmm0, %xmm1
pand %xmm1, %xmm0
pandn %xmm2, %xmm1
por %xmm0, %xmm1
movd %xmm1, 12(%rsp)
movl 12(%rsp), %eax
cmpl %eax, %edx
cmovg %eax, %edx
xorl %eax, %eax
call __printf_chk
movd 16(%rsp), %xmm0
movl 48(%rsp), %edx
movl $.LC0, %esi
movl $1, %edi
pshufd $0, %xmm0, %xmm3
movdqa (%rbx), %xmm0
movdqa %xmm3, %xmm2
pcmpgtd %xmm0, %xmm2
pand %xmm2, %xmm0
pandn %xmm3, %xmm2
por %xmm0, %xmm2
movdqa 16(%rbx), %xmm0
movdqa %xmm2, %xmm1
pcmpgtd %xmm0, %xmm1
pand %xmm1, %xmm0
pandn %xmm2, %xmm1
por %xmm0, %xmm1
movdqa %xmm1, %xmm2
movdqa %xmm1, %xmm0
psrldq $8, %xmm2
pcmpgtd %xmm2, %xmm0
pand %xmm0, %xmm2
pandn %xmm1, %xmm0
por %xmm2, %xmm0
movdqa %xmm0, %xmm2
psrldq $4, %xmm2
movdqa %xmm2, %xmm1
pcmpgtd %xmm0, %xmm1
pand %xmm1, %xmm0
pandn %xmm2, %xmm1
por %xmm0, %xmm1
movd %xmm1, 12(%rsp)
movl 12(%rsp), %eax
cmpl %edx, %eax
cmovg %edx, %eax
movl 52(%rsp), %edx
cmpl %edx, %eax
cmovle %eax, %edx
xorl %eax, %eax
call __printf_chk
xorl %eax, %eax
addq $64, %rsp
popq %rbx
ret
.cfi_endproc
.LFE37:
.size main, .-main
.ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
.section .note.GNU-stack,"",@progbits
siii, on la teste, ça fait une comparaison
edit, j'ai mis en static les trois fonction et compilé trois fois en activant l'une ou l'autre dans le main (voir là) la version avec mon code fait 49 lignes, celle de grim en fait 77 et celle de gnuuat en fait 75... la mienne est donc probablement la plus efficace
edit: bon y'avait erreur à la compilation de ma version, qui fait en fait 75 lignes aussi ^^.
Dernière modification par tshirtman (Le 31/05/2010, à 21:40)
Hors ligne
#2078 Le 31/05/2010, à 21:17
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Dans ce cas je te laisse analyser la sortie .
Bon surtout je suis un noob en ASM Intel x86 (alors le code produit par les compilo ), je me débrouille un peu mieux en ASM ARM (sans être une brute non plus, loin de là).
Hors ligne
#2079 Le 31/05/2010, à 21:31
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
d'ou mon découpage et ma pseudo analyse (au poids ^^)
Hors ligne
#2080 Le 31/05/2010, à 21:35
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Le "poids" (si tu parle de la longueur) n'est pas forcément significatif. Les compilos aiment bien dérouler les boucles pour optimiser donc il faut se méfier.
Hors ligne
#2081 Le 31/05/2010, à 21:36
- gnuuat
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
hey c'est pas juste, pourquoi celle de tshirtman serait plus efficace, alors qu'à chaques itération, il fait toujours une assignation (qui parfois est inutile) ? :'(
Dernière modification par gnuuat (Le 31/05/2010, à 21:46)
Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !
Hors ligne
#2082 Le 31/05/2010, à 21:42
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
j'ai dis une bétise, j'avais compilé la version avec mon bug, on a autant de lignes…
edit:@grim, si en asm moins de lignes = moins de temps d'execution
@gnuuat: je pense que gcc vire mes assignations inutiles (je compile tout avec -O3)
Dernière modification par tshirtman (Le 31/05/2010, à 21:43)
Hors ligne
#2083 Le 31/05/2010, à 21:42
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Faudrait un bench pour être sur (sur un très gros tableau) car la taille ne signifie pas grand-chose (bon je sais que la "mienne" finira bonne dernière ^^).
Dernière modification par grim7reaper (Le 31/05/2010, à 21:48)
Hors ligne
#2084 Le 31/05/2010, à 21:46
- gnuuat
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Mouais, donc vu que tu as préféré utiliser une ternaire imposant systématiquement une assignation de variable (même si le nombre actuel n'est pas plus petit que le nombre stocké) et vu que grim7reaper a pas fait gaffe et qu'il fait une comparaison supplémentaire inutilement, on peut dire que les trois codes se valent...
Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !
Hors ligne
#2085 Le 31/05/2010, à 21:47
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
gaby@queen [~]diff test.tshirtman.s test.gnuuat.s
57,58c57,58
< cmpl $-345, %eax
< cmovl %eax, %edx
---
> cmpl %eax, %edx
> cmovg %eax, %edx
entre les notres va falloir un expert en fait…
edit: je pense qu'avec la mienne on perdrais la différence si on avait des valeur aléatoires ^^
Dernière modification par tshirtman (Le 31/05/2010, à 21:48)
Hors ligne
#2086 Le 31/05/2010, à 21:48
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
edit:@grim, si en asm moins de lignes = moins de temps d'execution
Non, pas sur les processeurs actuels qui sont massivements parallèles. Sur le mien oui, c'est un bon vieux monocore qui n'utilise aucune technique de parallelisation en dehors du pipeline .
Dernière modification par grim7reaper (Le 31/05/2010, à 21:49)
Hors ligne
#2087 Le 31/05/2010, à 21:51
- gnuuat
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Excuses non valable, c'est pas parce qu'il y a des ordi qui possèdent 8Gio de RAM qu'il faut défoncer la RAM .
Bon, faut juste trouver la différence entre movl et movg... Je touche plutôt à du nasm, pour moi l'ASM de GCC c'est du vomi :s .
Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !
Hors ligne
#2088 Le 31/05/2010, à 21:52
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
heu, pour que le proco puisse paralléliser faut écrire du code qui lui permette… c'est à dire séparer le boulot en plusieurs processus (ou threads) indépendants… sinon il reste limité à un coeur…
Hors ligne
#2089 Le 31/05/2010, à 21:58
- gnuuat
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
#include <stdio.h> #include <stdlib.h> #define LENGTH 10 int min_tshirtman(int* tab, int size) { int i, min; min = tab[0]; for (i = 1; i < LENGTH; i++) { i = (tab[i] < min ? tab[i] : min); } return (min); }
Bon, faudra que tu m'expliques pourquoi c'est i que tu set...
edit : c'était pour nous montrer pourquoi tu segfaultais ? .
Bon, et puis les ternaires c'est joli, mais en ASM, ça fait exactement la même chose qu'un if else... Tant qu'à faire, tu veux pas coder plus propre et lisible ?
Dernière modification par gnuuat (Le 31/05/2010, à 22:00)
Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !
Hors ligne
#2090 Le 31/05/2010, à 22:00
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
heu, pour que le proco puisse paralléliser faut écrire du code qui lui permette… c'est à dire séparer le boulot en plusieurs processus (ou threads) indépendants… sinon il reste limité à un coeur…
Et à quoi tu vois qu'il n'y a pas de threads dans ce code asm ?
Et puis en réalité, il y a d'autres moyens que les threads pour paralléliser mais je n'en dirais pas plus car mes connaissances en ce domaine sont limités et je pourrais sortir des conneries.
Hors ligne
#2091 Le 31/05/2010, à 22:10
- nesthib
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
GMT+3
Dernière modification par nesthib (Le 31/05/2010, à 22:48)
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#2092 Le 31/05/2010, à 22:12
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
@grim: oui non en théorie à partir du moment ou ton code est indépendant (genre en fonctionnel) tu peut paralléliser, mais c'est plus chaud.
@gnuuat: ben c'est propre les opérateurs ternaires (selon une certaine valeur de propre).
Dernière modification par tshirtman (Le 31/05/2010, à 22:12)
Hors ligne
#2093 Le 31/05/2010, à 22:33
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
si j'étais en python j'aurais utilisé le min builtin ^^
@grim: c'est pour pas trop voir les moches {}, et puis un truc pareil c'est honteux que ça prenne plus d'une instruction, alors plus d'une ligne, ça me ferait mal…
Tu sais, tu retirerais tout simplement les accolades du code que tu as donné, cela ne changerais strictement rien.
Ici, les accolades n’étaient pas obligatoires…
Et puis ce n’est pas moche.
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2094 Le 31/05/2010, à 22:59
- tshirtman
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Ah oui tiens, bonne nouvelle (j'avais oublié cette règle, j'ai pas réussis à décider si je l'aimais ou pas).
Hors ligne
#2095 Le 31/05/2010, à 23:01
- helly
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
echo BN
Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.
Hors ligne
#2096 Le 31/05/2010, à 23:10
- Pylades
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Ah oui tiens, bonne nouvelle (j'avais oublié cette règle, j'ai pas réussis à décider si je l'aimais ou pas).
Pourtant c’est la base, une boucle par exemple n’est constituée que d’une instruction. Les accolades servent à délimiter un bloc d’instructions qui se comportera comme une unique instruction (à la base).
“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
Linus Torvalds – 12 janvier 2003
Hors ligne
#2097 Le 31/05/2010, à 23:17
- gnuuat
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Ne dites pas Linux mais GNU/Linux
<3
Dernière modification par gnuuat (Le 31/05/2010, à 23:17)
Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !
Hors ligne
#2098 Le 31/05/2010, à 23:20
- grim7reaper
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
Moi je les met quand même juste en cas d'évolution du code et de rajout d'instructions, ça m'évite d'oublier de les rajouter après coup.
Bah ouais, quand des fois je code à 4h du mat' je ne suis plus très frais et je suis donc capable de me prendre la tête sur un comportement imprévu dû à ça (oui ça sent le vécu ), donc maintenant je sécurise (c'est pas pour la place et le temps que ça prend, bon c'est vrai que c'est pas super beau par contre ).
@gnuuat : phrase stupide au possible car elle est posée comme étant une vérité absolue (genre les deux sont absolument indissociable ), cependant il y a des contextes où l'on ne peut vouloir parler que du noyau et dans ce cas il faut bien dire Linux.
Dernière modification par grim7reaper (Le 31/05/2010, à 23:23)
Hors ligne
#2099 Le 31/05/2010, à 23:25
- Кຼزດ
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
helly a écrit :Ne dites pas Linux mais GNU/Linux
<3
♥
dou
Hors ligne
#2100 Le 31/05/2010, à 23:32
- gnuuat
Re : ..:: Topic des Codeurs Couche-Tard [0] ::..
@gnuuat : phrase stupide au possible car elle est posée comme étant une vérité absolue (genre les deux sont absolument indissociable ), cependant il y a des contextes où l'on ne peut vouloir parler que du noyau et dans ce cas il faut bien dire Linux.
Contrairement àce que tu sembles penser, je ne suis pas (plus de longue date) un extrêmiste, et je sais employer le terme qu'il faut au moment qu'il faut.
Mais cette phrase s'adresse à ceux qui ignorent que le système entier n'est pas le résultant d'un loisir d'été, mais bien de l'union d'un projet visant à libérer les utilisateurs des systèmes informatiques et d'un projet qui au départ avait un but récréatif.
Ça me fait toujours mal au coeur de voir à quel point ceux qui ont lutté pour nos libertés se font dénigrer simplement parce qu'ils portent une barbe et sont donc moins charismatiques.
Pour info, je trouve l'explication "Linux, c'est plus court à dire que GNU/Linux" complètement naze, car GNU se situe avant Linux et donc si c'était une déformation populaire, ça aurait été GNU qui aurait été retenu, et surtout parce que GNU comporte moins de voyelles et plus de sons doux que Linux (sons doux : nou VS i et ks).
Le plus drôle dans tout ça, c'est que je croise souvent des personnes qui gueulent "c'est pas un pingouin, c'est un manchot !" à tord et à travers (donc y compris quand on ne parle pas de tux), mais qui restent sourdes au nom véridique du système.
Dernière modification par gnuuat (Le 31/05/2010, à 23:39)
Bisouland : embrassez les tous !
Volez les points d'amour de vos adversaires en les embrassant, dans ce jeu gratuit par navigateur !
Hors ligne