Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue


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 tongue

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 tongue.
Bon surtout je suis un noob en ASM Intel x86 (alors le code produit par les compilo roll), 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

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 smile

@gnuuat: je pense que gcc vire mes assignations inutiles smile (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] ::..

tshirtman a écrit :

edit:@grim, si en asm moins de lignes = moins de temps d'execution smile

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 hmm.

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 yikes .

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] ::..

tshirtman a écrit :
#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 ? tongue .
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 ? tongue

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] ::..

tshirtman a écrit :

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 tongue ?
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 : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde 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 smile (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] ::..

tshirtman a écrit :

si j'étais en python j'aurais utilisé le min builtin ^^

tongue

tshirtman a écrit :

@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…
roll

Et puis ce n’est pas moche. roll


“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] ::..

tshirtman a écrit :

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] ::..

helly a écrit :

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 tongue), 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 hmm).

@gnuuat : phrase stupide au possible car elle est posée comme étant une vérité absolue (genre les deux sont absolument indissociable roll), 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] ::..

gnuuat a écrit :
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] ::..

grim7reaper a écrit :

@gnuuat : phrase stupide au possible car elle est posée comme étant une vérité absolue (genre les deux sont absolument indissociable roll), 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