Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2719 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Comment me créer un array d'un seul coup?

n°464298
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 09:36:55  profilanswer
 

Reprise du message précédent :

benou a écrit :


moi je te renvoie sur le topic du jdk1.5. et à mon post un peu au dessus : c'est uniquement une facilitation et une vérification de typage. Ca n'a pas grand chose à voir avec les templates de C++


 
C ce qu'il me semblait.


---------------
Le Tyran
mood
Publicité
Posté le 22-07-2003 à 09:36:55  profilanswer
 

n°464339
El_gringo
Posté le 22-07-2003 à 10:08:03  profilanswer
 

LetoII a écrit :


 
Metaprogramation, unrolling template... Ca te dit rien?  


 
Franchement, non !

n°464349
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 10:18:40  profilanswer
 

El_gringo a écrit :


 
Franchement, non !


 
Ha bon ben on va essayer d'être clair (spas gangé) et concis (pas de blague merci :D)
 
Unrolling:
 
L'exemple de base c la boucle, immagine que tu ai un boucle du style:
 

Code :
  1. for(int i=0; i< 100000;++i)
  2. {
  3.    tab[i] = f(i);
  4. }


 
Ca prend son temps.
 
On peut faire plus rapide:
 

Code :
  1. for(int i=0; i< 100000;++i)
  2. {
  3.    tab[i] = f(i);
  4.    ++i;
  5.    tab[i] = f(i);
  6. }


 
T'as 2fois moin d'itération donc un gain de temps.
 
Ben avec les template tu peux tous dérouler:
 

Code :
  1. inline template<int i>void remplir(int *tab)
  2. {
  3.    tab[i] = f(i);
  4.    remplir<i-1>(tab);
  5. }
  6. inline template void remplir<0>(int *tab)
  7. {
  8.    tab[0] = f(0);
  9. }
  10. int main(int,char**)
  11. {
  12.    int tab[100000];
  13.    remplir<99999>(tab);
  14. }


 
Par contre la syntaxe je suis pas sûr, j'arrive jamais à m'en rappeler :cry:


---------------
Le Tyran
n°464361
noldor
Rockn'roll
Posté le 22-07-2003 à 10:25:38  profilanswer
 

LetoII a écrit :


 
Ha bon ben on va essayer d'être clair (spas gangé) et concis (pas de blague merci :D)
 
Unrolling:
 
L'exemple de base c la boucle, immagine que tu ai un boucle du style:
 

Code :
  1. for(int i=0; i< 100000;++i)
  2. {
  3.    tab[i] = f(i);
  4. }


 
Ca prend son temps.
 
On peut faire plus rapide:
 

Code :
  1. for(int i=0; i< 100000;++i)
  2. {
  3.    tab[i] = f(i);
  4.    ++i;
  5.    tab[i] = f(i);
  6. }


 
T'as 2fois moin d'itération donc un gain de temps.
 
Ben avec les template tu peux tous dérouler:
 

Code :
  1. inline template<int i>void remplir(int *tab)
  2. {
  3.    tab[i] = f(i);
  4.    remplir<i-1>(tab);
  5. }
  6. inline template void remplir<0>(int *tab)
  7. {
  8.    tab[0] = f(0);
  9. }
  10. int main(int,char**)
  11. {
  12.    int tab[100000];
  13.    remplir<99999>(tab);
  14. }


 
Par contre la syntaxe je suis pas sûr, j'arrive jamais à m'en rappeler :cry:  

et tu as une idée du gain de temps ?

n°464365
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 10:28:16  profilanswer
 

noldor a écrit :

et tu as une idée du gain de temps ?


 
Perso j'ai pas de chiffre, mais je connais des gens qui utilisent ça et c significatif. Bon après faut l'utiliser quand c vraiment nécessaire, et j'ai juste sorti un exemple bateau on peux faire beaucoup plus utile et compliqué.


---------------
Le Tyran
n°464382
Krueger
tout salaire demande dutravail
Posté le 22-07-2003 à 10:43:52  profilanswer
 

Mouais bon, ça c'est du bidouillage. J'avais vu ça dans mes cours de compilation. Le compilateur ne peut-il pas automatiser ça ?

n°464389
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 10:50:16  profilanswer
 

Krueger a écrit :

Mouais bon, ça c'est du bidouillage. J'avais vu ça dans mes cours de compilation. Le compilateur ne peut-il pas automatiser ça ?
 


 
Tout dépend de la qualité de ton compilo, et je le répéte, on peut faire bien mieux, j'ai juste sorti un exemple bateau pour expliquer le principe général.


---------------
Le Tyran
n°464477
souk
Tourist
Posté le 22-07-2003 à 11:32:13  profilanswer
 

ce genre d'optimisation (comme le "unrolling" (je connaissais pas le terme)), les JIT le font d'eux memes ;)

n°464549
Taz
bisounours-codeur
Posté le 22-07-2003 à 12:24:33  profilanswer
 

souk a écrit :

ce genre d'optimisation (comme le "unrolling" (je connaissais pas le terme)), les JIT le font d'eux memes ;)

:non: pas à ce point. ce genre d'optimisation est enorme. pas exemple, avec altivec et SIMD, j'irai peut etre pas derouler tout, mais au moins derouler 4 par 4, et l'accélération est enorme. mais y a pas que le unrolling comme truc marrant, on peut effectuer tout un cas de calcul à la compilation, on peut générer du code inline tres efficace, on peut simuler des opérateurs n-aires, tout ça le plus élégemment possible, et avec des performances incroyables.

n°464559
souk
Tourist
Posté le 22-07-2003 à 12:34:48  profilanswer
 

ok pour le unrolling, je me suis peut etre un peu avance (quoique... :D)mais le inlining est fait dynamiquement par les JIT en fonction des resources disponibles, ca c'est certain :jap:

mood
Publicité
Posté le 22-07-2003 à 12:34:48  profilanswer
 

n°464577
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 12:52:46  profilanswer
 

++Taz a écrit :

:non: pas à ce point. ce genre d'optimisation est enorme. pas exemple, avec altivec et SIMD, j'irai peut etre pas derouler tout, mais au moins derouler 4 par 4, et l'accélération est enorme. mais y a pas que le unrolling comme truc marrant, on peut effectuer tout un cas de calcul à la compilation, on peut générer du code inline tres efficace, on peut simuler des opérateurs n-aires, tout ça le plus élégemment possible, et avec des performances incroyables.


 
 :jap:


---------------
Le Tyran
n°464578
benou
Posté le 22-07-2003 à 12:52:50  profilanswer
 

C'est vraiment pas dans la philosophie Java ce genre de truc !  [:mlc]


---------------
ma vie, mon oeuvre - HomePlayer
n°464580
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 22-07-2003 à 12:58:42  profilanswer
 

benou a écrit :

C'est vraiment pas dans la philosophie Java ce genre de truc !  [:mlc]  


C'est surtout totalement hors-sujet depuis 1 page et d'mie :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°464581
chrisbk
-
Posté le 22-07-2003 à 12:59:20  profilanswer
 

benou a écrit :

C'est vraiment pas dans la philosophie Java ce genre de truc !  [:mlc]  


 
ca me fait tjs grincer des dents quand je lis des bidules dans ce genre :D
 
je vois pas, c'est quoi la philosophie java ?
 
Au fait, je me rapelle que t'avais deja sorti ca a propos de la surcharge d'operateur (pas dans la philo java non plus), pourtant + est bien surchargé pour java.lang.String. (perso je trouve ca un peu bancal qu'un type particulier ait ce genre de privilege mais bon :O t'en dis quoi ?)

n°464582
Joel F
Real men use unique_ptr
Posté le 22-07-2003 à 13:00:35  profilanswer
 

++Taz a écrit :

:non: pas à ce point. ce genre d'optimisation est enorme. pas exemple, avec altivec et SIMD, j'irai peut etre pas derouler tout, mais au moins derouler 4 par 4, et l'accélération est enorme. mais y a pas que le unrolling comme truc marrant, on peut effectuer tout un cas de calcul à la compilation, on peut générer du code inline tres efficace, on peut simuler des opérateurs n-aires, tout ça le plus élégemment possible, et avec des performances incroyables.


 
Je te le fait pas dire c mon stage de DEA.
la metaprog tempalte ca roxx !
 
y a aussi en template les initialisation de tableaux par liste
 

Code :
  1. array<char> tab = 1,2,3,4,5,5,6,8;


 
la gestion des tenseurs, la geenration de parser a la compilation, la réécriture de code... :D

n°464583
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 13:00:48  profilanswer
 

chrisbk a écrit :


 
ca me fait tjs grincer des dents quand je lis des bidules dans ce genre :D
 
je vois pas, c'est quoi la philosophie java ?
 
Au fait, je me rapelle que t'avais deja sorti ca a propos de la surcharge d'operateur (pas dans la philo java non plus), pourtant + est bien surchargé pour java.lang.String. (perso je trouve ca un peu bancal qu'un type particulier ait ce genre de privilege mais bon :O t'en dis quoi ?)


 
 [:plusun]


---------------
Le Tyran
n°464584
chrisbk
-
Posté le 22-07-2003 à 13:04:43  profilanswer
 

Joel F a écrit :


 
Je te le fait pas dire c mon stage de DEA.
la metaprog tempalte ca roxx !
 
y a aussi en template les initialisation de tableaux par liste
 

Code :
  1. array<char> tab = 1,2,3,4,5,5,6,8;


 
la gestion des tenseurs, la geenration de parser a la compilation, la réécriture de code... :D


 
dans la famille "domaine du C++ que je connais pas du tout", le metaprogramming se pose la :D

n°464585
Joel F
Real men use unique_ptr
Posté le 22-07-2003 à 13:05:23  profilanswer
 

noldor a écrit :

et tu as une idée du gain de temps ?


 
Ca depend de l'archi mais en géneral tu peut facielment gagner 50 à 75% en vitesse. Sur certains archi qui te permettre de manipuler le cache (AltiVec) tu peut te permettre de dérouler 4 ou 8 fois seulement, bien remplir le cache et zop tu prend un x2 dans les dents.
 
Dasn le projet que je mène, j'arrive dans certains cas à du x4.
 
Qqs liens :
http://www.oonumerics.org/blitz/papers/


Message édité par Joel F le 22-07-2003 à 13:09:47
n°464588
lorill
Posté le 22-07-2003 à 13:09:58  profilanswer
 

chrisbk a écrit :


je vois pas, c'est quoi la philosophie java ?


le moins possible dans le langage, le plus possible dans l'api  :D

n°464710
benou
Posté le 22-07-2003 à 14:23:24  profilanswer
 

chrisbk a écrit :

je vois pas, c'est quoi la philosophie java ?


 
ben c'est ce qui fait la différence entre les langages ... par exemple le choix d'un garbage collector ou non :
philosophie Java : la gestion de la mémoire est trop importante pour qu'on en laisse la responsabilité au développeur
philosophie c++ : la gestion de la mémoire est trop importante pour qu'on en laisse la responsabilité au système.
 

chrisbk a écrit :

Au fait, je me rapelle que t'avais deja sorti ca a propos de la surcharge d'operateur (pas dans la philo java non plus), pourtant + est bien surchargé pour java.lang.String.


bha oui et je confirme ...
Le cas du '+' pour les String c'est un raccourci ... un petit truc pratique quoi ... le compilo remplace a + b par new StringBuffer().append(a).append(b).toString() faut avouer que c'est quand même plus sympa à écrire ...
 
pour moi la surcharge d'opérateur c'est quand un langage permet au développeur de lui même surcharger les opérateurs, et d'après moi (c'est très subjectif comme pensée), cette fonctionnalité n'est pas dans la philosophie Java. Je maintiens. Et c'est pas la présence de l'opérateur '+' de String (dont j'avais bien conscience, qu'est ce que tu crois :o) qui me fait voir les choses autrement.
 

chrisbk a écrit :

(perso je trouve ca un peu bancal qu'un type particulier ait ce genre de privilege mais bon :O t'en dis quoi ?)


bha de toute façon, String est un type particulier : c'est le seul objet que tu peux construire sans constructeur, simplement en l'écrivant entre 2 quotes ...


Message édité par benou le 22-07-2003 à 14:25:13

---------------
ma vie, mon oeuvre - HomePlayer
n°464720
chrisbk
-
Posté le 22-07-2003 à 14:29:42  profilanswer
 

Citation :

le compilo remplace a + b par new StringBuffer().append(a).append(b).toString() faut avouer que c'est quand même plus sympa à écrire ...  


vecteur1 + vecteur2 ben c mieux aussi plus sympa que vecteur1.add(vecteur2) :D
 
(Je vois tjs pas en quoi c'est contraire a une quelconque philo java ?? A vrai dire au debut de mon stage g t meme convaincu que java le permettais :D)
 
 

Citation :

pour moi la surcharge d'opérateur c'est quand un langage permet au développeur de lui même surcharger les opérateurs


 
(Pour moi c quand il existe pour des types autre que les types atomiques)
 

n°464727
Krueger
tout salaire demande dutravail
Posté le 22-07-2003 à 14:33:53  profilanswer
 

chrisbk a écrit :

Citation :

le compilo remplace a + b par new StringBuffer().append(a).append(b).toString() faut avouer que c'est quand même plus sympa à écrire ...  


vecteur1 + vecteur2 ben c mieux aussi plus sympa que vecteur1.add(vecteur2) :D
...


C'est vrai, mais c'est moins orienté objet...

n°464728
benou
Posté le 22-07-2003 à 14:34:04  profilanswer
 

chrisbk a écrit :

vecteur1 + vecteur2 ben c mieux aussi plus sympa que vecteur1.add(vecteur2) :D


ca n'a pas la même signification :dtc:


---------------
ma vie, mon oeuvre - HomePlayer
n°464740
chrisbk
-
Posté le 22-07-2003 à 14:40:02  profilanswer
 

benou a écrit :


ca n'a pas la même signification :dtc:
 


 
je parlais de vecteur au sens mathematique du terme, gros beta :O

n°464741
noldor
Rockn'roll
Posté le 22-07-2003 à 14:40:17  profilanswer
 

benou a écrit :


ca n'a pas la même signification :dtc:
 

il parlait d'un vecteur au sens mathématique
EDIT : grillaid bourdel


Message édité par noldor le 22-07-2003 à 14:40:33
n°464743
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 14:41:46  profilanswer
 

:heink: Ct quoi dejà le sujet de ce topic ?  [:ddr555]


---------------
Le Tyran
n°464746
noldor
Rockn'roll
Posté le 22-07-2003 à 14:43:26  profilanswer
 

LetoII a écrit :

:heink: Ct quoi dejà le sujet de ce topic ?  [:ddr555]  

comment faire pour éviter de taper  

Code :
  1. for( int i=0; i<tab.length; i++) {
  2.    monJeSaisPasQuoi.add(tab[i]);
  3. }


 
enfinje crois

n°464753
benou
Posté le 22-07-2003 à 14:46:39  profilanswer
 

chrisbk a écrit :


je parlais de vecteur au sens mathematique du terme, gros beta :O


m'en fout :o
 
de toute façon, en objet c'est pas normal pour un vecteur d'avoir une méthode add() qui ne ferai que de retourner un nouveau vecteur ... ca devrait être un objet VecteurOperator qui devrait être chargé de ca  :kaola:  


---------------
ma vie, mon oeuvre - HomePlayer
n°464755
chrisbk
-
Posté le 22-07-2003 à 14:47:34  profilanswer
 

benou a écrit :


m'en fout :o
 
de toute façon, en objet c'est pas normal pour un vecteur d'avoir une méthode add() qui ne ferai que de retourner un nouveau vecteur ... ca devrait être un objet VecteurOperator qui devrait être chargé de ca  :kaola:  
 


 
hein ?
svapas ?
 

n°464758
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 14:49:07  profilanswer
 

benou a écrit :


m'en fout :o
 
de toute façon, en objet c'est pas normal pour un vecteur d'avoir une méthode add() qui ne ferai que de retourner un nouveau vecteur ... ca devrait être un objet VecteurOperator qui devrait être chargé de ca  :kaola:  
 


 
Le foncteur est une possibilité, mais on lui préfaire la méthode friend, en effet qui mieux que deux vecteurs peuvent savoir comment s'additionner?  [:ddr555]


---------------
Le Tyran
n°464762
benou
Posté le 22-07-2003 à 14:50:30  profilanswer
 

chrisbk a écrit :


hein ?
svapas ?


bon, c'était pour être extrémiste, mais moi en Java, je verrais plutot une méthode static qui serait chargée de faire les opérations sur les types.
 
genre Vecteur v3 = Vecteur.add(v1, v2) plutot que Vecteur v3 = v1.add(v2)


---------------
ma vie, mon oeuvre - HomePlayer
n°464765
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 14:51:54  profilanswer
 

benou a écrit :


bon, c'était pour être extrémiste, mais moi en Java, je verrais plutot une méthode static qui serait chargée de faire les opérations sur les types.
 
genre Vecteur v3 = Vecteur.add(v1, v2) plutot que Vecteur v3 = v1.add(v2)


 
 :jap: C le pendant de la méthode friend du C++


---------------
Le Tyran
n°464768
chrisbk
-
Posté le 22-07-2003 à 14:52:40  profilanswer
 

benou a écrit :


bon, c'était pour être extrémiste, mais moi en Java, je verrais plutot une méthode static qui serait chargée de faire les opérations sur les types.
 
genre Vecteur v3 = Vecteur.add(v1, v2) plutot que Vecteur v3 = v1.add(v2)


 
tiens on a pas eu recemment une discu sur "le static est il objet ?" [:meganne]
 
(enfin, objet, dans l'implem c++ c une fonction globale qui se charge de ca :D)
 
 

n°464776
noldor
Rockn'roll
Posté le 22-07-2003 à 14:55:15  profilanswer
 

chrisbk a écrit :


 
tiens on a pas eu recemment une discu sur "le static est il objet ?" [:meganne]
 
(enfin, objet, dans l'implem c++ c une fonction globale qui se charge de ca :D)
 
 
 

c'est pas "pure object", mais personnellement, je m'en fiche

n°464797
benou
Posté le 22-07-2003 à 15:04:49  profilanswer
 

chrisbk a écrit :


tiens on a pas eu recemment une discu sur "le static est il objet ?" [:meganne]


le static n'est pas objet ...
 
je le vois comme un raccourcit qui évite de créer un singleton ...
 
c'est pour ca que j'avais parlé de la classe VecteurOperator ;)


---------------
ma vie, mon oeuvre - HomePlayer
n°464803
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 15:10:35  profilanswer
 

benou a écrit :


le static n'est pas objet ...
 
je le vois comme un raccourcit qui évite de créer un singleton ...
 
c'est pour ca que j'avais parlé de la classe VecteurOperator ;)


 
Ha ba si c objet, c une méthode/membre qui apartien au métaobjet de l'instance. [:spamafote]


---------------
Le Tyran
n°464811
benou
Posté le 22-07-2003 à 15:12:31  profilanswer
 

LetoII a écrit :


Ha ba si c objet, c une méthode/membre qui apartien au métaobjet de l'instance. [:spamafote]  


mouais bof ...


---------------
ma vie, mon oeuvre - HomePlayer
n°464814
LetoII
Le dormeur doit se réveiller
Posté le 22-07-2003 à 15:13:40  profilanswer
 

benou a écrit :


mouais bof ...  


 
Aller, au moin +1 pour le vocabulaire  [:ddr555]


---------------
Le Tyran
n°464816
benou
Posté le 22-07-2003 à 15:15:34  profilanswer
 

LetoII a écrit :


Aller, au moin +1 pour le vocabulaire  [:ddr555]  


:D :D
 
(+1)


---------------
ma vie, mon oeuvre - HomePlayer
n°476960
BifaceMcLe​OD
The HighGlandeur
Posté le 04-08-2003 à 14:26:58  profilanswer
 

benou a écrit :


m'en fout :o
 
de toute façon, en objet c'est pas normal pour un vecteur d'avoir une méthode add() qui ne ferai que de retourner un nouveau vecteur ... ca devrait être un objet VecteurOperator qui devrait être chargé de ca  :kaola:  


Oui enfin bon, j'avoue que je trouve ça plus que limite quand on en est réduit à des arguments jusque-boutistes du genre "c'est contraire à la pureté de la théorie". Un peu de pragmatisme ne fait pas de mal.
Moi, la seule contrainte que je vois dans la surcharge des opérateurs est le risque d'effet de bord. Il faut garnatir la sécurité de programmation. Donc tant que tu te contentes de permettre la surcharge d'opérateurs de type fonction (les arguments sont en lecture seule et l'objet receveur ne peut pas être modifié), comme c'est implémenté en Ada par exemple, franchement, la brisure de la théorie objet stricte, je m'en fous un peu.

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[php] Qqun pour me filer un coup de main avec ereg?question con : peut-on mettre un if seul ?
Syntaxe pour créer 2 tables Mysql à partir de mysql_query() ?[Mysql] créer n nom de table avec un # dedans ???
[PHP] créer un nom de variable à partir d'un autrevalider plusieur formulaires d'un coup
Changer deux frames à partir d'un seul lien[OPENGL] Quel logiciel utilisez vous pour créer vos mondes 3D?
[OPENGL] Créer un fichier .raw [RESOLU]G crée une dll avec delphi, comment creer les .h et .lib pour le C++
Plus de sujets relatifs à : Comment me créer un array d'un seul coup?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)